CUDA,不变性与可变性

时间:2013-06-10 10:19:14

标签: multithreading cuda immutability mutability

我坚信在可能的情况下使用不变性,以便多线程程序不需要经典同步。这是功能语言中使用的核心概念之一。

我想知道人们对CUDA程序的看法,我知道GPU的开发不同于开发CPU和GPU n00b我想让更多知识渊博的人给我他们对手头问题的看法。 / p>

谢谢, 加布里埃尔

1 个答案:

答案 0 :(得分:1)

在CUDA编程中,不变性也是有益的,有时甚至是必要的。

在块状通信中,不变性可能允许您跳过一些__syncthreads()

在网格式通信中,根本没有全网格同步指令。这就是为什么在一般情况下,为了保证一个块的更改被另一个块可见,需要内核终止。这是因为块可以按照它们实际按顺序运行的方式进行调度(例如,弱GPU,无法并行运行更多块)

然而,通过原子操作和__threadfence()可以进行部分通信。例如,您可以实现任务队列,允许块以安全的方式从那里获取新的分配。然而,这些操作应该很少进行,因为原子可能很耗时(尽管全局L2缓存现在比旧版GPU更好)