Моя среда:
ЦП: процессор Intel(R) Core(TM) i7-1065G7;
Графический процессор: графика Intel(R) Iris(R) Plus;
ОС: Win11;
IDE: VS2022;
OneAPI BaseToolkit: 2024.0.1.45;
Библиотека ядра OneMath: 2024.1.0.696;
- Я пробовал инкапсулировать настройки DFT в функцию, не являющуюся ядром, а затем ядро устройства вызывает эта функция. Но он будет сообщать об ошибках: 【Ядро SYCL не может вызвать неопределенную функцию без атрибута SYCL_EXTERNAL】【Ядро SYCL не может вызвать функцию с переменным числом аргументов】
- I проверил стандарт SYCL2020: 【Код устройства SYCL, как определено в этой спецификации, не поддерживает вызовы виртуальных функций, указатели функций в целом, исключения, информацию о типах времени выполнения или полный набор библиотек C++, которые могут зависеть от этих функций или функций конкретный хост-компилятор. Тем не менее, эти базовые ограничения могут быть сняты с помощью некоторых конкретных расширений Khronos или поставщиков.】Из вышеизложенного я могу сделать вывод, что DFT библиотеки Intel oneMKL должна быть вызываемой в ядре. (возможно?)
- Ожидайте, что это DFT можно будет вызвать в ядре (Intel GPU).
- Ниже показан DFT, реализующий oneMKL в ЦП:
#include
#include
#include
using namespace std;
int main() {
complex input[48] = { 0.5,-0.991445,0.258819,0.793353,-0.866025,-0.130526,0.965926,-0.608761,-0.5,0.991445,-0.258819,-0.793353,0.8 66025,0.130526,-0.965926,0.608761, 0.5,-0.991445,0.258819,0.793353,-0.866025,-0.130526,0.965926,-0.608761,-0.5,0.991445,-0.258819,-0.793353,0.866025,0.13052 6,-0.965926,0.608761,0.5,-0.991445,0.258819,0.793353,- 0.866025,-0.130526,0.965926,-0.608761,-0.5,0.991445,-0.258819,-0.793353,0.866025,0.130526,-0.965926,0.608761 };
complex output[48]; // Output for complex-to-complex DFT;
DFTI_DESCRIPTOR_HANDLE my_desc_handle = NULL; // Descriptor handle for complex to complex FFT;
MKL_LONG status; // Variable to store command execution status;
status = DftiCreateDescriptor(&my_desc_handle, DFTI_DOUBLE, DFTI_COMPLEX, 1, 48); // Create a descriptor;
status = DftiSetValue(my_desc_handle, DFTI_PLACEMENT, DFTI_NOT_INPLACE); // Set non-in-place operations;
status = DftiSetValue(my_desc_handle, DFTI_NUMBER_OF_TRANSFORMS, 1); //Set the number of transformations to 1;
status = DftiCommitDescriptor(my_desc_handle); // Submit the descriptor to make its configuration effective;
status = DftiComputeForward(my_desc_handle, input, output); // Execute forward FFT;
status = DftiFreeDescriptor(&my_desc_handle); // Release descriptor;
cout
Подробнее здесь: https://stackoverflow.com/questions/785 ... in-windows