C语言 学习共享内存、分布式内存和/或GPU编程的典型问题和解决方案是什么?

gpfsuwkq  于 2023-05-16  发布在  其他
关注(0)|答案(3)|浏览(181)

我们正在寻找范例问题和代码,将运行在任何或所有的共享内存,分布式内存和GPGPU架构。我们使用的参考平台是LittleFe(littlefe.net),这是一个开放式设计的低成本教育集群,目前有六个双核CPU,每个CPU都有一个nVidia芯片组。
这些问题和解决方案将通过提供工作示例和卷起袖子和代码的机会来向任何新手教授并行性。StackoverflowMaven有很好的洞察力,很可能有一些最爱。
计算曲线下的面积是有趣的,简单的,易于理解的,但一定会有一些同样容易表达和充满实践和学习的机会。
使用一种以上的存储器架构的混合示例是最理想的,并且反映了并行编程似乎是趋势的地方。
在LittleFe上,我们主要使用三个应用程序。第一个是一个分析的最佳目标上的 dart 是高度并行的通信开销少。第二类是康威的生命博弈问题,它是一类典型的共享边界条件问题。它具有适度的通信开销。第三个是星系形成的n体模型,需要大量的通信开销。

ryevplcw

ryevplcw1#

CUDA编程指南包含了在GPU上实现矩阵乘法的详细分析。这似乎是学习GPU编程的主要“hello world”示例。
此外,CUDA SDK还包含了数十个其他很好的解释了CUDA和OpenCL中GPU编程的示例。我最喜欢的是colliding balls example。(一个有几千个球真实的碰撞的演示)

更新:

CUDA样品不再与工具包一起 Package 。您可以在GitHub上找到它们。

7y4bm7vi

7y4bm7vi2#

我最喜欢的两个是数值积分和寻找素数。对于第一个,我们在函数f(x)= 4.0 /(1.0 + x*x)上编码中点矩形规则。函数在0和1之间的积分给予常数pi的近似值,这使得检查答案的正确性变得容易。并行性跨越积分的范围(计算矩形的面积)。
对于第二个,我们输入一个整数范围,然后识别并保存该范围内的素数。我们用所有可能的因子对值进行蛮力除法;如果发现任何除数不是1或该数字,则该值是复合的。如果找到一个素数,计数并存储在共享数组中。由于N的素性测试独立于M的测试,因此并行性划分了范围。在线程之间共享prime存储或收集分布式parital答案需要一些技巧。
这些都是非常基本和简单的问题来解决,这使得学生们可以专注于并行实现,而不是太多的计算。

mzsu5hc0

mzsu5hc03#

更复杂但简单的示例问题之一是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需要具有双精度功能。

相关问题