Использование NppStreamContext для функций nppi_Ctx из библиотеки Nvidia NPP в Cuda 10.2 - PullRequest
0 голосов
/ 24 апреля 2020

Я пытаюсь запустить функцию NPP nppiSqrDistanceValid_Norm_8u32f_C1R_Ctx для сопоставления с образцом из последнего набора инструментов Cuda 10.2. Запуск выполняется медленно - дает то же время выполнения, что и в не потоковой версии nppiSqrDistanceValid_Norm_8u32f_C1R. А именно, он работает в не параллельном режиме, несмотря на потоки. Мой код выглядит следующим образом:

int nstreams = 10;

Npp32f** pDst_array = new Npp32f * [nstreams];
int* pPitches_dst = new int[nstreams];

cudaStream_t* streams = new cudaStream_t[nstreams];
NppStreamContext* pNppStreamContext = new NppStreamContext[nstreams];

for (int i = 0; i < nstreams; i++)
{
   cudaStreamCreate(&(streams[i]));
}

for (int i = 0; i < nstreams; i++)
{
   int width = (roi_src[i]).width - (roi_pattern[i]).width + 1;
   int height = (roi_src[i]).height - (roi_pattern[i]).height + 1;

   nppSetStream(streams[i]);
   nppGetStreamContext(&(pNppStreamContext[i]));

   pDst_array[i] = nppiMalloc_32f_C1(width, height, &(pPitches_dst[i]));        

   nppiSqrDistanceValid_Norm_8u32f_C1R_Ctx(d_src + (roi_src[i]).y * nSrcPitch + (roi_src[i]).x * sizeof(Npp8u),
                                        nSrcPitch,
                                        { (roi_src[i]).width, (roi_src[i]).height },
                                        d_patterns_array[i],
                                        d_patterns_pitch[i],
                                        { (roi_pattern[i]).width, (roi_pattern[i]).height },
                                        pDst_array[i],
                                        pPitches_dst[i],
                                        pNppStreamContext[i]);
}

Что не так с такой реализацией. И как правильно использовать NppStreamContext для получения одновременного запуска функции.

...