我在 CUDA Fermi GPU 上启动了一个非常简单的内核 <<<1,512>>>。
__global__ void kernel(){
int x1,x2;
x1=5;
x2=1;
for (int k=0;k<=1000000;k++)
{
x1+=x2;
}
}
内核非常简单,它进行 10^6 次加法,并且不会将任何内容传回全局内存。结果是正确的,即循环 x1(在其所有 512 个线程实例中)包含 10^6 + 5
我正在尝试测量内核的执行时间。同时使用 Visual Studio 并行 nsight 和 nvvp。Nsight 测量 2.5 微秒,nvvp 测量 4 微秒。
问题如下:我可能会大大增加循环的大小,例如增加到 10^8 并且时间保持不变。如果我大大减小循环大小也是一样的。为什么会这样?
请注意,如果我在循环内使用共享内存或全局内存,测量值会反映正在执行的工作(即存在比例性)。