Использование паролей для перекрытия передачи данных с использованием ядра не работает в моей системе.CUDA Overlap Data не работает
Здравствуйте, Я хочу использовать Пересечение вычислений и передачу данных в CUDA, но я не могу. Справочный документ NVIDIA говорит, что при использовании потоков можно использовать перерасчет вычислений и передачу данных. но моя система не работает Пожалуйста, помогите мне.
Моя система находится ниже
- ОС: Window 7 64bit
- CUDA: версия 5.0.7
- Develp комплект: Визуальная Студийского 2008
- GPU: GTX 680
Я получаю профиль Посмотреть вот так
я не получаю перекрытием, код ниже:
-new pinned memory
cudaHostAlloc((void **)&apBuffer, sizeof(BYTE)*lBufferSize,cudaHostAllocDefault);
-call function
//Input Data
for(int i=0;i<m_n3DChannelCnt*m_nBucket;++i)
{
cudaErrorChk_Return(cudaMemcpyAsync(d_ppbImg[i],ppbImg[i],sizeof(BYTE)*m_nImgWidth*m_nImgHeight,cudaMemcpyHostToDevice,m_pStream[i/m_nBucket]));
}
//Call Function
for(int i=0;i<m_n3DChannelCnt ;++i)
{KernelGetVis8uObjPhsPhs<<<nBlockCnt,nThreadCnt,0,m_pStream[i]>>>(d_ppbVis[i],d_ppbAvg[i],d_ppfPhs[i],d_ppfObj[i],d_ppbAmp[i]
,nTotalSize,d_ppstRefData[i],d_ppbImg[i*m_nBucket],d_ppbImg[i*m_nBucket+1],d_ppbImg[i*m_nBucket+2],d_ppbImg[i*m_nBucket+3]
,fSclFloatVis2ByteVis);
}
//OutputData
for(int i=0;i<m_n3DChannelCnt;++i)
{
if(ppbVis && ppbVis[i]) cudaErrorChk_Return(cudaMemcpyAsync(ppbVis[i],d_ppbVis[i],sizeof(BYTE)*m_nImgWidth*m_nImgHeight,cudaMemcpyDeviceToHost,m_pStream[i]));
if(ppbAvg && ppbAvg[i]) cudaErrorChk_Return(cudaMemcpyAsync(ppbAvg[i],d_ppbAvg[i],sizeof(BYTE)*m_nImgWidth*m_nImgHeight,cudaMemcpyDeviceToHost,m_pStream[i]));
if(ppfPhs && ppfPhs[i]) cudaErrorChk_Return(cudaMemcpyAsync(ppfPhs[i],d_ppfPhs[i],sizeof(float)*m_nImgWidth*m_nImgHeight,cudaMemcpyDeviceToHost,m_pStream[i]));
if(ppfObj && ppfObj[i]) cudaErrorChk_Return(cudaMemcpyAsync(ppfObj[i],d_ppfObj[i],sizeof(float)*m_nImgWidth*m_nImgHeight,cudaMemcpyDeviceToHost,m_pStream[i]));
if(ppbAmp && ppbAmp[i]) cudaErrorChk_Return(cudaMemcpyAsync(ppbAmp[i],d_ppbAmp[i],sizeof(BYTE)*m_nImgWidth*m_nImgHeight,cudaMemcpyDeviceToHost,m_pStream[i]));
}
Пожалуйста, дайте мне знать о том, почему профилировщик не показывает совмещение выполнения ядра и передачи данных.
Обратите внимание на форматирование и язык, который вы используете в вопросах переполнения стека, __much__. Когда вы разместили его, это был почти непонятный беспорядок. – talonmies