Posts /

SMP集群OpenMP+MPI混合编程

Twitter Facebook
27 Apr 2017

[TOC]

一:并行计算简介

1. 并行体系结构及通信机制

2. 并行程序设计模型

3. 并行编程模型标准

三者可以混合使用:

4. 可扩展性

4.1 评测标准

二:OpenMP编程

1. OpenMP 简介

OpenMP是共享存储体系结构上的一个并行编程模型。适合于SMP共享内存多处理系统多核处理器体系结构

2. OpenMP 并行编程模式

3. OpenMP 程序并行框架

4. OpenMP 存储模型

5. Get to it.

int x = 2;
#pragma omp parallel num_threads(2) shared(x)
{
  if (opm_get_thread_num() == 0)
    x = 5;
  else
    printf("1: Thread# %d: x = %d\n", omp_get_thread_num(), x);
  #pragma omp barrier
  if (omp_get_thread_num() == 0)
    printf("2: Thread# %d: x = %d\n", omp_get_thread_num(),x );
  else
    printf("3: Thread# %d: x = %d\n", omp_get_thread_num(),x );
}

支持条件编译

int main() {
  #ifdef _OPENMP
  printf("Compiled by an OpenMP-compliant implementation.\n");
  #endif
  return 0;
}

简单的 Hello World

#include <omp.h>
int main(int argc, char *argv[])
{
	int nthreads,tid;
	char buf[32];
	/* Fork a team of threads */
	#pragma omp parallel private(nthreads,tid)
	{
		tid = omp_get_thread_num(); /* Obtain and print thread id */
		printf("Hello, world from OpenMP thread %d\n", tid);
		if (tid == 0) /*Only master thread does this */
		{
			nthreads = omp_get_num_threads();
			printf(" Number of threads %d\n",nthreads);
		}
	}
	return 0;
}

基于 C/C++ 语言的 OpenMP 程序结构

#include <omp.h>
int main() {
  int var1, var2, var3;
  ...
  #pragma omp parallel private(var1, var3) shared(var3)
  {
    ...
  }
}

OpenMP 的制导指令有以下一些:

除以上指令外,还有一些库函数,比如:

OpenMP 的子句有以下一些:

编译制导

制导语句格式:

一个并行域就是一个能被多个线程并行执行的程序段。

说明:


Twitter Facebook