文章目录
1. cudaHostRegitster的使用构建pinned memory 1.1 基本使用 1.2 cudaHostRegister 需要设置cudaSetDevice?
Reference
1. cudaHostRegitster的使用构建pinned memory
注意使用C++申请的内存空间,在进行copy是无法实现流的最大异步性;因此使用cudaMallocHost或者cudaHostRegister让已申请的空间变为pinned memory才行;才能实现流异步。
1.1 基本使用
cudaHostRegister进行锁页,从而实现copy的并行性,而不需要每次用cudaMallocHost进行申请。
template < typename Type>
bool PinMemory ( std:: vector< T> * data) {
cudaHostRegister ( data-> data ( ) , data-> size ( ) * sizeof ( T) , cudaHostRegisterDefault) ;
return true;
}
template < typename Type>
bool UnPinMemory ( std:: vector< T> * data) {
if ( ! data-> empty ( ) ) {
cudaHostUnregister ( data-> data ( ) ) ;
return true;
}
return false;
}
1.2 cudaHostRegister 需要设置cudaSetDevice?
CudaHostRegister 为何要设置cudaDevice: HostRegister默认这个paged-lock 内存被当前device 访问,如果让所有device 访问需要在调用的时候加上cudaHostRegisterPortable
Reference