سؤال

تؤدي الدالة nppiDotProd_8u64f_C1R إلى حدوث خطأ cudaErrorUnknown.أنا قادر على تجميع وتشغيل boxFilterNPP وhistEqualizationNPP بشكل صحيح، لذلك أفترض أن نظامي سليم.أنا أستخدم GTX470 (قدرة حسابية 2.0) وCUDA 5.5 وVS2012 x64 على Windows7.لقد قمت أيضًا بتشغيل العديد من الإصدارات المختلفة منه على نظامين وأواجه نفس المشكلة.هنا هو الرمز:

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

أي فكرة عن مشكلتي؟

شكراً جزيلاً!!

هل كانت مفيدة؟

المحلول

حجة النتيجة في ذلك 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;

[تنصل:مكتوب في المتصفح، ولم يتم تجميعه أو اختباره، استخدم المخاطرة الخاصة]

من الواضح أنك ستحتاج إلى نسخ نتيجة المنتج النقطي مرة أخرى إلى المضيف إذا كنت في حاجة إليها.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top