【问题标题】:Why single CPU core's performance on the same workload different in pthread and OpenCL?为什么在 pthread 和 OpenCL 中单个 CPU 内核在相同工作负载上的性能不同?
【发布时间】:2014-08-21 18:57:55
【问题描述】:

我有一个非常简单的任务:多次扫描一个 char 数组 (16*1024)。我用 pthread 实现了它,一个线程在一个 CPU 内核上。时间是 23 点。然后我用设备裂变创建了一个只包含一个CPU计算单元(即一个CPU核)的设备,时间只有17个。在我看来,OpenCL 实现应该比 pthread 慢(因为 C 更接近硬件)。我怎么会得到这个结果?

【问题讨论】:

    标签: pthreads opencl gpgpu


    【解决方案1】:

    OpenCL 内核语言非常接近硬件。它是 C99 的超子集(不支持函数指针的子集,以及具有矢量数据类型等的超集)

    实现通常建立在 llvm 之上,内核编译为原始 X86 函数。此外,由于 OpenCL 的性质,实现可以比完整的 C 编译器做更多的优化,例如更好地支持自动向量化。因此,编写为 OpenCL 内核的代码可以轻松胜过相同的幼稚循环版本,这并不奇怪。必须做很多工作才能使其接近 OpenCL 版本。

    目前,尤其是英特尔 CPU OpenCL 实现主要是编写并行 CPU 代码的绝佳方式。即使在您的情况下,您将其限制为仅单核,但几乎可以肯定它使用了 X86 可用矢量指令的全部范围。

    【讨论】:

      猜你喜欢
      • 2013-05-11
      • 2020-01-17
      • 2021-04-04
      • 2014-03-19
      • 1970-01-01
      • 1970-01-01
      • 2017-10-03
      • 2017-05-21
      • 2022-07-23
      相关资源
      最近更新 更多