如果内核太短会否影响性能?

问题描述:

如果我在矩阵M(例如M[i, j] *= (1 - M[i, j]))上执行逐个元素的操作,为每个元素(i, j)启动线程是否正常?我只关心启动线程的开销超过了实现的并行性。如果内核太短会否影响性能?

+0

我以为GPU线程是不是真的线程 – 2013-05-07 21:07:02

+0

你基准它却很有关? – 2013-05-07 22:00:46

+0

Cuda最佳实践指南是一个很好的阅读材料。通过回答alrikai是不错的,这一切都取决于应用程序类型,使用的寄存器数量,内存延迟等。 – rank1 2013-05-08 12:04:48

如果可能的话,尝试每个线程做更多的工作通常是一个更好的主意,目标是具有指令级并行性。如果一个给定的线程执行多个独立的操作,那么这些指令可以被流水线化并执行而不会停顿,这将增加你的算术throuput。相反,如果每个线程都在做一件(微不足道的)工作,那么就没有机会进行任何类型的指令级并行,也没有机会隐藏任何内存延迟时间。

此外,可用的寄存器数量有限,因此您启动的线程越多,每个线程可用的寄存器数量就越少。我对开普勒卡片一无所知,但回到费米卡片生产阶段,寄存器的共享内存带宽约为8倍,所以尽可能使用寄存器非常重要(同样,我没有开普勒卡,所以我不用不知道这是否已经改变了)。

虽然这是一个有点过时,建议详细here仍然