【问题标题】:OpenCL program running on CPU在 CPU 上运行的 OpenCL 程序
【发布时间】:2015-07-09 06:07:00
【问题描述】:

我想比较一下单核CPU和多核CPU的性能。 我写了一个程序,让它在单核CPU上迭代1000次,看看运行时间。在多核的情况下,我使用 OpenCL 启动了一个内核,其中代码与第一种情况的迭代内部的代码相同。

考虑多核可以运行8个并发线程,理论上多核情况的运行时间应该在T(single-core)/8以上。 但结果是T(multi-core)几乎是T(single-core)的1/20。

我想知道为什么会这样? OpenCL 编译器是否针对多核 CPU 做了一些优化?

【问题讨论】:

  • 这是什么代码?程序是如何编译的(例如优化标志)?
  • 你最好使用 OpenMP 来比较单核/多核性能。它非常易于使用,并且运行完全相同的汇编代码。

标签: multithreading opencl cpu


【解决方案1】:

如果您的单核代码是标量的,那么 opencl 运行时可能会使用 sse 或 avx 并获得额外的乘数。

【讨论】:

  • 单核代码是标量,但是opencl运行时会自动使用SSE还是AVX?
  • 可能单核版本比多核编译更未经优化,运行时过载更多。很难判断。尝试找出内核较少的不同 CPU 上的行为。
  • @buttifulbuttefly 我使用了 AMD OpenCL,但我的代码中没有使用任何矢量表示,在这种情况下 AMD 会自动执行 SSE/AVX 吗?
  • SSE 和 AVX 可以像在 gpus 上一样使用。 xmm/ymm 寄存器的每个通道上的不同工作项。因此,如果您有一个 256 人的工作组,您可以想象它会运行为 8 个线程,每个线程运行 8 个通道,每个通道展开 4 次。我们的任何其他组合...
猜你喜欢
  • 2013-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-05
  • 2017-08-07
相关资源
最近更新 更多