gpt4 book ai didi

c++ - 如何使用 CUDA 以正确的方式在 C++ 项目和 C++ 中的 DLL 之间传输数据?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:47:14 33 4
gpt4 key购买 nike

我有一个 C++ 项目,它使用 C++ 中的 DLL 和 CUDA。

现在我将 2 个指针从主项目传递到 DLL。在 DLL 内部,数组将被复制到设备内存中。将对它们进行一些计算。然后,阵列将被复制回主机。

听说用d​​ata overlap的方式传输数据会好一些。但是在这种情况下我该怎么做呢?复制函数 cudaMemcpyAsync 要求固定内存是异步的,而传递的指针不是,对吧?

我使用的临时解决方案是使用 memcpy 将传递的数组复制到固定数组。然后,我使用流来重叠数据。之后,再次使用 memcpy 从固定内存数组复制到传递的数组。我认为 CPU 的东西显然不是一个好方法。

当两者都使用 CUDA 时,我们能否做一些事情,比如将固定内存数组从主项目传递到 DLL?

非常感谢。

最佳答案

标准 C/C++ 分配器分配的内存,即 mallocnew 可以通过使用 CUDA 运行时函数 cudaHostRegister 转换为页锁定内存,可用于重叠异步内存拷贝 b/w 主机和设备。被告知;不要忘记取消固定使用上述功能固定的内存。使用 cudaHostUnregister取消固定内存。如果未取消固定内存,则可能会产生意外结果。例如一个函数可能会尝试固定已经固定的内存。或固定内存可以使用 freedelete 释放,这是未定义的行为。

关于c++ - 如何使用 CUDA 以正确的方式在 C++ 项目和 C++ 中的 DLL 之间传输数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20539538/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com