题
是否有任何范例可以给您带来不同的思维方式或对编写多线程应用程序有不同的看法?也许感觉上有很大不同,比如过程式编程和函数式编程。
其他提示
我不太明白这个问题,但是如果你开始使用以下代码进行一些编码 CUDA 为您提供一些思考多线程应用程序的不同方式。
它不同于一般的多线程技术,如信号量、监视器等。因为你同时有数千个线程。因此,CUDA 中的并行性问题更多地在于对数据进行分区并稍后混合数据块。
彻底重新思考常见串行问题的一个小例子是 扫描 算法。它很简单:
- 给定一个 SET {a,b,c,d,e}
我想要以下一组:
{a、a+b、a+b+c、a+b+c+d、a+b+c+d+e}
在这种情况下,符号“+”是任何可交换运算符(不仅是加号,还可以进行乘法)。
如何并行执行此操作?这是对问题的彻底重新思考,描述如下 纸.
CUDA 中不同算法的更多实现可以在 NVIDIA 网站
那么,一个非常保守模式的转变是从螺纹为中心的并发(分享一切)朝向流程为中心的并发(地址空间分离)。这样一个可避免意外的数据共享和它更容易执行不同的子系统之间的通信的策略。
这想法是旧的,被传播(其中包括)通过微内核操作系统的社区建立更可靠的操作系统。有趣的是,奇异 OS原型由微软研究表明,传统的地址空间与此模型工作时甚至不要求。
在相对较新的想法,我最喜欢的是事务内存:通过确保避免并发问题更新总是原子。
有在的OpenMP 一个LOOKSEE一个有趣的变化。
不隶属于 StackOverflow