CUDA:全局内存访问地址

CUDA: Global Memory Access Address

本文关键字:访问 地址 内存 全局 CUDA      更新时间:2023-10-16

是否可以在运行时看到线程访问的全局内存地址?

我知道它会产生很多开销,但我想看看正在访问哪些元素。我想这将有助于我理解合并机制是如何实现的。

谢谢。

CUDA线程代码大部分遵循C和c++语法模式。因此,您可以轻松地在内核代码中打印出指针的数值:

printf("pval = %pn", my_pointer);

如果你想在CUDA内核中跨线程执行此操作,你可以这样做:

__global__ void my_kernel(int *data){
  int idx = threadIdx.x+blockDim.x*blockIdx.x;
  printf("thread: %d, pointer: %p, value: %dn", idx, &(data[idx]), data[idx]);
}

或类似。显然,如果您使用大量的线程,这将产生大量的输出,并且要注意内核内printf使用的缓冲区大小有限。