Concurrency 可以用OpenCL控制计算单元吗?

Concurrency 可以用OpenCL控制计算单元吗?,concurrency,opencl,hardware,Concurrency,Opencl,Hardware,我在读过的关于OpenCL的任何文档中都找不到这个问题的答案,所以我在问:有没有可能控制哪个计算单元执行哪个算法?我想让一个算法在计算单元1上执行,另一个(不同的)算法在计算单元2上同时执行。我希望能够定义在哪个计算单元上执行内核,可能还需要定义多少个处理元素/CUDA内核 我的GPU是Nvidia GeForce GT 525M,它有2个计算单元,每个单元有48个CUDA内核。不,这是不可能的。你也不想那样做。GPU比你更清楚如何安排工作以充分利用设备,你不应该这样做 (而且无法)微观管理。当

我在读过的关于OpenCL的任何文档中都找不到这个问题的答案,所以我在问:有没有可能控制哪个计算单元执行哪个算法?我想让一个算法在计算单元1上执行,另一个(不同的)算法在计算单元2上同时执行。我希望能够定义在哪个计算单元上执行内核,可能还需要定义多少个处理元素/CUDA内核


我的GPU是Nvidia GeForce GT 525M,它有2个计算单元,每个单元有48个CUDA内核。

不,这是不可能的。你也不想那样做。GPU比你更清楚如何安排工作以充分利用设备,你不应该这样做 (而且无法)微观管理。当然,您可以通过设置全局和本地工作组大小来影响日程安排

如果您有两个算法,A和B,并且都能够充分利用GPU,那么没有理由并行运行它们

Sequentially:
CU 1: AAAAB
CU 2: AAAAB

In parallel:
CU 1: AAAAAAAA
CU 2: BB
如果A和B没有完全相同的运行时,并行运行它们实际上会使总运行时更长:运行时
最慢(运行时(A),运行时(B))
vs
runtime(A/2)+运行时(B/2)


如果这对您没有帮助,我建议您提出一个问题,详细说明您的实际用例。您有哪两种算法,需要在哪两种数据上运行它们,它们的设备使用情况如何,以及为什么要并行运行它们。

因此,在每个多处理器上切换上下文不会造成太多性能损失?“将调度留给GPU”方法是OpenCL的一项功能,还是也适用于CUDA?CUDA和其他GPU技术是相同的。您可以按自己希望的大小将工作分组,但不能直接控制硬件调度。我的观点是:优化单个内核是一个很好理解的问题,可以进行全面分析。优化并发内核的运行是一个更难的问题(变量越多,GPU调度可能是黑盒),因此如果可以通过顺序内核执行来解决这个问题,就可以避免。
Sequentially:
CU 1: AAAAB
CU 2: AAAAB

In parallel:
CU 1: AAAAAAAA
CU 2: BB