2012-08-09 63 views
0

我已經將一個項目從CUDA 4.0,Nsight 2.0升級到CUDA 4.2,Nsight 2.2,在CUDA 4.2上重新編譯CUDPP。我可以在升級後正確使用斷點和步驟設備代碼,但是當我的代碼調用cudppScan()函數時,即使函數正確執行操作並返回正確的前綴和值,Nsight也會報告訪問衝突。在沒有Nsight的情況下運行釋放或調試代碼不會產生問題。這個問題可以通過下面的代碼片段重現。對於CUDA 4.2中的Nsight調試實例,Nsight 2.2是否正確調試CUDPP 2.0?

#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); 
} 
} 

回答

1

我爲此問題得到的唯一解決方案是將我的項目降級到CUDA 4.0。