内核执行时间如何随着更好的占用而增加?

时间:2012-02-29 06:53:09

标签: performance cuda

内核每个线程使用54个寄存器,占用率为0.33。它有一个if语句用于调试目的:

if ( -1 == val ) // val is INT32
{
    printf( "Invalid value!\n" );
}

如果我注释掉这个if语句,内核每个线程使用33个寄存器,占用率也提高到0.5。但是,奇怪的是,这个新的更精简的内核实际上需要15%的时间来执行!所有其他代码和启动参数(块,线程)都是常量。任何人都可以解释这种性能下降会如何发生?

我在GTX 580上使用CUDA 4.0,代码编译为CUDA功能2.0。

1 个答案:

答案 0 :(得分:1)

Ashwin,您能否提供有关算法,启动参数等的更多详细信息...... Visual Profiler v4.1和Parallel Nsight都有其他指标可能有助于识别您的瓶颈。

理论占用率是SM可以隐藏延迟的抽象度量。将占用率提高到一定数量以上可能无法提高性能并可能影响性能。例如,当您增加占用率时,L1字节/线程的数量正在减少。要查看的一个项目是缓存命中率。

相关问题