【问题标题】:Is it possible to control compute units with OpenCL?是否可以使用 OpenCL 控制计算单元?
【发布时间】:2018-06-11 12:42:29
【问题描述】:

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

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

【问题讨论】:

    标签: concurrency opencl hardware


    【解决方案1】:

    不,这是不可能的。你也不想那样做。 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)) vs runtime(A/2) + runtime(B/2)

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

    【讨论】:

    • 那么每个多处理器上的上下文切换不会有太大的性能损失? “将调度留给 GPU”方法是 OpenCL 的一个特性还是也适用于例如CUDA?
    • CUDA 和其他 GPGPU 技术是一样的。您可以将工作排入您希望大小的工作组中,但您无法直接控制硬件调度。我的观点:优化单个内核是一个很好理解的问题,可以彻底分析。优化并发内核的运行是一个更难的问题(变量更多,GPU 调度可能是黑盒),因此如果可以通过顺序内核执行来解决问题,则可以避免。
    猜你喜欢
    • 2011-11-20
    • 2013-02-18
    • 2018-05-27
    • 1970-01-01
    • 2017-03-20
    • 2016-04-20
    • 1970-01-01
    • 1970-01-01
    • 2010-11-15
    相关资源
    最近更新 更多