OpenMP
OpenMP属于共享内存编程模型技术,通过在程序源码中加入编译制导指令#pragma omp行实现程序的并发运行,支持C、C++和Fortran,需要编译器的支持。
配置
GCC支持OpenMP,通过在编译命令中加入编译选项-fopenmp和链接选项-lgomp -lpthread实现。对于IDE可以在对应配置选项中添加或附加编译项中直接输入上述指令:
CodeBlocks的OpenMP支持
1、选择Project菜单的Build options选项或管理栏项目右键菜单的Build options选项;
2、根据需要选择Debug、Release或项目名称(Debug和Release全选);
3、选择Compiler settings页的Other options页,填入-fopenmp;
4、选择Linker settings页,在Other linker options中填入-lgomp -lpthread。
QT的OpenMP支持
直接在项目的pro文件中添加以下内容:
QMAKE_CXXFLAGS += -fopenmpLIBS += -lgomp -lpthread
简单测试
源码中合适位置添加下列内容,将会打印8行的‘Hello workd!’(注意打印函数要替换为对应的语言):
#pragma omp parallel num_threads(8) //启动8个并行线程
{
printf("Hello world!\n");
}
MPICH3
1、下载mpich-3.1.tar.gz地址:http://www.mpich.org/downloads/2、安装tar xzf mpich-3.1.tar.gz
cd mpich-3.1
./configure --prefix=/usr/local/mpich --disable-f77 --disable-fc 2>&1 | tee c.txt
make 2>&1 | tee m.txt
make install 2>&1 | tee mi.txt
3、设置环境变量
PATH=/usr/local/mpichl/bin:$PATH ; export PATH
4、检测安装
which mpicc
which mpiexec
5、执行测试
可以使用mpich自带的例子,执行:mpiexec -n 4 ./examples/cpi
也可以自己编写简单测试程序,创建hello.c,输入下列内容:
#include <stdio.h>#include "mpi.h"int main(int argc, char ** argv){int myrank, nprocs, namelen;char processor_name[MPI_MAX_PROCESSOR_NAME];MPI_Init(&argc, &argv);MPI_Comm_size(MPI_COMM_WORLD, &nprocs);MPI_Comm_rank(MPI_COMM_WORLD, &myrank);MPI_Get_processor_name(processor_name, &namelen);printf("Hello World! I'm rank %d of %d on %s\n", myrank,nprocs, processor_name);MPI_Finalize();return 0;}
编译:mpicc -o hello hello.c执行:mpirun -np 4 ./hello //注意hello之前的./不能省略,否则肯能报错。