是否可以使用 OpenCL 控制计算单元?
Is it possible to control compute units with OpenCL?
我在阅读过的关于 OpenCL 的任何文档中都找不到这个问题的答案,所以我想问:是否可以控制哪个计算单元执行哪个算法?我想让一个算法在计算单元 1 上执行,而另一个(不同的)算法在计算单元 2 上同时执行。我希望能够定义在哪个计算单元上执行内核,以及可能在多少个处理 elements/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 的 运行 时间不完全相同,它们并行实际上会使总 运行 时间更长: 运行 时间是slowest(runtime(A), runtime(B))
对比 runtime(A/2) + runtime(B/2)
.
如果这对您没有帮助,我建议您提出一个问题,详细说明您的实际用例。你有哪两种算法,你必须 运行 它们的数据是什么,它们的设备用途是什么,以及你为什么要 运行 它们并行。
我在阅读过的关于 OpenCL 的任何文档中都找不到这个问题的答案,所以我想问:是否可以控制哪个计算单元执行哪个算法?我想让一个算法在计算单元 1 上执行,而另一个(不同的)算法在计算单元 2 上同时执行。我希望能够定义在哪个计算单元上执行内核,以及可能在多少个处理 elements/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 的 运行 时间不完全相同,它们并行实际上会使总 运行 时间更长: 运行 时间是slowest(runtime(A), runtime(B))
对比 runtime(A/2) + runtime(B/2)
.
如果这对您没有帮助,我建议您提出一个问题,详细说明您的实际用例。你有哪两种算法,你必须 运行 它们的数据是什么,它们的设备用途是什么,以及你为什么要 运行 它们并行。