Windows openmp编译环境
Microsoft Visual Stuidio2008之后都支持openmp,所以我下载了最新的Microsoft Visual Stuidio2019
安装步骤可以参考https://www.cnblogs.com/Rasang/p/9733400.html
一.下载
首先我们要进入微软官网下载安装最新的程序
下载图中的 community 2017 ,下载完后打开程序
二.安装
打开后点击继续,进入文件的提取
待提取完成后就进入如下界面
如果是用于C语言或者C++的编写请选择红框中一项,这将占据约6G左右的内存,请确保你的电脑有足够的内存空间,然后即可开始安装
如图,如果你的网速不够给力,这将占据你大量的时间,我建议你先来局王者或者先吃把鸡,又或者刷会PTA消磨时光
安装结束后就会重启电脑,重启后就可以看到主界面啦
点击启动
进入界面,创建控制台应用项目
然后对项目点击右键 打开 属性 -> c/c++->语言->openmp支持 (是) ps:把平台换为x64
同时把符合模式置为否,否则出现c2338错误
即:
two-phase name lookup应该是一个关于C++模板的功能,错误提示应该是说它不支持C++/CLI, C++/CX, or OpenMP。
我的工程里面主要是c语言的代码,引用了一些C++的类库,然后并没有使用C++的模板,所以我把two-phase name lookup关闭就好了。
解决步骤:
项目->属性->C/C++->语言->符合模式:否
同时设置Debug为x64,否则多线程无效
一系列前奏都做好了,接下来就是编程,实现多线程咯
// OpenMP.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include"omp.h" /*包含头文件omp.h*/
#include <iostream>
#include<stdio.h>
#define NUM_THREADS 4
#define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS 1
int main(int argc,char *argv[])
{
int nthreads, tid;
omp_set_num_threads(NUM_THREADS);/*为后面的并行区设置线程数目*/
#pragma omp parallel /*编译指导语句,创建一个并行区*/
{
tid = omp_get_thread_num(); /*得到当前线程的标识号(线程号)*/
printf("Hello World from OMP thread %d\n", tid);
if (tid == 0)
{
nthreads = omp_get_num_threads();/*得到并行区中总的线程数目*/
printf("Number of threads %d\n", nthreads);
}
}
//std::cout << "Hello World!\n";
return 0;
}
在Linux环境下,单机环境,和之前MPI环境一致,编译、连接并运行这个简单的OpenMP程序。
1.建立test.c,并编写上述代码
2.使用gcc编译器、-fopenmp编译选项编译并连接该文件。
gcc -fopenmp -o test test.c
生成可执行程序test
3.运行可执行文件./test