从06年开始,多核开发已经越来越多的成为所有应用设计必须考虑的问题。我使用MingGW+CodeBlocks来测试OpenMP多核计算框架。虽然VC8里面已经有了对OpenMP的支持,但是VC体积有点大,而且众所周知的MS编译器在兼容性上的问题,所以决定采用标准的GCC来做开发。
OpenMP只是并行开发的一种库,支持多核开发本质是将原本单线程的程序或算法变成多线程执行。OpenMP采用了类似Java的Annotation的方法来支持自动将任务转换成多线程,例如如果你的机器是双核的,自动将一个10000次的for循环自动分成两个5000次的循环,如果你的机器是四核的,则自动分成4个2500次的循环。
1 安装MingGW
GCC目前最稳定的版本是3.4.5,此外4.3.0里面默认对OpenMP进行支持。因此最好在机器上同时装两个版本。
Windows下使用GCC可以使用MingGW和Cygwin,我个人认为Cygwin过于庞大了,所以选用MingGW。
在https://sourceforge.net/project/showfiles.php?group_id=2435中下载MingGW
对于GCC3一般下载以下几个包:下载到C:/MinGW3目录中,然后直接解压到当前目录下。
mingw-runtime-3.9.tar.gz
gcc-core-3.4.5-20060117-3.tar.gz
gcc-g++-3.4.5-20060117-3.tar.gz
gdb-6.8-mingw-3.tar.bz2
w32api-3.12-mingw32-dev.tar.gz
binutils-2.19-mingw32-rc1-bin.tar.gz
gdb-6.8-mingw-3.tar.bz2
但是由于要开发OpenMP,所以还要再使用GCC4,一般包括以下几个包,从加粗的部分可以看到,最大的区别是gcc核心库的版本。下载到C:/MinGW4目录中,然后直接解压到当前目录下。
mingw-runtime-3.9.tar.gz
gcc-4.3.0-20080502-mingw32-alpha-bin.tar.gz
gdb-6.8-mingw-3.tar.bz2
w32api-3.12-mingw32-dev.tar.gz
binutils-2.19-mingw32-rc1-bin.tar.gz
gdb-6.8-mingw-3.tar.bz2
MingGW安装好之后,将C:/MingGW/bin 加入到PATH变量里面就可以在命令行下面是用GCC了。
2 CodeBlocks
这是MingGW官方Wiki里面推荐的开源IDE,我试用了一下,基本编译调试都没有什么问题。
请到以下地址下载http://www.codeblocks.org/downloads/5
安装好之后,在菜单Settings -> Compiler and debugging settings里面的Toolchain executables里面,可以切换不同的GCC版本。
3 使用OpenMP
如果想让编译器能够编译OpenMP,首先在上面的配置中,使用C:/MinGW4.
然后再Compiler settings里面的Other Options里面填入-fopenmp
在Linker settings里面的Other linker Options里面填入-lgomp -lpthread
如果在命令行下编译,可以使用命令
g++ -fopenmp main.cpp -lgomp -lpthread -o main.exe
注意如果发生一些找不到引用的错误,多办的可能就是没有加上-lgomp -lpthread
好,到此位置,我们就可以开发OpenMP应用了,下面给出几个例子,都是网上的,不过我稍微改了一下:
-
#include<stdio.h>
-
#include<omp.h>
-
#include<time.h>
-
usingnamespacestd;
-
voideg_print()
- {
-
#pragmaompparallel
-
printf("[%d]Hello/n",omp_get_thread_num());
- }
-
voideg_for()
- {
-
#pragmaompparallelfor
-
for(inti=0;i<10;i++)
- {
-
printf("i=%d/n",i);
- }
- }
-
voideg_long_for()
- {
-
intc=0;
-
clock_tt1=clock();
-
for(inti=0;i<1000000000;i++)
- {
- c++;
- }
-
clock_tt2=clock();
-
printf("Count=%d,t2=%d,t1=%d,Time=%d/n",c,t2,t1,t2-t1);
- }
-
intmain()
- {
-
-
-
-
clock_tt1=clock();
-
#pragmaompparallelfor
-
for(intj=0;j<2;j++)
- {
- eg_long_for();
- }
-
clock_tt2=clock();
-
printf("Totaltime=%d/n",t2-t1);
- eg_long_for();
-
return0;
- }
分享到:
相关推荐
基于win系列平台的Qt4开发环境安装步骤及环境配置,开发组合为mingGW,qt4.8.4,creator2.6.1
Windows系统64位MingGW最新版本7z压缩包,VScode等配置环境变量可用,欢迎大家下载!
Windows下的arm编译器,gcc-linaro-4.9.4-2017.01-i686-mingw32_arm-linux-gnueabihf.tar.xz 安装方法: 1.将下载的包用7zip解压到D:\gcc 2.添加环境变量: 解压文件后,将D:\gcc\bin目录,添加到系统PATH环境变量...
C , C++语言在windows下的编译器,gcc版本6.30,支持C++14标准
minggw-w64安装包,使用与windows64位.下载解压后点击安装
windows下的gcc/g++编译器,可配合VSCode或者CodeBlock等IDE或编辑器使用。 使用方法:将压缩包解压放入目录后,添加MingGW/bin到环境变量$PATH,之后就可以使用命令行进行编译了
本包为完整包,下载解压后就可以直接用,解决go gcc error等gcc编译报错问题
windows gcc测试工程文件
Mingw 5.1.6 安装程序 MinGW 是Win版的gcc编译器,该编译器编译出的程序运行速度很快!
它在Windows平台上模拟了Linux下GCC的开发环境,为C++的跨平台开发提供了良好基础支持,为了在Windows下工作的程序员熟悉Linux下的C++工程组织提供了条件。
为了弥补之前网上资料更新不及时,导致Windows下使用MinGW + yasm环境编译linux下开发的功能库(如ffmpeg)不能正确编译的问题。 本资源里面包含了yasm、MinGW等工具截止目前的最新版本。请各位童鞋根据需要下载。
由于编译过程复杂,问题多多,耗时较长,本人在自己的机器上编译好,整理上传到百度云,大家不必再重复浪费时间直接一键下载使用即可,编译后的库已经验证可用,编译环境: Qt5.9.11 MinGW-5.3.0-32bit CMake-3.12.2...
gcc g++ c/c++ 编译器 可以配合MinGW-5.1.4使用。。。。
比如不要安装在c:\Program Files\ming-w64目录下,因为包含空格。或者如果是压缩包形式的直接解压到D盘 第二步:新建环境变量MW_MINGW64_LOC,设置为TDM-GCC-64的安装位置;【右键我的电脑->属性->高级系设置->环境...
下一个资源是c/c++编译器(gcc-g++-3.4.5-20060117-3.tar.gz) 。 使用简单说明一下: 解压“MinGW-5.1.4(没有打包编译器).rar”到一个目录,把“gcc-g++-3.4.5-20060117-3.tar.gz”(不用解压)直接拷到该目录下...
压缩包分为 1:已经解压好的mingGW文件夹;2:mingGW+Msys的安装包(含Basic SetUp所有安装所需安装包)
MinGW64位,windows版本,下载后直接解压,添加到path路径就可以用了。网上太多的资源鱼龙混杂,安装不清楚。
由于编译过程复杂,问题多多,耗时较长,本人在自己的机器上编译好,整理上传到百度云,大家不必再重复浪费时间直接一键下载使用即可,编译后的库已经验证可用,编译环境: Qt5.9.11 MinGW-5.3.0-32bit CMake-3.12.2...
U++文档 指南 ULIMATE C++ 很爽 这是去除源码的IDE 很小 上传了
Windows上的Perl使用的是MingGW gcc编译器的特定版本,这会引发sqlext.h的编译错误,该错误已捆绑在我们的CLI驱动程序中。 因此,上传预编译的DBD :: DB2 dll。 前提条件 驱动程序支持的最低perl版本是perl 5.8,...