开发者

NPP library function argument *pDeviceBuffer

开发者 https://www.devze.com 2023-03-12 12:07 出处:网络
I notice some of the npp functions has an argument *pD开发者_Go百科eviceBuffer. I am wondering what this argument is for and how I shall set it while using the functions. Also, the results of function

I notice some of the npp functions has an argument *pD开发者_Go百科eviceBuffer. I am wondering what this argument is for and how I shall set it while using the functions. Also, the results of functions,such as nppsMax_32f, are written back to a pointer. Is the memory on host or device memory? Thank you.


pDeviceBuffer is used as scratch space inside npp. Scratch space is usually allocated internally (like in CUFFT). But some of these operations (sum, min, max) are so quick that allocating the scratch space itself might become a bottleneck. Querying for the scratch space required and then allocating it once before re-using it multiple times would be a good idea.

Example: Let's say you have a very large array that you want to get min max and sum from, you will need to do the following.

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

精彩评论

暂无评论...
验证码 换一张
取 消