CUDA使用主机阵列到设备阵列

时间:2012-03-20 11:19:53

标签: arrays memory cuda global

我想要以下帮助。我有一个关于主机代码,内核函数和从内核调用的设备函数的数组。我只希望设备功能使用主机阵列。我可以通过某种方式直接从设备函数使主机阵列“可见”,还是必须先将其复制到内核?

3 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

我不相信设备功能可以直接访问主机内存。即使你可以,延迟和带宽也是残酷的,可能不值得。

如果您的意思是希望设备功能由主机端的CPU运行,那么这是可能的。您可以将__host__ __device__作为函数定义的前缀,并且将为主机和设备编译该函数,以便您可以直接在CPU上使用它。唯一的问题是该功能无法利用CPU上没有的任何CUDA功能(例如,共享内存等)。

答案 2 :(得分:0)

CUDA内核是在GPU(设备)上执行的代码。 GPU只能访问位于显卡上的内存,而不能访问主CPU内存。 CPU可以在主内存和设备内存之间复制数据。通常的情况是:

  1. CPU:在主存储器中准备输入数据
  2. CPU:将输入数据复制到设备
  3. GPU:运行内核
  4. CPU:将设备的输出复制到主存储器
  5. 我建议你阅读official documentation。如果您更喜欢幻灯片,可以从introductory presentation开始。