Я пытаюсь запустить функцию 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
для получения одновременного запуска функции.