Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 学习共享内存、分布式内存和/或GPU编程的示例问题和解决方案是什么?_C_Cuda_Openmp_Mpi_Opencl - Fatal编程技术网

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

C 学习共享内存、分布式内存和/或GPU编程的示例问题和解决方案是什么?,c,cuda,openmp,mpi,opencl,C,Cuda,Openmp,Mpi,Opencl,我们正在寻找将在任何或所有共享内存、分布式内存和GPU架构上运行的示例问题和代码。我们使用的参考平台是LittleFe(LittleFe.net),这是一个开放设计、低成本的教育集群,目前有六个双核CPU,每个CPU都有一个nVidia芯片组 这些问题和解决方案将有助于向任何新手教授并行性,方法是提供工作示例和机会来卷起袖子和编写代码。Stackoverflow专家有很好的洞察力,可能会有一些最喜欢的 计算曲线下的面积是有趣的、简单的和容易理解的,但肯定会有同样容易表达的,并且充满了练习和学习的

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

这些问题和解决方案将有助于向任何新手教授并行性,方法是提供工作示例和机会来卷起袖子和编写代码。Stackoverflow专家有很好的洞察力,可能会有一些最喜欢的

计算曲线下的面积是有趣的、简单的和容易理解的,但肯定会有同样容易表达的,并且充满了练习和学习的机会

使用多种内存架构的混合示例是最理想的,反映了并行编程的发展趋势

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

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


此外,CUDE SDK还包含数十个其他在CUDA和OpenCL中进行GPU编程的示例。我最喜欢的是碰撞球的例子。(数千个球实时碰撞的演示)

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

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


这些都是需要解决的非常基本和简单的问题,这使学生能够专注于并行实现,而不是太多的计算。

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

在不同的平台和体系结构上实现这个简单的例程,可以让我们了解一些功能和工作原理。有关BLAS和?gemm例程的更多详细信息,请访问


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

Sweet,自从“与米奇一起唱歌”以来,人们喜欢弹跳球,也许可以修改它以演示理想气体定律。谢谢Clay。我知道我最喜欢的thread monkey会有一些很好的建议。Clay、Andrew Fitz Gibbon和我在Fitz和我所教的Petascale研究所结束时,在为并行编程工作的ACM tech pack 2上相遇。我使用了一个与单位圆方程直接相关的变量,x^2+y^2=1,解y得到y=sqrt(1-x^2)。把它下面的面积从-1取到1,就得到了一个半圆的面积,即π/2。我在Petascale研究所用它来教授mpi点对点通信,也作为Berkeley Map Reduce主题的一个例子。其他人扩展了我的串行版本的代码来教授OpenMP和Cuda。这是一个很好的建议。谢谢这也自然会导致对BLAS和其他数字库的调查/讨论。第二个出发点是讨论误差,从单精度到双精度并得到相同的结果并不足以验证算法的数值稳定性