复制使用 cudamallocHost 分配的部分内存
Copy part of memory allocated using cudamallocHost
我想将数组的一部分从主机上的固定内存复制到 CUDA 设备。例如,我分配了大小为 500 的固定内存,我想将元素 100-399 复制到设备上大小为 300 的数组中。
这是我的代码,
int main()
{
const unsigned int N = 500;
const unsigned int bytes = N * sizeof(int);
cudaError_t status = cudaSuccess;
int *h_a;
int *d_a;
status = cudaMallocHost((void**) &h_a, bytes);
if (status != cudaSuccess)
cout << "Error allocating pinned host memory\n";
status = cudaMalloc((void**) &d_a, bytes);
if (status != cudaSuccess)
cout << "Error allocating pinned device memory\n";
for (int i = 0; i < N; i++) {
h_a[i] = i;
}
status = cudaMemcpy(d_a, h_a + 100, bytes - (200 * sizeof(int)), cudaMemcpyHostToDevice);
if (status != cudaSuccess)
cout << "Error copying to device: " << cudaGetErrorString(status) << "\n";
cudaMemcpy(h_a + 100, d_a, bytes - (200 * sizeof(int)), cudaMemcpyDeviceToHost);
if (status != cudaSuccess)
cout << "Error copying to host: " << cudaGetErrorString(status) << "\n";
cudaFree(d_a);
cudaFreeHost(h_a);
return 0;
}
当我 运行 执行此操作时,出现主机到设备复制错误,
Error copying to device: invalid argument
只有主机到设备复制失败。设备到主机的复制工作正常。此外,如果我使用非固定主机内存,相同的代码也能正常工作。有什么方法可以使用固定内存来实现这一点吗?
以上代码实际编译运行正常。也许我在测试它时使用的是旧的可执行文件。
我想将数组的一部分从主机上的固定内存复制到 CUDA 设备。例如,我分配了大小为 500 的固定内存,我想将元素 100-399 复制到设备上大小为 300 的数组中。
这是我的代码,
int main()
{
const unsigned int N = 500;
const unsigned int bytes = N * sizeof(int);
cudaError_t status = cudaSuccess;
int *h_a;
int *d_a;
status = cudaMallocHost((void**) &h_a, bytes);
if (status != cudaSuccess)
cout << "Error allocating pinned host memory\n";
status = cudaMalloc((void**) &d_a, bytes);
if (status != cudaSuccess)
cout << "Error allocating pinned device memory\n";
for (int i = 0; i < N; i++) {
h_a[i] = i;
}
status = cudaMemcpy(d_a, h_a + 100, bytes - (200 * sizeof(int)), cudaMemcpyHostToDevice);
if (status != cudaSuccess)
cout << "Error copying to device: " << cudaGetErrorString(status) << "\n";
cudaMemcpy(h_a + 100, d_a, bytes - (200 * sizeof(int)), cudaMemcpyDeviceToHost);
if (status != cudaSuccess)
cout << "Error copying to host: " << cudaGetErrorString(status) << "\n";
cudaFree(d_a);
cudaFreeHost(h_a);
return 0;
}
当我 运行 执行此操作时,出现主机到设备复制错误,
Error copying to device: invalid argument
只有主机到设备复制失败。设备到主机的复制工作正常。此外,如果我使用非固定主机内存,相同的代码也能正常工作。有什么方法可以使用固定内存来实现这一点吗?
以上代码实际编译运行正常。也许我在测试它时使用的是旧的可执行文件。