用户操作
[留言]  [发消息]  [加为好友] 
订阅我的博客
XML聚合    FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
danny_xcz的公告
<script type="text/javascript"><!-- google_ad_client = "pub-8449884534916758"; google_ad_width = 120; google_ad_height = 600; google_ad_format = "120x600_as"; google_ad_type = "text_image"; //2007-11-01: blog.csdn.net/danny_xcz google_ad_channel = "0329307978"; google_color_border = "336699"; google_color_bg = "FFFFFF"; google_color_link = "0000FF"; google_color_url = "008000"; google_color_text = "000000"; //--></script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> <script src="http://www.google-analytics.com/urchin.js" type="text/javascript"> </script> <script type="text/javascript"> _uacct = "UA-413319-1"; urchinTracker(); </script>
文章分类
Java Desktop
Open Source
友情链接
存档

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

   从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应用了,下面给出几个例子,都是网上的,不过我稍微改了一下:

  1. #include <stdio.h>
  2. #include <omp.h>
  3. #include <time.h>
  4. using namespace std;
  5. void eg_print()
  6. {
  7. #pragma omp parallel
  8. printf ("[%d] Hello\n", omp_get_thread_num());
  9. }
  10. void eg_for()
  11. {
  12. #pragma omp parallel for
  13. for(int i = 0; i <10; i++)
  14. {
  15. printf("i = %d\n", i);
  16. }
  17. }
  18. void eg_long_for()
  19. {
  20. int c = 0;
  21. clock_t t1 = clock();
  22. for(int i = 0; i <1000000000; i++)
  23. {
  24. c++;
  25. }
  26. clock_t t2 = clock();
  27. printf("Count = %d, t2 = %d, t1 = %d, Time = %d\n", c, t2, t1, t2-t1);
  28. }
  29. int main()
  30. {
  31. //eg_print();
  32. //eg_for();
  33. //测试
  34. clock_t t1 = clock();
  35. #pragma omp parallel for
  36. forint j = 0; j <2; j++ )
  37. {
  38. eg_long_for();
  39. }
  40. clock_t t2 = clock();
  41. printf("Total time = %d\n", t2-t1);
  42. eg_long_for();
  43. return 0;
  44. }

发表于 @ 2008年11月19日 08:09:00 | 评论( loading... ) | 编辑| 举报| 收藏

旧一篇:Oralce 9i 安装OID目录服务器说明 | 新一篇:多核开发入门指南

  • 发表评论
  • 评论内容:
  •  
Copyright © danny_xcz
Powered by CSDN Blog