将参数传递给cuLaunchKernel的有效方法?

时间:2014-09-11 15:43:35

标签: cuda

CUDA提供了三种指定内核参数的方法。

  1. 通过为每个参数提供一个N指针数组到cuLaunchKernel()。
  2. 通过提供一个缓冲区,其中N个参数已打包到cuLaunchKernel()
  3. 使用一组cudaSetupArgument()后跟cuLaunch(),但我认为这种方式已被弃用。
  4. 从严格的表现的角度来看,我想知道一种方法是否优于另一种方法。有谁知道:

    • 选项1.将导致N个GPU访问,而选项2将仅导致一个?
    • 如果选项1为真,那么CUDA会在几次内核调用中重新访问GPU以设置参数,即使其值没有改变吗?

    我在这些问题下面的真正问题是我有一个相当“简单”的内核,其中包含大量的参数,这些参数被多次调用(几乎)相同的参数值,我想知道是否只是传递参数可以有一个真实的对绩效的影响。

    答案here没有完全回答我的问题。

    编辑:另外,有没有人知道nvprof只测量内核时间,还是参数传递+内核时间?

1 个答案:

答案 0 :(得分:1)

内核启动的驱动程序开销足够高,参数传递方法的影响可以忽略不计。

如果你的内核参数设置足够大,并且变化不够,你可以从手动将参数复制到设备内存中获得一些里程(如果你感觉很奇怪,可以获得恒定内存)。