openmp
首先,下载这个版本的Eclipse:http://www.eclipse.org/downloads/packages/eclipse-parallel-application-developers/lunasr1 支持并发编程的版本。
然后下载这个版本的gcc:http://tdm-gcc.tdragon.net/download
下载的时候看清楚32位和64位的。
下载完了点击安装,我的安装路径是C:\TDM-GCC-64:
下载http://tdm-gcc.tdragon.net/download网站里的这个包含OpenMP库的压缩包:
32位系统的下载这个:
64位系统下载这个:
下载完了后解压看到这些文件:
将这些文件全部选择,复制。在这里粘贴:
选择是,合并文件夹。
到这里就已经完成OpenMP开发环境的搭建了,接下来打开Eclipse新建一个OpenMP应用程序吧~~
这里就已经完成OpenMP开发环境的搭建了,接下来打开Eclipse新建一个OpenMP应用程序吧~~
选择OpenMP工程,在这里新建的是C语言的工程,编译用的gcc,后面会讲到怎么在C++工程里也是用OpenMP。
然后右键工程,Build Project:
接下来右键Run As:
看看输出结果吧~~
上面只是一个初步介绍,不知道有没有发现在新建工程时没有提供C++ OpenMP选项,如果要在C++工程中使用OpenMP怎么办呢?其实在新建项目的时候没有必要按照上面的要求来,可以新建一个任意的C或C++工程。只要设置编译和链接参数即可。接下来新建一个C++ HelloWorld程序并使用OpenMP。
在刚才新建项目的选项中选择Hello World C++ Project:
把源文件代码改成这样:
(注意"-fopenmp"和"g++"之间有个空格!)
同样,在C++链接器里也需要加入同样的参数:
OK之后就可以build项目然后运行了~~
下面有几个例子
1 c语言版
/*
============================================================================
Name : helo.c
Author : judyge
Version :
Copyright : Your copyright notice
Description : Hello OpenMP World in C
============================================================================
*/
#include
#include
#include
/**
* Hello OpenMP World prints the number of threads and the current thread id
*/
int main (int argc, char *argv[]) {
int numThreads, tid;
/* This creates a team of threads; each thread has own copy of variables */
#pragma omp parallel private(numThreads, tid)
{
tid = omp_get_thread_num();
printf("Hello World from thread number %d\n", tid);
/* The following is executed by the master thread only (tid=0) */
if (tid == 0)
{
numThreads = omp_get_num_threads();
printf("Number of threads is %d\n", numThreads);
}
}
return 0;
}
/*
* hellopenmp.cpp
*
* Created on: 2015年4月14日
* Author: judyge
*/
#include
#include
using namespace std;
int main() {
omp_set_num_threads(4);
#pragma omp parallel
cout << "!!!Hello World!!! from thread " << omp_get_thread_num() << endl; // prints !!!Hello World!!!
return 0;
}
#pragma omp parallel num_threads
/*
* num_threads.cpp
*
* Created on: 2015年4月14日
* Author: judyge
*/
#include
using namespace std;
int main()
{
#pragma omp parallel num_threads(5)
{
cout << "Hello World!\n";
}
}
omp_set_num_threads(5);
/*
* omp_set_num_threads.cpp
*
* Created on: 2015年4月14日
* Author: judyge
*/
#include
#include
int main()
{
omp_set_num_threads(5);
#pragma omp parallel
{
std::cout << "Hello World!\n";
}
}
/*
* forp.cpp
*
* Created on: 2015年4月14日
* Author: judyge
*/
int main( )
{
int a[1000000], b[1000000];
// ... some initialization code for populating arrays a and b;
int c[1000000];
#pragma omp parallel for
for (int i = 0; i < 1000000; ++i)
c[i] = a[i] * b[i] + a[i-1] * b[i+1];
// ... now do some processing with array c
}
MPI 注意安装位置不能有空格 只有C语言版
下载MPICH:http://www.mpich.org/downloads/ 注意,是下载windows版本的非官方的这个安装包:
32位下载x86,64位下载x86_64。
最好直接安装在某个盘的根目录下,比如我的安装目录是C:\MPICH2,目录中不要出现空格。
安装好后到Eclipse下配置:Windows—>Preferences
选择MPI的include路径,注意红框里的内容。把build命令改成gcc和g++,因为安装的MPICH中没有mpicc和mpic++。。。
/*
============================================================================
Name : hellompi.c
Author : judyge
Version :
Copyright : Your copyright notice
Description : Hello MPI World in C
============================================================================
*/
#include
#include
#include "mpi.h"
int main(int argc, char* argv[]){
int my_rank; /* rank of process */
int p; /* number of processes */
int source; /* rank of sender */
int dest; /* rank of receiver */
int tag=0; /* tag for messages */
char message[100]; /* storage for message */
MPI_Status status ; /* return status for receive */
/* start up MPI */
MPI_Init(&argc, &argv);
/* find out process rank */
MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);
/* find out number of processes */
MPI_Comm_size(MPI_COMM_WORLD, &p);
if (my_rank !=0){
/* create message */
sprintf(message, "Hello MPI World from process %d!", my_rank);
dest = 0;
/* use strlen+1 so that '\0' get transmitted */
MPI_Send(message, strlen(message)+1, MPI_CHAR,
dest, tag, MPI_COMM_WORLD);
}
else{
printf("Hello MPI World From process 0: Num processes: %d\n",p);
for (source = 1; source < p; source++) {
MPI_Recv(message, 100, MPI_CHAR, source, tag,
MPI_COMM_WORLD, &status);
printf("%s\n",message);
}
}
/* shut down MPI */
MPI_Finalize();
return 0;
}