我注意到一些npp函数有一个参数*pDeviceBuffer.我想知道这个论点是什么以及如何在使用函数时设置它.此外,函数的结果(如nppsMax_32f)将写回指针.内存或设备内存是否存在?谢谢.
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);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
510 次 |
最近记录: |