Аргумент функции библиотеки NPP * pDeviceBuffer - PullRequest
2 голосов
/ 14 июня 2011

Я заметил, что некоторые функции npp имеют аргумент * pDeviceBuffer. Мне интересно, для чего этот аргумент и как я его установлю при использовании функций. Кроме того, результаты функций, таких как nppsMax_32f, записываются обратно в указатель. Память на хосте или памяти устройства? Спасибо.

1 Ответ

5 голосов
/ 14 июня 2011

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...