gpt4 book ai didi

c++ - 使用 cudaHostAlloc 对我的情况有好处

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

我多次启动内核,直到找到解决方案。解决方案将被至少一个 block 找到。
因此,当一个 block 找到解决方案时,它应该通知 cpu 找到了解决方案,以便 cpu 打印该 block 提供的解决方案。
所以我目前正在做的是:

__global__ kernel(int sol)
{
//do some computations
if(the block found a solution)
sol = blockId.x //atomically
}

现在每次调用内核时,我都会将 sol 复制回主机内存并检查其值。例如,如果它设置为 3,我知道 blockid 3 找到了解决方案,所以我现在知道解决方案的索引从哪里开始,并将解决方案复制回主机。
在这种情况下,使用 cudaHostAlloc 会是更好的选择吗?此外,在每次内核调用时复制单个整数的值是否会减慢我的程序?

最佳答案

从 GPU 向 CPU 发出拷贝,然后等待其完成会减慢您的程序一点。请注意,如果您选择发送 1 个字节或 1KB,那不会有太大区别。在这种情况下,带宽不是问题,而是延迟。

但是启动内核也会消耗一些时间。如果您的算法的“核心”在内核本身,我就不会在那个单一的小传输上花费太多时间。

请注意,如果您选择使用映射内存,而不是使用 cudaMemcpy,您需要显式放置一个 cudaDeviceSynchronise(或 cudaThreadSynchronise with older CUDA) 屏障(与 cudaMemcpy 处的隐式屏障相对),然后再读取状态。否则,您的主机代码可能会在内核覆盖它之前先读取存储在固定内存中的旧值。

关于c++ - 使用 cudaHostAlloc 对我的情况有好处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6613478/

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