많은 데이터를 처리하는 CUDA 커널이 있습니다. 모든 데이터를 한꺼번에 전송할 수 없으므로 데이터를 청크로 분할하여 청크로 처리하고 GPU에서 출력을 업데이트해야합니다. 파일에서 입력 데이터를 구문 분석하고 있습니다. 호스트와 GPU에서 두 개의 버퍼를 사용하여 청크의 메모리 전송을 오버랩 할 수 있다고 생각했습니다. 하나의 척을 처리하는 동안 다른 것을 읽고 GPU로 전송하고 커널을 같은 스트림으로 시작할 수있었습니다. 내 문제는 커널의 실행 시간이 데이터를 구문 분석하고 GPU로 전송하는 것보다 느리다는 것입니다. 어떻게하면 memcpys가 memcpys가 블로킹이되지 않는다는 사실에 따라 커널이 사용하는 데이터를 덮어 쓰지 않게 할 수 있습니까?cuda에서 메모리 계산 중복 문제
//e.g. Pseudocode
//for every chunk
//parse data
//cudaMemcpyAsync (dev, host, size, H2D)
//launch kernel
//switch_buffer
//copy result from device to host
감사합니다.
언제든지 동일한 메모리를 재사용하지 않고 버퍼를 전환하지 않으려면이 [웹 세미나] (http://on-demand.gputechconf.com/gtc- Express/2011/프레젠테이션/StreamsAndConcurrencyWebinar.pdf). 가능성은 부식에 대응하는 memcpy와 커널 출시 쌍마다 서로 다른 스트림을 사용하는 것입니다. 또한 고정 된 메모리를 사용해야합니다! 의사 코드에서 사용 된 cuda 스트림은'cudaMemcpyAsync'에도 없습니다. – hubs