Electronic Joint Business

Solution for E-Business

openmp

用OpenMP开发并行程序

OpenMP 是一套可于共享内存并行系统的多线程程序设计的指导语句(Compiler Directive),它最早是由 OpenMP Architecture Review Board 牵头提出的,现在OpenMP为许多厂商所支持,因此具有较高的可移植性。支持 OpenMP 的编程语言包括 C 语言、C++ 和 Fortran 等等,支持 OpenMP 的编译器包括 Sun Compiler,GNU Compiler 和 Intel Compiler,MS VC++ 等等。

OpenMP 提供了对并行算法的高层的抽象描述,程序员通过在源代码中加入专用的 pragma 来指明自己的意图,由此编译器可以自动将程序进行并行化,并在必要之处加入同步互斥以及通信。如果选择忽略这些 pragma,或者编译器不支持 OpenMP 时,程序又可退化为通常的程序(一般为串行),代码仍然可以正常运作,只是不能利用多线程来加速程序执行。

OpenMP 提供的这种对于并行描述的高层抽象降低了并行编程的难度和复杂度,这样程序员可以把更多的精力投入到并行算法本身,而非其具体实现细节。对基于数据分集的多线程程序设计,OpenMP 是一个很好的选择。同时,使用 OpenMP 也提供了更强的灵活性,可以较容易的适应不同的并行系统配置。线程粒度和负载平衡等是传统多线程程序设计中的难题,但在 OpenMP 中,库函数从程序员手中接管了这两方面的部分工作。

但是,作为高层抽象,OpenMP 并不适合需要复杂的线程间同步和互斥的场合。OpenMP 的另一个缺点是不能在非共享内存系统(如计算机集群)上使用。在这样的系统上,MPI 使用较多。

OpenMP 的架构
OpenMP 是作为共享内存系统的标准问世的。它是为在多处理器机上编写并行程序而设计的一个应用编程接口。它包括一套编译指导语句和一个用来支持它的函数库。

>>> 阅读全文

 

, , ,

用VC++ 10.0 编译Boost类库

为什么需要 Boost 类库?
原因是 C++ 提供的标准类库功能十分有限,功能大概只相当于 Java 里的 io 和 util 两个包。对于开发现代的应用程序,一个没有提供正则表达式,XML 等等类库的语言是不可想象的。Boost 就是鉴于 C++ 类库功能有限,而提供的一套免费的 C++ 函数库 ,吸收了广大高质量的 C++ 函数库,提供更强大的功能,以方便写出写出更高质量的 C++ 程序,加快程序的开发周期。

对于大部分 Boost 应用来说,它是不用编译的,直接包含头文件就可使用,如:

any
array
asio
conversion
crc
bind/mem_fn
enable_if
function
lambda
mpl
smart_pt

只有少部分需要编译成库文件,需要编译的库如下:

date_time
filesystem
function_types
graph
iostreams
math
mpi
program_options
python
regex
serialization
signals
system
test
thread
wave

要完全编译 Boost 库需要先准备一些第三方库,这里在 C: 盘建立了一个 USR 目录,在下面建立三个子目录 bin,include 和 lib,我们需要将 C:\usr\bin 加入到路径中。编译 Boost 需要三个类库,如下:

  • 1. Regex 所需 Unicode 支持类库 — ICU, 这里选用版本是4.4.6.
    编译 ICU 较为简单,解开 ICU 包之后,在其目录下可以找到一个叫”allinone”的目录,用 Visual studio 2010 打开里面的allinone.sln,分别用debug和release编译,编译之后,将 include 目录和 release 目录下的库文件拷贝出来,dll 拷贝到 C:\usr\bin, 头文件拷贝到 C:\USR\include,库文件则放到 C:\USR\lib.
  • 2. Graph 所需的 Xml 处理类库 — Expat, 最新的版本是2.0.1。expat 提供了vc 6.0的项目文件:expat.dsw,用 Visual studio 2010 打开它,并转化成 2010 的项目文件即可编译。如果想要64位的库文件,请注意在配置管理中,把 platform 改成 x64。
  • 3. 编译 Boost.MPI 所需 MPI 类库 — Boost 的官方站点说需要 MPICH 或 OpenMPI 之类的支持,但是在 Windows 编译环境中总是会提示需要 MPIC++,其实你需要的是Microsoft Cluster Pack SDK,下载并默认安装在 c:\Program Files\Microsoft Compute Cluster Pack 下。当然你也可以用 Microsoft HPC Pack 2008 SDK,效果是一样的。

不过,如果下载的是 Microsoft HPC Pack 2008 SDK,或者 Microsoft Compute ClusterPack 不是装到默认的路径下,那 bjam 就会提示找不到 mpic++ 的路径,这时候需要修改一下 mpi.jam(在tools\build\v2\tools),用 notepad 打开它,找到 “local cluster_pack_path_native” 这行,改成:

>>> 阅读全文

 

, , , , , , ,