我用opencl实现了一个简单的代码,它使用16个Mthreads复制64MB数据。内核如下:
__kernel void myKernel(
__global float4* a,
__global float4* c,
int count
){
int thread_idx = get_global_id(0);
if (thread_idx >= count) return;
c[thread_idx] = a[thread_idx];
}
我的电脑有两个显卡(GTX 980 + GTX 970)和一个显示器。我使用的是Windows 8.1。我在主机上创建了c[...]
缓冲区,一次使用普通clCreateBuffer
,另一次使用opengl创建一个gl缓冲区并创建一个带clCreateFromGLBuffer
的cl缓冲区。我的比较表明,使用clCreateBuffer
创建的缓冲区总是具有相同的速度,但是在连接到显示器的gpu上创建的GL缓冲区要快得多,如图所示:
我的调查显示clEnqueueAcquireGLBuffer
使得未连接到显示器的gpu上的所有内容都变慢了。有没有人见过这样的问题?并知道我该如何解决它?
完整的代码可以在这里找到:https://github.com/mmostajab/TestGPUMem_CL