CUDA代码优化的关键指标

CUDA代码优化的关键指标,cuda,Cuda,我的代码有以下指标: Warp Execution Efficiency 74.65% Achieved Occupancy 0.356603 如果我改变了我收到的一些东西: Warp Execution Efficiency 89.51% Achieved Occupancy 0.246908 不过,我必须注意,我在执行时间上没有任何好处 我只是想知道哪些指标更重要?翘曲执行可能是因为占用率对性能影响不大?我认为,在C

我的代码有以下指标:

Warp Execution Efficiency      74.65%

Achieved Occupancy             0.356603
如果我改变了我收到的一些东西:

Warp Execution Efficiency      89.51%

Achieved Occupancy             0.246908
不过,我必须注意,我在执行时间上没有任何好处


我只是想知道哪些指标更重要?翘曲执行可能是因为占用率对性能影响不大?

我认为,在CUDA优化中,唯一需要考虑的“重要”参数是执行时间
t
。我想说,优化问题可以形式化为函数的优化

t=t(m1,m2,...). 
参数
mi
是性能指标,例如占用率、扭曲效率、缓存未命中率等。性能指标是问题的“可观察值”,是算法结构和算法参数的函数,例如
块大小
。原则上,您应该找到最小化
t
的算法结构和参数


同样在原则上,您应该通过使用一些数值优化算法来找到
t=t(m1,m2,…)
的全局最小值,但这在实践中是不可能的。幸运的是,您有一些关于
t
相对于单个参数的行为的信息。例如,您知道,在某些条件下,
t
是扭曲效率的递减函数,这将导致选择算法结构和参数来改进该度量

达到的占用率
通常取决于您的程序在GPU流式多处理器资源上的总体配置。例如,在一个块中请求过多的共享内存或寄存器会导致SM无法在调度程序中拥有它所能支持的最大线程数。另一方面,
扭曲执行效率取决于程序控制流。代码中有太多的条件语句会导致扭曲通道发散,这会降低执行效率。您的问题没有明确的答案。这实际上取决于您的代码的功能以及CUDA设备的特性。我认为,在CUDA优化中,唯一需要考虑的“重要”参数是执行时间
t
。我想说,优化问题可以形式化为函数
t=t(m1,m2,…)
的优化。参数
mi
是性能指标,例如占用率、扭曲效率、缓存未命中率等。性能指标是问题的“可观察值”,是算法结构和算法参数的函数,例如
块大小
。原则上,您应该找到最小化
t
的算法结构和参数。同样,原则上,您应该使用一些数值优化算法找到
t=t(m1,m2,…)
的全局最小值,但这是不可能的。幸运的是,您有一些关于
t
相对于单个参数的行为的信息。例如,您知道,在某些情况下,
t
是扭曲效率的递减函数,这将导致选择算法结构和参数来改进该度量。@JackOLantern:好的,谢谢。我想您应该给出一个答案。