Я хотел бы знать, как я могу запускать два или более разных ядра параллельно и одновременно?Очевидно, что в том же графическом процессоре используется OpenCL.Моя основная идея - использовать два разных ядра (ядро A и ядро B), но им нужно использовать одну и ту же память (я не хочу дублировать память, используя один буфер для каждого в указателях «a» и «b»),Так есть ли другой способ выполнить двойное выполнение с помощью эффективного метода памяти?Коды ядер следующие: Ядро A:
_kernel void kernelA(global struct VectorStruct* a, int aLen0, global struct VectorStruct* b, int bLen0, global struct VectorStruct* c, int cLen0) {
int i = get_local_id(0);
c[(i)].x = a[(i)].x + b[(i)].x; }
Ядро B:
_kernel void kernelB(global struct VectorStruct* a, int aLen0, global struct VectorStruct* b, int bLen0, global struct VectorStruct* d, int cLen0){ int i = get_local_id(0); d[(i)].y = a[(i)].y + b[(i)].y; }
Определение для структуры VectorStruct следующее:
struct VectorStruct { int x; int y; };
В коде хоста мне нужно создать четыре указателя: VectorStruct * a VectorStruct * b VectorStruct * c VectorStruct * d Указатели «a» и «b» содержат данные, которые я передам в графический процессор.Указатель «c» будет хранить результаты ядра A, а указатель «d» будет хранить результаты ядра B.