CUDPP 2.0 是否为 CUDA 4.2、Nsight 2.2 中的 Nsight 调试实例正确调试


我已经将一个项目从CUDA 4.0,Nsight 2.0升级到CUDA 4.2,Nsight 2.2

,在CUDA 4.2上重新编译CUDPP。升级后,我可以正确使用断点和单步设备代码,但是当我的代码调用 cudppScan() 函数时,即使函数正确执行操作并返回正确的值前缀和,Nsight 也会报告 acess 冲突。在没有 Nsight 的情况下运行的发布或调试代码不会出现问题。以下代码片段可以重现此问题。

#include <cassert>
#include <cudpp/cudpp.h>
//Cudpp testing
int main(int argc, char* argv[])
{
#define ARRAY_SIZE 32
unsigned int uiArraySize = sizeof(unsigned int)*ARRAY_SIZE;
unsigned int h_auiTest[ARRAY_SIZE];
for(int i = 0 ; i < ARRAY_SIZE ; ++i)
{
    h_auiTest[i] = 1;
}
unsigned int *d_auiTest;
GPUMALLOC((void**)&d_auiTest , uiArraySize);
TOGPU(d_auiTest , h_auiTest , uiArraySize);
unsigned int *d_auiOut;
GPUMALLOC((void**)&d_auiOut , uiArraySize);
CUDPPHandle cudppContext;
CUDPPHandle scanPlan;
CUDPP_SAFE_CALL(cudppCreate(&cudppContext));
CUDPPConfiguration scanConfig;
scanConfig.algorithm = CUDPP_SCAN;
scanConfig.datatype  = CUDPP_UINT;
scanConfig.op        = CUDPP_ADD;
scanConfig.options   = CUDPP_OPTION_EXCLUSIVE | CUDPP_OPTION_FORWARD;
cudppPlan(cudppContext , &scanPlan, scanConfig, ARRAY_SIZE , 1, 0);
cudppScan(scanPlan, d_auiOut, d_auiTest , ARRAY_SIZE);
FROMGPU(h_auiTest , d_auiOut , uiArraySize);
for(int i = 0 ; i < ARRAY_SIZE ; ++i)
{
    assert(h_auiTest[i] == i);
}
}

我针对此问题获得的唯一解决方案是将我的项目降级到 CUDA 4.0。

最新更新