在Windows下使用MingGW[GCC+OpenMP]和CodeBlocks开发多核应用基本环境配置

2023-11-14

转自 http://blog.csdn.net/danny_xcz/article/details/3332251


   从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>
	using namespace std;
	void eg_print()
	{
		#pragma omp parallel
		printf ("[%d] Hello/n", omp_get_thread_num());
	}

	void eg_for()
	{
		#pragma omp parallel for
		for(int i = 0; i <10; i++)
		{
			printf("i = %d/n", i);
		}
	}

	void eg_long_for()
	{
		int c = 0;
		clock_t t1 = clock();
		for(int i = 0; i <1000000000; i++)
		{
			c++;
		}
		clock_t t2 = clock();
		printf("Count = %d, t2 = %d, t1 = %d, Time = %d/n", c, t2, t1, t2-t1);
	}

	int main()
	{
		//eg_print();
		//eg_for();
		//测试
		clock_t t1 = clock();
		#pragma omp parallel for
		for( int j = 0; j <2; j++ )
		{
			eg_long_for();
		}
		clock_t t2 = clock();
		printf("Total time = %d/n", t2-t1);
		eg_long_for();
		return 0;
	}





本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在Windows下使用MingGW[GCC+OpenMP]和CodeBlocks开发多核应用基本环境配置 的相关文章

随机推荐

  • 2021年蓝桥杯赛题【Python】

    填空 1 卡片 小蓝有很多数字卡片 每张卡片上都是数字 0 到 9 小蓝准备用这些卡片来拼一些数 他想从 1 开始拼出正整数 每拼一个 就保存起来 卡片就不能用来拼其它数了 小蓝想知道自己能从 1 拼到多少 例如 当小蓝有 30 张卡片 其
  • 中国历代王朝大排名

    中国自秦以降 一共出过九个大王朝 它们是 秦 汉 晋 隋 唐 宋 元 明 清 另外 还出过五十几个小王朝 它们是 三国时的魏 蜀 吴 共三个 转自铁血社区 http bbs tiexue net 十六国时的东晋 前赵 北凉 夏 后赵 鲜卑
  • JVM参数介绍

    一 JVM参数分类 根据jvm参数开头可以区分参数类型 共三类 X XX 标准参数 所有的JVM实现都必须实现这些参数的功能 而且向后兼容 例子 verbose class verbose gc verbose jni 非标准参数 X 默认
  • python输出百分数

    方式1 直接使用参数格式化 2 2 之作用 显示小数点后2位 例如 1 显示两位小数 gt gt gt print percent 2 format 40 50 percent 83 35 2 不显示小数 0 即 将2改为0 gt gt g
  • 教你如何使用接口根据关键词取视频列表

    请求参数 请求参数 q 耳机 page 1 sort 参数说明 q 关键词 page 页数 sort 排序 sort new 最新发布 sort credit 最多点赞 sort bid 综合排序 API接口工具 page 1 real t
  • Linux的常用命令

    Linux的常用命令 一 系统信息 1 who或w 查看所有终端 2 uname m 显示及其的处理器架构 3 uname r 显示正在使用内核版本 4 date 显示系统日期 5 cal 2019 显示2019年的日历表 6 clear
  • Windows10安装ubuntu18.04双系统教程

    写在前面 本教程为windows10安装ubuntu18 04 64位 双系统教程 是我多次安装双系统的经验总结 安装方法同样适用于ubuntu16 04 64位 为了直观和易于理解 我会尽量图文并茂 并用最通俗的语言完成这篇教程 虽然安装
  • 【最优PID 整定】PID性能指标(ISE,IAE,ITSE和ITAE)优化、稳定性裕量(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现 1 概述 PID控制器是工业系统中使用最广泛的控制器
  • 仔细想了下模块划分,其实也不简单-量化

    我们今天聊一聊研发的依赖问题 一个App就是一堆git仓库 一堆逻辑的组合 就构成了完整的业务逻辑 衡量模块划分的标准其实就是 沟通量 换个词语 职责划分 代码边界 常用的划分是功能划分 通过引入各种仓库 给我们的研发带来了边界 api j
  • C#多语言切换

    第一步建立工程 第二步 拖拽控件 第三步选择窗体 第四步修改窗体localizable 属性为 true 如下图 第五步 修改language 属性 如下图 第六步 修改各个控件的字符名称 会出现下面的资源文件 注意之前是没有资源文件的 第
  • input输入框在苹果手机上边框有阴影

    问题描述 h5移动端页面 input输入框在苹果手机上显示有兼容性问题 边框上方出现阴影 通过统一设置border 也不能消除 如下图所示 解决方案 添加如下样式即可解决 input outline none webkit appearan
  • 计算机网络之(7):TCP流量控制、拥塞控制 + 网络层

    文章目录 TCP 流量控制 Go back N Selective Repeat Go back N v s Selective Repeat 流量控制中的问题 方法 1 接收方主动 方法2 发送方主动 TCP 拥塞控制 拥塞控制和流量控制
  • 《Android网络请求篇》MyHttpUtils一个非常好用的异步网络请求框架

    Android网络请求篇 MyHttpUtils一个非常好用的异步网络请求框架 最新版介绍看这里 gt 这是一个使用策略模式和构建模式设计的网络请求框架 去看看吧 倾力之作 android轻量级网络请求框架MyHttputils2 1 6
  • 编程三角形面积公式_【面积系列专题】三角形面积公式之水平宽铅垂高

    点击上方蓝字关注我们 面积系列专题 三角形面积公式之水平宽铅垂高 TSQ中学数学微信 TSQmaths 一 本文说明 三角形的面积公式计算较多 而在平面直角坐标系中的三边都不与坐标轴平行的三角形面积一般会采用割补形来求解 但有时采用水平宽铅
  • MATLAB泰勒展开

    MATLAB函数 taylor 题目 对y exp x 进行4阶泰勒展开 并验证 函数调用格式 taylor fcn x x0 Order 6 对函数fcn在点x0处 进行6阶泰勒展开 MATLAB代码 clc clear all clos
  • 三菱plc指令详细解析

    一 顺控指令 1 触点指令 00 LD 逻辑操作开始 01 LDI 逻辑非操作开始 02 AND 逻辑乘 03 ANI 逻辑乘非 04 OR 逻辑加 05 ORI 逻辑加非 2 连接指令 06 ANB AND逻辑块与 07 ORB OR逻辑
  • 一张图正则表达式

    一张图正则表达式
  • VW ware安装Ubuntu虚拟机及环境配置

    实验前准备 VMware 官网下载 Ubuntu XXX iso 文件过大阿里云镜像下载 熟悉那种Linux内核就下载那种 这个不会影响集群的搭建 https pan baidu com s 1tFvCA4PmNC2tZN7Yp2BkZQ
  • vue组件销毁重置详解

    v if方式 key方式 destroy v if方式
  • 在Windows下使用MingGW[GCC+OpenMP]和CodeBlocks开发多核应用基本环境配置

    转自 http blog csdn net danny xcz article details 3332251 从06年开始 多核开发已经越来越多的成为所有应用设计必须考虑的问题 我使用MingGW CodeBlocks来测试OpenMP多