我使用基于 Tesla M2090 (Fermi) 的集群和另一个基于 K20Xm (Kepler) 的集群。我在 Fermi 集群上启动的内核比 Kepler 快 2.5 倍。这个内核是为 Kepler 集群编译的,键是 -arch=sm_35 --ptxas-options=-v,结果是
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 的节点性能较慢的可能原因是什么?
谢谢你。
沃伊采赫
更新
我的内核
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
Fermi 的编译命令
nvcc -arch=sm_20 --ptxas-options=-v -c -O3 -I.. -o