Как использовать интерфейсы инструментов профилирования для графического процессора для измерения времени на ускорителях +openCL+DPCPP
В своей программе я определил массив функций
typedef int(*func)(int x);
//define different functions
auto function = [](int x){ return x; };
auto functionTimesTwo = [](int x){ return (x*2); };
auto functionDivideByTwo = [](int x){ return (x/2); };
auto lambdaFunction = [](int x){return (++x);};
//Array of functions
func functions[] =
{
function,
functionTimesTwo,
functionDivideByTwo,
lambdaFunction
};
а затем я хочу измерить производительность выполнения моей программы на CPU и GPU. Я заинтересован в использовании intel / pti-gpu: интерфейсов инструментов профилирования для графического процессора (PTI для графического процессора), который находится в этой документации с флагом openCL, номером 1 и номером 2.https://github.com/intel/pti-gpu
Но я не знаю:1- Как определить массив функций для трассировки API 2- Как использовать трассировку активности устройства для измерения производительности GPU.
1 ответ
В частности, код устройства SYCL, как определено в этой спецификации, не поддерживает вызовы виртуальных функций, указатели функций в целом, исключения, информацию о типе времени выполнения или полный набор библиотек C++, которые могут зависеть от этих функций или от функций конкретного хоста. компилятор. Тем не менее, эти основные ограничения могут быть сняты некоторыми конкретными расширениями Khronos или поставщиками.
Согласно спецификации sycl 2020, в ядре SYCL не разрешается вызывать указатели на функции или какие-либо функции, вызываемые ядром. См. Https://www.khronos.org/registry/SYCL/specs/sycl-2020/html/sycl-2020.html#introduction.