串行CPU与GPU代码

时间:2011-12-08 19:23:04

标签: cuda opencl gpgpu heterogeneous

我正在编写异构计算中可能性的理论分配。 我需要比较在CPU或GPU上以串行方式执行的单个线程(不可并行化)的有效性。

我知道这是一个奇怪的问题,因为在GPU上执行单个线程没有意义,但我确实可以使用引导线比率来开发我正在开发的启发式。

我知道它可以很容易地进行测试,但我对CUDA和OpenCL都没有任何实际经验,而且我很着急。

4 个答案:

答案 0 :(得分:4)

GPU执行单元往往是有序的,并且(至少在nVidia GPU的情况下)在单线程上下文中通常每4个时钟只能获得一条指令。将其与现代超标量CPU进行比较,您通常可以获得>的吞吐量。每个时钟1个指令,CPU以时钟为基础赢得4倍或更多倍。 CPU时钟频率往往远高于GPU时钟频率,因此时钟速度可能会轻松超过3倍,相对于GPU,CPU的速度可达12倍或更高。

答案 1 :(得分:2)

单GPU核心的数量比CPU弱,加上数据传输的开销。 GPU在并行代码上获胜的原因是同时在100多个内核上运行的线程数量。考虑这个例子:

for(int i=0; i<1000; i++)
  a[i]= /*some value*/

如果只使用1个线程,则必须迭代1000次。 CPU绝对会比GPU快得多。但是为了从GPU中受益,我们创建了1000个线程,每个线程将值插入到相应位置的内存“a”。这可能会导致CPU的性能提升。

答案 2 :(得分:1)

NVidia Tesla GPU以4ops / clock的速度执行一些操作 GPU上的内存带宽通常比CPU主RAM快,并且对于2D结构有一些聪明的缓存功能。

但一般情况下没有 - 如果你不需要对&gt; 256项使用CPU做同样的事情

答案 3 :(得分:1)

您还应该考虑GPU运行的时钟速率(1-2 GHz),这与CPU相比非常低。当代码不平行时,GPU的性能确实不是一个选择。