OpenCL:如何在没有多线程的情况下在不同的设备上分发计算
关于比较在不同设备上执行简单阵列添加作业(C[i]=a[i]+B[i])所需的时间,我做了一些改进,以针对不同的阵列长度重复该过程,并返回所需的时间: X轴是以2为底的对数数组长度,Y轴是以10为底的对数时间。从2^13和2^14之间的某个地方可以看出,GPU的速度比CPU快。我想这是因为与计算相比,内存分配变得微不足道。(GPI1是一个输入错误,我的意思是GPU1) 现在希望是正确的,我可以估计在不同设备上进行阵列加法所需的时间:CPU为f1(n),第一个GPU为f2(n),第二个GPU为f3(n)。如果我有一个长度为n的数组作业,理论上我应该能够将其分成3部分,即n1+n2+n3=n,并且以满足f1(n1)=f2(n2)=f3(n3)的方式,并将其分配到系统上的三个设备上,以进行尽可能快的计算。我想我可以使用OpenMP或任何其他多线程方法来完成它,并使用CPU的核心来承载三个不同的OpenCL任务。这不是我喜欢做的,因为:OpenCL:如何在没有多线程的情况下在不同的设备上分发计算,c,multithreading,opencl,openmp,C,Multithreading,Opencl,Openmp,关于比较在不同设备上执行简单阵列添加作业(C[i]=a[i]+B[i])所需的时间,我做了一些改进,以针对不同的阵列长度重复该过程,并返回所需的时间: X轴是以2为底的对数数组长度,Y轴是以10为底的对数时间。从2^13和2^14之间的某个地方可以看出,GPU的速度比CPU快。我想这是因为与计算相比,内存分配变得微不足道。(GPI1是一个输入错误,我的意思是GPU1) 现在希望是正确的,我可以估计在不同设备上进行阵列加法所需的时间:CPU为f1(n),第一个GPU为f2(n),第二个GPU为f
-framework OpenCL
来编译代码,但是对于OpenMP,我必须使用GNU编译器。我不知道如何在其中一个编译器上同时使用OpenMP和OpenCLp.S.我也在Reddit上发布了这个问题。这个问题的解读隐含地告诉您解决方案应该是并发的(异步的),因此您需要同时添加来自三个不同设备的结果,否则您将首先在设备a上运行一个进程,然后是设备B,然后是设备C(最好在速度最快的设备上运行单个进程),如果您计划有效地学习利用OpenCL编程(在mCPU/GPU上),您应该可以轻松地进行异步编程(实际上是多线程的).因此,当以前的设备正在执行其业务时,主机无法将新任务分配给其他设备?只有赋值和捕获是顺序的。当然可以,OpenCL排队API是异步的。您可以开始在GPU上工作,然后在GPU繁忙时在CPU上工作。