c++教程 如何利用VS的代碼優(yōu)化和openmp并行計算提高程序運行速度?
如何利用VS的代碼優(yōu)化和openmp并行計算提高程序運行速度?代碼優(yōu)化:屬性->配置屬性->C/C ->代碼生成:啟用增強指令集,可選用 流式處理 SIMD 擴展 2 (/arch:SS
如何利用VS的代碼優(yōu)化和openmp并行計算提高程序運行速度?
代碼優(yōu)化:
屬性->配置屬性->C/C ->代碼生成:啟用增強指令集,可選用 流式處理 SIMD 擴展 2 (/arch:SSE2) (/arch:SSE2)、流式處理 SIMD 擴展 2 (/arch:SSE2) (/arch:SSE2) 進行加速浮點模型,可選用 快速 (/fp:fast) 進行浮點數(shù)據運算的加速
屬性->配置屬性->C/C ->優(yōu)化:可選用 使速度最大化 (/O2) 進行優(yōu)化。全程序優(yōu)化選擇是(/GL),在debug版本下不能這樣設置,必須在release版本
MPI和OPENMP哪個簡單?
openmp簡單,修改現(xiàn)有的大段代碼也容易openmp基本上只要在已有程序基礎上根據需要加并行語句,而mpi有時甚至需要從基本設計思路上重寫整個程序,而且mpi調試也困難得多,涉及到局域網通信這一不確定的因素。當然openmp雖然簡單卻只能用于單機多CPU/多核并行,而mpi才是用于多主機超級計算機集群的強悍工具,當然復雜。
怎么搭建OpenMp環(huán)境?
OpenMP在Windows環(huán)境下比較容易實現(xiàn),只要打開VS2008中的編譯選項/openmp,設置一下環(huán)境變量OMP_NUM_THREADS就可以了。一般是新建一個c 項目,以次選擇Project -> (alt f7)屬性 -> 配置屬性(configuration property) -> c/c -> 語言(Language),打開OpenMP支持;設置環(huán)境變量:我的電腦 -> 屬性 -> 高級 -> 環(huán)境變量,新建一個OMP_NUM_THREADS變量,值設為2,即為程序執(zhí)行的線程數(shù)。至于其它環(huán)境變量,在使用的時候我們再設置就可以了,所以暫時不考慮。這樣,就可以進行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內部怎么實現(xiàn)多線程的?
OpenMP中任務調度主要針對并行的for循環(huán),當循環(huán)中每次迭代的計算量不相等時,如果簡單地給各個線程分配相同次數(shù)的迭代,則可能會造成各個線程計算負載的不平衡,影響程序的整體性能。 動態(tài)調度依賴于運行時的狀態(tài)動態(tài)確定線程所執(zhí)行的迭代,也就是線程執(zhí)行完已經分配的任務后,會去領取還有的任務。由于線程啟動和執(zhí)行完的時間不確定,所以迭代被分配到哪個線程是無法事先知道的。 當不使用size 時,是將迭代逐個地分配到各個線程。 當使用size 時,逐個分配size個迭代給各個線程。