我坚信尽可能使用不变性,这样多线程程序就不需要经典同步。这是函数式语言中使用的核心概念之一。
我想知道人们对 CUDA 程序的看法,我知道为 GPU 开发不同于为 CPU 开发并且作为 GPU n00b 我希望更多知识渊博的人就手头的问题给我他们的意见。
谢谢,加布里埃尔
我坚信尽可能使用不变性,这样多线程程序就不需要经典同步。这是函数式语言中使用的核心概念之一。
我想知道人们对 CUDA 程序的看法,我知道为 GPU 开发不同于为 CPU 开发并且作为 GPU n00b 我希望更多知识渊博的人就手头的问题给我他们的意见。
谢谢,加布里埃尔
在 CUDA 编程中,不变性也是有益的,有时甚至是必要的。
在块级通信中,不变性可能允许您跳过一些__syncthreads()
.
在网格通信中,根本没有全网格同步指令。这就是为什么在一般情况下,要保证一个块的更改对另一个块可见,需要内核终止。这是因为块可能以它们实际按顺序运行的方式调度(例如弱GPU,无法并行运行更多块)
然而,通过原子操作和__threadfence()
. 例如,您可以实现任务队列,允许块以安全的方式从那里获取新的分配。然而,这类操作应该很少执行,因为原子操作可能很耗时(尽管使用全局 L2 缓存现在它比旧 GPU 上更好)