如何使用 CudaMallocHost 将固定内存分配给二维数组?
How to allocate pinned memory to a 2-dimensional array using CudaMallocHost?
如何使用 CudaMallocHost 将固定内存分配给二维数组?
期待任何帮助!
(主机)内存是一维的。就像您为二维 n×m 类型 T 元素数组分配 n * m * sizeof(T)
字节,使用 malloc()
(或 new[]
,或 std::make_unique()
) - 你对 cudaMallocHost()
.
做同样的事情
现在,上述并不是对二维数组建模的唯一方法。正如 C FAQ, question 6.16 中所解释的,我们有时可能会使用一个指针数组,每个指针都指向一个次要维度的一维数组。这也可以使用 cudaMallocHost()
来完成 - 同样,只需将其替换为 malloc()
。但是,请注意这种间接寻址会降低性能。
如果你想让数组行很好地对齐,你可能想用一些未使用的元素填充每一行;但这对于常规主机端内存分配和 cudaMallocHost()
.
也是如此
如何使用 CudaMallocHost 将固定内存分配给二维数组?
期待任何帮助!
(主机)内存是一维的。就像您为二维 n×m 类型 T 元素数组分配 n * m * sizeof(T)
字节,使用 malloc()
(或 new[]
,或 std::make_unique()
) - 你对 cudaMallocHost()
.
现在,上述并不是对二维数组建模的唯一方法。正如 C FAQ, question 6.16 中所解释的,我们有时可能会使用一个指针数组,每个指针都指向一个次要维度的一维数组。这也可以使用 cudaMallocHost()
来完成 - 同样,只需将其替换为 malloc()
。但是,请注意这种间接寻址会降低性能。
如果你想让数组行很好地对齐,你可能想用一些未使用的元素填充每一行;但这对于常规主机端内存分配和 cudaMallocHost()
.