【问题标题】:CUDA NPP image dot product having cudaErrorUnknown具有 cudaErrorUnknown 的 CUDA NPP 图像点积
【发布时间】:2014-01-12 00:20:32
【问题描述】:

函数 nppiDotProd_8u64f_C1R 导致 cudaErrorUnknown。我能够正确编译和运行 boxFilterNPP 和 histEqualizationNPP 所以我认为我的系统是健康的。我在 Windows7 上运行 GTX470(计算能力 2.0)、CUDA 5.5 和 VS2012 x64。我还在两个系统上运行了它的许多变体并且遇到了同样的问题。代码如下:

NppGpuComputeCapability capability = nppGetGpuComputeCapability();

NppiSize sizeROI;
sizeROI.width = 640;
sizeROI.height = 480;

int nBufferSize = 0;
NppStatus status = nppiDotProdGetBufferHostSize_8u64f_C1R(sizeROI,&nBufferSize);
if(status != NPP_SUCCESS) return status;

unsigned char *pDeviceBuffer;
cudaError_t err = cudaMalloc((void**)&pDeviceBuffer,nBufferSize);
if(err != cudaSuccess) return err;

int stepByte1 = 0;
Npp8u * buf1 = nppiMalloc_8u_C1(sizeROI.width, sizeROI.height, &stepByte1);
status = nppiSet_8u_C1R(1,buf1,stepByte1,sizeROI);
if(status != NPP_SUCCESS) return status;

int stepByte2 = 0;
Npp8u * buf2 = nppiMalloc_8u_C1(sizeROI.width, sizeROI.height, &stepByte2);
status = nppiSet_8u_C1R(1,buf2,stepByte2,sizeROI);
if(status != NPP_SUCCESS) return status;

err = cudaDeviceSynchronize();
if(err != cudaSuccess) return err;

double dp = 0;
status = nppiDotProd_8u64f_C1R(buf1,stepByte1,buf2,stepByte2,sizeROI,&dp,pDeviceBuffer);
if(status != NPP_SUCCESS) return status;

err = cudaDeviceSynchronize(); // return cudaErrorUnknown
                // CUDA memchecker gives me "OutOfRangeStore" exception
if(err != cudaSuccess) return err;

printf("result: %f\n", dp);

nppiFree(buf1);
nppiFree(buf2);
cudaFree(pDeviceBuffer);

对我的问题有任何想法吗?

非常感谢!!

【问题讨论】:

    标签: cuda npp


    【解决方案1】:

    nppiDotProd 调用中的结果参数必须是设备指针,而不是主机指针。您可以通过在设备上为dp 分配内存来修复它,例如:

    double * dp ;
    cudaMalloc((void **)(&dp), sizeof(Npp64f) * 1);
    status = nppiDotProd_8u64f_C1R(buf1,stepByte1,buf2,stepByte2,sizeROI,dp,pDeviceBuffer);
    if(status != NPP_SUCCESS) return status;
    

    [免责声明:在浏览器中编写,未经编译或测试,使用风险自负]

    如果需要,您显然需要将点积的结果复制回主机。

    【讨论】:

    • 这就是问题所在。太感谢了 !! (文档对此不太清楚)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-09
    • 2012-09-28
    • 2016-01-03
    • 1970-01-01
    • 2012-02-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多