奇怪的表现导致开普勒对费米

时间:2013-11-13 06:44:00

标签: cuda

我使用基于Tesla M2090(Fermi)的群集和另一个基于K20Xm(Kepler)的群集。我在Fermi集群上启动的内核比Kepler快2.5倍。 这个内核是使用keys -arch = sm_35 --ptxas-options = -v为Kepler集群编译的,结果是

ptxas info    : Compiling entry function '_Z22_repack_one_thread_8_2ILb1EEviPtPPh' for 'sm_35'
ptxas info    : Function properties for _Z22_repack_one_thread_8_2ILb1EEviPtPPh
    0 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads
ptxas info    : Used 18 registers, 344 bytes cmem[0]

因此,使用1024个线程,每个线程18个寄存器和0个字节的共享内存,我有100%的多处理器占用率。

基于Kepler的节点性能更慢的可能原因是什么?

谢谢。

Voytsekh

更新

我的内核

template <bool nocheck>
__global__ void _repack_one_thread_8_2 (int size, word *input, byte **outputs)
{
  int idx = blockDim.x * blockIdx.x + threadIdx.x;

  if (nocheck || idx * 8 < size)
  {
    word *ptr = input + idx * 4;
    byte bytes[8] = {0,0,0,0,0,0,0,0};
    int i, j;

    for (i = 0; i < 4; i++, ptr++)
    {
      word b = *ptr;

      for (j = 0; j < 8; j++)
        bytes[j] |= (((b >> (j * 2)) & 3) << (i * 2));
    }

    for (i = 0; i < 8; i++)
      outputs[i][idx] = bytes[i];
  }
}

开普勒的编译命令

nvcc  -arch=sm_35 --ptxas-options=-v  -c -O3 -I.. -o

为费米编译命令

nvcc  -arch=sm_20 --ptxas-options=-v  -c -O3 -I.. -o

2 个答案:

答案 0 :(得分:1)

有很多可能的原因。简单地说我的代码在Fermi上运行得更快,但没有详细的代码细节。

有可能你的内核甚至没有在Fermi情况下运行(用-arch=sm_35编译的代码不会在Fermi GPU上运行)。这肯定会使费米案看起来更好。

还有许多其他可能性。 kepler tuning guide已涵盖了许多可供调查的领域。

您还应该在代码中执行proper cuda error checking,并尝试使用cuda-memcheck在两种情况下运行代码,以获取有关任何内核执行问题的其他信息。

答案 1 :(得分:-1)

我不记得费米和开普勒的细节差异。开普勒在包装中的计算单位可能比费米少,但有更多的包装可以使用。我会在下班后检查它。

1024线程似乎太少了,无法比较。

所以你可以检查1024 * 1024个线程是否可用。

然后,我做了一些搜索。看起来K20Xm的XSM较少(M2090为14 VS 16),MAD功率较小(384 VS 1332.2 GFLOP),时钟频率较低(732 VS 1301 MHz)。顺便说一下,一个XSM可以被视为两个SM吗?

看起来很奇怪..

来自的数据: wikiinteger slow than float,以及一些白皮书