読者です 読者をやめる 読者になる 読者になる

aisaka.com

自分が知りたかったこと・日々の思考・共有したいニュースを発信

これで解決!OpenMPを使いたいのに"omp.h" not found [Mac]

Everything is practice.

f:id:aisakakun:20151217142025p:plain

 

どのサイトを見てもイマイチわからない。

"omp.h"が早く使いたい。私も本日やっと使えるように

設定することができたので、ここに書いていきたいと思います。

 

まずは、この下の記事の通り、順番に行ってください。

qiita.com

 

これできちんとできましたか?

できた人は、おめでとうございます。

できなかった人は、私と同じ状況だと思いますのでこのまま読み進めましょう。

 

どこでできなかったかを考えると、

 のところなんですよね。

ここで順調に終わったかと思いきや、no no noと見える。なんだこれは。

f:id:aisakakun:20151217140415p:plain

 

????

f:id:aisakakun:20151217140432p:plain

 

Fortran program が動きません? ということでFortranを入れましょう。

 

Mac OS XでFortranを使う - Y. Kawamoto

 

↑このサイトに飛びましょう。しっかり帰ってきてくださいね。

このサイトの

MacPortsgccをインストール 

 の後に、「sudo port install gcc49」

と行うところがあるのですが、

port がないと言われますか?

言われた場合は、

 

2.2. Install MacPorts

 

ここで、2.2.2まで完了させると、portコマンドが使えるようになります。

 

そして、また

 

Mac OS XでFortranを使う - Y. Kawamoto

 

ここに戻って最後の5番まで実行します。

(これでもportが使えないという人は、一度ターミナルを閉じて、また開いてください。そうすると使えるはずです。)

 

最後の

gfortran -v

で反応が返ってきたらfortranを入れることに成功したことになります。

おめでとうございます。

 

あとはまた、

qiita.com

ここに戻って、コンパイルしてインストールまで終わらせてください。

その下の項目に「pathを通す」とありますが、

私の場合は、すでにpathが通っていたためこの作業は行いませんでした。

 

omp.h は果たして入ったのか!?

 

確かめるために、このプログラムを実行してみてください。

#include <iostream>

#include <omp.h>
#include<time.h>

int main(){

clock_t t1,t2,t3,t4;
double A = 0;
double B = 0;

t3 = clock();
for(int i=0; i<100; i++){
for(int j=0; j<100; j++){
B+= (i+j);
}
}
t4 = clock();
printf("%f\n",(double)(t4-t3)/CLOCKS_PER_SEC);


t1 = clock();
#pragma omp parallel for private(j)
for(int i=0; i<100; i++){
for(int j=0; j<100; j++){
A += (i+j);
}
}
t2 = clock();
printf("%f\n",(double)(t2-t1)/CLOCKS_PER_SEC);


return (0);
}

これがちゃんと動けば、使用できています!

備忘録でした。

 

---追記---

OpenMPのomp_get_thread_num()こういうのを使う場合は、

c++  -fopenmp ~~~~.cpp

としてコンパイルしてください。

詳しくは、ここに疑問と解決法があります。

stackoverflow.com

 

 

Pythonスタートブック

Pythonスタートブック