NPP库函数参数* pDeviceBuffer

时间:2011-06-14 03:12:32

标签: cuda

我注意到一些npp函数有一个参数* pDeviceBuffer。我想知道这个论点是什么以及如何在使用函数时设置它。此外,函数的结果(如nppsMax_32f)将写回指针。内存或设备内存是否存在?谢谢。

1 个答案:

答案 0 :(得分:5)

pDeviceBuffer用作npp内的临时空间。划痕空间通常在内部分配(如在CUFFT中)。但是其中一些操作(sum,min,max)非常快,因此分配临时空间本身可能会成为瓶颈。查询所需的临时空间,然后在重复使用多次之前分配一次是个好主意。

实施例: 假设你有一个非常大的数组,你希望得到min max和sum,你将需要做以下事情。

int n = 1e6, bytes = 0;
nppsReductionGetBufferSize_32f(n, &bytes);
Npp8u *scratch = nppsMalloc_8f(bytes);
nppsMax_32f(in, n, max_val, nppAlgHintNone, scratch);
// Reusing scratch space for input of same size
nppsMin_32f(in, n, min_val, nppAlgHintNone, scratch);
// Reusing scratch space for input of smaller size
nppsSum_32f(in, 1e4, sum_val, nppAlgHintNone, scratch); 
// Larger inputs may require more scratch space. 
// So you may need to check and allocate appropriate space
int newBytes = 0; nppsReductionGetBufferSize_32f(5e6, &newBytes);
if (bytes != newBytes) {
     nppsFree(scratch);
     scratch = nppsMalloc_8u(bytes);
}
nppsSum_32f(in, 5e6, sum_val, nppAlgHintNone, scratch);