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