pDeviceBuffer используется как пустое пространство внутри npp. Чистое пространство обычно выделяется внутри (как в CUFFT). Но некоторые из этих операций (сумма, мин, макс) выполняются настолько быстро, что выделение самого рабочего места может стать узким местом. Было бы неплохо запросить требуемое пространство и затем выделить его один раз, прежде чем использовать его многократно.
Пример:
Допустим, у вас есть очень большой массив, из которого вы хотите получить min max и сумму, вам нужно будет сделать следующее.
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);