NPP是否支持流重叠操作?多异步卷积场景执行未重叠
关于NPP库多流异步卷积操作无法重叠的问题
我尝试使用NVIDIA NPP库的nppiFilterBorder_32f_C1R_Ctx方法,对单张图像用多个滤波器执行多异步2D卷积。但即使创建了多个流并分配给NPPI方法,操作仍未重叠,NVIDIA的nvvp工具也显示了这一点(工具截图显示操作无重叠)。因此我困惑NPP是否支持上下文操作重叠。以下是代码简化版本,仅展示异步方法调用及相关变量:
std::vector<NppStreamContext> streams(n_filters); for(size_t stream_idx=0; stream_idx<n_filters; stream_idx++) { cudaStreamCreateWithFlags(&(streams[stream_idx].hStream), cudaStreamNonBlocking); streams[stream_idx].nStreamFlags = cudaStreamNonBlocking; // 填充NppStreamContext剩余字段 // 分配图像和滤波器指针内存 } for(size_t stream_idx=0; stream_idx<n_filters; stream_idx++) { cudaMemcpyAsync(..., streams[stream_idx].hStream); nppiFilterBorder_32f_C1R_Ctx(..., streams[stream_idx]); cudaMemcpy2DAsync(..., streams[stream_idx].hStream); } for(size_t stream_idx=0; stream_idx<n_filters; stream_idx++) { cudaStreamSynchronize(streams[stream_idx].hStream); cudaStreamDestroy(streams[stream_idx].hStream); }
注意:所有输出图像和输入滤波器的设备指针都存储在std::vector中,通过当前流索引访问(例如float *ptr_filter_d = filters[stream_idx])
内容的提问来源于stack exchange,提问作者Gustavo Stahl
相关产品推荐
相关产品推荐

