我将参加OpenMP的演讲,我想用OpenMP编写一个程序。您建议哪个程序具有最重要的OpenMP概念并具有明显的加速?我想要一个很棒的程序示例,请帮助我,你是OpenMP的专家 你知道我正在寻找一个技术性和有趣的例子,输出很好。
我想写两个活泼的程序,第一个用于更好地说明最重要的OpenMP概念,并且具有令人印象深刻的加速和第二个作为实践,每个人都必须同时编写该代码
我的观众可能非常业余
答案 0 :(得分:3)
我个人不会说OpenMP最令人印象深刻的方面是你可以用它编写代码的可扩展性。我要说的是,一个更令人印象深刻的方面是可以轻松地使用现有的串行程序,并且只需要几个OpenMP指令,就可以将其转换为具有令人满意的可伸缩性的并行程序。
所以我建议您接受您的受众感兴趣的任何程序(或任何程序的一部分),更好的是您的受众熟悉的程序,并在那里然后在您的讲座中并行化,你说的很生动。如果一位讲师能够通过5分钟编码和重新编译在8个核心上向我展示4倍的加速,我会留下深刻的印象。这导致了各种有趣的话题,关于你为什么不(总是,很容易)在8个核心上获得8倍的加速。
当然,像所有舞台魔术师一样,你必须仔细选择你的例子并进行排练,以确保你获得足够令人印象深刻的加速来支持你的论点。
就个人而言,我很尴尬地使用令人尴尬的并行程序进行这样的演示;观众中更有洞察力的成员可能会被激活到meh
等回复中。
答案 1 :(得分:1)
(1)矩阵乘法
也许这是最简单的例子(尽管矩阵添加会更简单)。
(2)Mandelbrot
http://en.wikipedia.org/wiki/Mandelbrot_set
Mandelbrot也是令人尴尬的并行,OpenMP可以实现不错的加速。您甚至可以使用图形来可视化它。 Mandelbrot也是一个有趣的例子,因为它有工作量不平衡。您可能会根据计划政策(例如schedule(dynamic,1)
与schedule(static)
)以及不同的线程库(例如,Cilk Plus或TBB)看到不同的加速比。
(3)几个数学核心
例如,FFT(非递归版本)也令人尴尬地并行化。
查看“OmpSCR”基准测试:http://sourceforge.net/projects/ompscr/此套件包含简单的OpenMP示例。