我将有一个关于 OpenMP 的讲座,我想用 OpenMP lively 编写一个程序。您建议哪个程序具有最重要的 OpenMP 概念并具有显着的加速?我想要一个很棒的程序示例,请帮助我,你们是 OpenMP 方面的专家,你们知道我正在寻找一个输出良好的技术和有趣的示例。
我想写两个生动的程序,第一个是为了更好地说明最重要的 OpenMP 概念并具有令人印象深刻的加速,第二个是每个人都必须同时编写代码的动手实践
我的听众可能很业余
我将有一个关于 OpenMP 的讲座,我想用 OpenMP lively 编写一个程序。您建议哪个程序具有最重要的 OpenMP 概念并具有显着的加速?我想要一个很棒的程序示例,请帮助我,你们是 OpenMP 方面的专家,你们知道我正在寻找一个输出良好的技术和有趣的示例。
我想写两个生动的程序,第一个是为了更好地说明最重要的 OpenMP 概念并具有令人印象深刻的加速,第二个是每个人都必须同时编写代码的动手实践
我的听众可能很业余
就我个人而言,我不会说 OpenMP 最令人印象深刻的方面是您可以使用它编写的代码的可扩展性。我想说一个更令人印象深刻的方面是人们可以轻松地采用现有的串行程序,并且只需几个 OpenMP 指令,就可以将其变成具有令人满意的可扩展性的并行程序。
因此,我建议您采用听众感兴趣的任何程序(或任何程序的一部分),最好是您的听众熟悉的程序,并将其并行化,然后在您的演讲中,正如您所说的那样生动。如果一位讲师可以向我展示,例如,在 8 个内核上用 5 分钟编码和重新编译实现 4 倍的加速,我会印象深刻。这就引出了各种有趣的话题,关于为什么你不能(总是,很容易地)在 8 个内核上获得 8 倍的加速。
当然,像所有舞台魔术师一样,你必须仔细选择你的例子并排练,以确保你确实获得了足够令人印象深刻的加速来支持你的论点。
就我个人而言,在这样的演示中使用令人尴尬的并行程序会很尴尬。观众中更有洞察力的成员可能会被激起做出回应,例如meh
。
(1) 矩阵乘法
也许这是最简单的例子(尽管矩阵加法会更简单)。
(2) 曼德布洛特
http://en.wikipedia.org/wiki/Mandelbrot_set
Mandelbrot 也是令人尴尬的并行,OpenMP 可以实现不错的加速。您甚至可以使用图形将其可视化。Mandelbrot 也是一个有趣的例子,因为它存在工作负载不平衡。您可能会看到基于调度策略(例如schedule(dynamic,1)
vs. schedule(static)
)和不同线程库(例如 Cilk Plus 或 TBB)的不同加速。
(3) 几个数学内核
例如,FFT(非递归版本)也是令人尴尬的并行化。
看看“OmpSCR”基准: http: //sourceforge.net/projects/ompscr/这个套件有简单的 OpenMP 示例。