c++教程 如何利用VS的代码优化和openmp并行计算提高程序运行速度?
如何利用VS的代码优化和openmp并行计算提高程序运行速度?
代码优化:
属性->配置属性->C/C ->代码生成:启用增强指令集,可选用 流式处理 SIMD 扩展 2 (/arch:SSE2) (/arch:SSE2)、流式处理 SIMD 扩展 2 (/arch:SSE2) (/arch:SSE2) 进行加速浮点模型,可选用 快速 (/fp:fast) 进行浮点数据运算的加速
属性->配置属性->C/C ->优化:可选用 使速度最大化 (/O2) 进行优化。全程序优化选择是(/GL),在debug版本下不能这样设置,必须在release版本
MPI和OPENMP哪个简单?
openmp简单,修改现有的大段代码也容易openmp基本上只要在已有程序基础上根据需要加并行语句,而mpi有时甚至需要从基本设计思路上重写整个程序,而且mpi调试也困难得多,涉及到局域网通信这一不确定的因素。当然openmp虽然简单却只能用于单机多CPU/多核并行,而mpi才是用于多主机超级计算机集群的强悍工具,当然复杂。
怎么搭建OpenMp环境?
OpenMP在Windows环境下比较容易实现,只要打开VS2008中的编译选项/openmp,设置一下环境变量OMP_NUM_THREADS就可以了。一般是新建一个c 项目,以次选择Project -> (alt f7)属性 -> 配置属性(configuration property) -> c/c -> 语言(Language),打开OpenMP支持;设置环境变量:我的电脑 -> 属性 -> 高级 -> 环境变量,新建一个OMP_NUM_THREADS变量,值设为2,即为程序执行的线程数。至于其它环境变量,在使用的时候我们再设置就可以了,所以暂时不考虑。这样,就可以进行OpenMP程序设计了。测试例子1:#include "omp.h"int main(int argc, char* argv[]) {#pragma omp parallel for() {int i = 0 i int y = i } return 0 }可以在任务管理器中看到CPU跑到100%。测试例子2:#include <stdio.h> #include <omp.h>int main() {omp_set_num_threads(2)#pragma omp parallelprintf("Hello from Thread NO.%dn", omp_get_thread_num())return 0}程序运行结果为:Hello from Thread NO.0Hello from Thread NO.1
openmp内部怎么实现多线程的?
OpenMP中任务调度主要针对并行的for循环,当循环中每次迭代的计算量不相等时,如果简单地给各个线程分配相同次数的迭代,则可能会造成各个线程计算负载的不平衡,影响程序的整体性能。 动态调度依赖于运行时的状态动态确定线程所执行的迭代,也就是线程执行完已经分配的任务后,会去领取还有的任务。由于线程启动和执行完的时间不确定,所以迭代被分配到哪个线程是无法事先知道的。 当不使用size 时,是将迭代逐个地分配到各个线程。 当使用size 时,逐个分配size个迭代给各个线程。
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。