我对OpenCL比较陌生。我正在使用OpenCL 1.2 C ++包装器。假设我有以下问题:我在主机上声明了三个整数值a,b和c
int a = 1;int b = 2;int c = …
没有必要读写 bufferHelp 。只需将其留在设备内存中即可。数字 1) 您建议的解决方案是如何 cl::Buffers 已经是设备内存中的全局变量。
bufferHelp
1)
cl::Buffers
这相当于您的代码并将产生相同的结果:
queueAdd->enqueueWriteBuffer(*bufferA, CL_FALSE, 0, datasize, &a); queueAdd->enqueueWriteBuffer(*bufferB, CL_FALSE, 0, datasize, &b); queueAdd->enqueueNDRangeKernel(*add, cl::NullRange, global[0], local[0]); //queueAdd->enqueueReadBuffer(*bufferHelp, CL_FALSE, 0, datasize, &help); queueMult->enqueueWriteBuffer(*bufferC, CL_FALSE, 0, datasize, &c); //queueMult->enqueueWriteBuffer(*bufferHelp, CL_FALSE, 0, datasize, &help); queueMult->enqueueNDRangeKernel(*multiply, cl::NullRange, global[0], local[0]); queueMult->enqueueReadBuffer(*bufferD, CL_TRUE, 0, datasize, &d);
注意:我还更改了阻塞写入调用,这将提供更好的速度,因为缓冲区C的复制和内核“add”的执行可以并行化。