sj7*_*755 6 io cuda bandwidth file-transfer large-files
我正在开发一个GPU加速程序,需要读取可变大小的整个文件.我的问题是,从文件读取并传输到协处理器(CUDA设备)的最佳字节数是多少?
这些文件可能与2GiB一样大,因此创建这样大小的缓冲区似乎不是最好的主意.
您可以 cudaMalloc 设备上可以容纳的最大大小的缓冲区。之后,将这种大小的输入数据块从主机复制到设备,对其进行处理,复制回结果并继续。
// Your input data on host
int hostBufNum = 5600000;
int* hostBuf = ...;
// Assume this is largest device buffer you can allocate
int devBufNum = 1000000;
int* devBuf;
cudaMalloc( &devBuf, sizeof( int ) * devBufNum );
int* hostChunk = hostBuf;
int hostLeft = hostBufNum;
int chunkNum = ( hostLeft < devBufNum ) ? hostLeft : devBufNum;
do
{
cudaMemcpy( devBuf, hostChunk, chunkNum * sizeof( int ) , cudaMemcpyHostToDevice);
doSomethingKernel<<< >>>( devBuf, chunkNum );
hostChunk = hostChunk + chunkNum;
hostLeft = hostBufNum - ( hostChunk - hostBuf );
} while( hostLeft > 0 );
Run Code Online (Sandbox Code Playgroud)