学习共享内存,分布式内存和/或GPU编程的示例问题和解决方案是什么?

时间:2011-04-22 01:11:04

标签: c cuda openmp mpi opencl

我们正在寻找可在任何或所有共享内存,分布式内存和GPGPU架构上运行的示例问题和代码。我们使用的参考平台是LittleFe(littlefe.net),这是一个开放式设计,低成本的教育集群,目前有六个双核CPU,每个都有一个nVidia芯片组。

这些问题和解决方案通过提供工作示例和机会来卷起袖子和代码,有助于教授任何新手的并行性。 Stackoverflow专家有很好的洞察力,可能会有一些收藏。

曲线下的计算区域有趣,简单且易于理解,但必然会有很容易表达的区域,并且充满了练习和学习的机会。

使用多个内存架构的混合示例是最理想的,并且反映了并行编程似乎趋向于何处。

在LittleFe上,我们主要使用三种应用程序。第一个是对飞镖靶上的最佳目标的分析,该目标高度并行,通信开销很小。第二个是康威的生活游戏,这是共享边界条件的典型问题。它具有适度的通信开销。第三个是星体形成的n体模型,需要大量的通信开销。

3 个答案:

答案 0 :(得分:2)

CUDA programming guide(PDF)包含对GPU上矩阵乘法实现的详细分析。这似乎是学习GPU编程的主要“hello world”示例。

此外,CUDE SDK包含CUDA和OpenCL中数十个其他很好解释的GPU编程示例。我最喜欢的是碰撞球的例子。 (一个有几千个球实时碰撞的演示)

答案 1 :(得分:1)

我最喜欢的两个是数字整合并找到素数。首先,我们在函数f(x)= 4.0 /(1.0 + x * x)上编码中点矩形规则。函数在0和1之间的积分给出了常数pi的近似值,这使得检查答案的正确性变得容易。并行性在整合范围内(计算矩形区域)。

对于第二个,我们输入一个整数范围,然后识别并保存该范围内的素数。我们使用所有可能因素的蛮力划分值;如果发现任何除数不是1或数字,那么该值是复合的。如果找到了素数,则对其进行计数并存储在共享数组中。并行性正在划分范围,因为测试N的素数与测试M无关。在线程之间共享素数存储或收集分布式的数据答案需要一些技巧。

这些是非常基本和简单的问题需要解决,这使得学生可以专注于并行实现,而不是所涉及的计算。

答案 2 :(得分:1)

一个更复杂但容易的例子问题是BLAS例程sgemm或dgemm(C = alpha * A x B + beta * C)其中A,B,C是有效大小的矩阵,alpha和beta是标量。类型可以是单精度浮点(sgemm)或双精度浮点(dgemm)。

在不同的平台和架构上实现这个简单的例程可以教会一些关于功能和工作原理的见解。有关BLAS和?gemm例程的更多详细信息,请查看http://www.netlib.org/blas

你需要注意的是,对于GPU上的双精度实现,GPU需要具有双精度功能。