Так что я знаю, что openCL имеет множество ограничений, когда дело доходит до того, какие аргументы он может принять, передаваемые в ядро. Например, он не поддерживает типы классов C++, и структура не может иметь указатель в качестве аргумента. Однако можно ли открывать структуры поддержкиCLCL, которые имеют не указательные структуры как поля?Комплексные структуры в openCL Kernel
Например, если я сделал следующее:
typedef struct
{
int a;
float b;
} MyStruct1;
typedef struct
{
float a;
MyStruct1 field;
} MyStruct2;
__kernel void MyKernel(const MyStruct2 *struct)
{
MyStruct1 innerStruct = struct->field;
//Do more stuff
}
^^ Будет ли это законно в OpenCL? И если это законно, есть ли какие-то особые проблемы с памятью, о которых я должен знать?
Вы можете попробовать скопировать два и отладки структур, если они делают глубокую копию или неглубокую один. Если он работает для нескольких структур длиной в 128 бит, вы должны использовать эти структуры. –