1

我声明了共享内存,并尝试使用 Visual Studio 2010 的 Nsight 2.2 对其进行跟踪。我将 CUDA 4.2 与 quadro 5000 一起使用。

在我的 kernel.cu 中:

extern __shared__ ushort2 sampleGatheringSM[];

在我调用内核的函数中:

sampleGathering_SM_size =dimBlock.x*dimBlock.y*4*sizeof(ushort2)*2; // = 10240
sampleGatheringKernel<<<dimGrid, dimBlock, sampleGathering_SM_size >>>(dev_image, dev_gradient, width, height);

当我查看 Nsight 上的 analisys 活动然后“CUDA Launches”时,它告诉我:

  • 每个块分配的寄存器:10240
  • 每个块分配的共享内存:0
  • 块限制原因:寄存器

我是否正确分配了共享内存?我不明白如何分配寄存器。

编辑:

它还告诉我:

  • 每个线程注册:32
  • 每个块的动态共享内存:0
  • 每个块的静态共享内存:0
4

1 回答 1

1

动态共享内存的声明是正确的。Nsight 2.2 分析跟踪报告有一个只发生在 CUDA 跟踪活动的错误。使用Nsight |选项运行的分析跟踪活动 选项| 分析| CUDA 内核跟踪模式=序列化和分析探查器 CUDA 活动显示正确的值。此错误将在 Nsight 的下一个版本中修复。

于 2012-10-11T20:40:46.100 回答