OpenMPプログラミング

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
NGNG
オフィシャルサイト
http://www.openmp.org/

リンクなどは>>2以下で
13デフォルトの名無しさん
垢版 |
05/02/13 04:39:43
初めてのMP
05/02/13 11:25:49
>>12
ドラクエやれ
15デフォルトの名無しさん
垢版 |
05/03/05 03:01:46
OpenMPとMPIどちらを勉強するのが得策ですか?
16デフォルトの名無しさん
垢版 |
05/03/16 15:18:59
>>15
MPI
17デフォルトの名無しさん
垢版 |
2005/03/29(火) 00:25:37
OpenAL
18デフォルトの名無しさん
垢版 |
2005/03/31(木) 10:59:10
OpenMPとpthreadの違いがわかりません。
効率、可搬性などどちらが優れているのでしょうか?
19デフォルトの名無しさん
垢版 |
2005/05/03(火) 17:08:50
Dualコア時代になるのに閑散としてるなこのスレ。
VisualStudio2005betaを使ってるヤツは少ないか。
所詮業務じゃ使えないしな。。
しかしDualコア+HyperThreadで、この年末には
家庭用PCですら4CPUになっちまうのかな。スゲエ。
20デフォルトの名無しさん
垢版 |
2005/05/06(金) 05:11:22
OpenMPをVCで使う方法を教えてください
21デフォルトの名無しさん
垢版 |
2005/05/06(金) 07:39:08
 
22デフォルトの名無しさん
垢版 |
2005/05/07(土) 11:38:36
>>20
2005β使え。
23デフォルトの名無しさん
垢版 |
2005/05/14(土) 04:41:12
LinuxでOpenMPを使いたいのですが、gccのほかに何をダウンロードすればよいのでしょうか?
24デフォルトの名無しさん
垢版 |
2005/05/23(月) 08:04:49
OpenMPを使う利点を教えてください
2005/05/24(火) 12:54:36
>>7
2005/05/24(火) 20:05:51
共有メモリ型擬似4CPUは、もう普及へ向かっているわけだがw

CELLは分散メモリだからMPIか?
2005/06/16(木) 00:42:33
gccに対応したフリーのOpenMPはどこからダウンロードできるのでしょうか?
2005/06/26(日) 17:44:34
http://phase.hpcc.jp/Omni/home.ja.html
29デフォルトの名無しさん
垢版 |
2005/08/11(木) 15:08:40
PentiumD買ったので、手持ちのソフトをOpenMPで並列化しようと思ってる。
尼で見つけた "Parallel Programming in OpenMP" って本の評価はどんなもんですか?

ttp://www.amazon.co.jp/exec/obidos/ASIN/1558606718/250-7296386-2789028
2005/08/11(木) 16:14:03
2000年の本だと古いんじゃないかなあ。
Intelのサイトで技術PDF探してみては?
31デフォルトの名無しさん
垢版 |
2005/08/12(金) 01:20:16
>>30
ですよねぇ。こういう方面の技術って、手詰まりなんですかね?
32デフォルトの名無しさん
垢版 |
2005/08/22(月) 04:23:24
OpenMPってpthreadと比較して何が違うのでしょうか?
2005/09/09(金) 21:43:42
逐次プログラムにちょっと書き足すだけで並列に動くお手軽さ。
34デフォルトの名無しさん
垢版 |
2005/11/05(土) 16:06:55
質問
#pragma omp parallel for private(j)
for(i=0;i<100;i++)
for(j=0;j<100;j++)
      何か演算

とした場合これはiを分割して実行していて
jはローカル変数として分割されたiの中で0〜99まで回してるってことですか?
それともjが分割されているってことですか?
2005/11/09(水) 21:46:22
愛を分割してる方
36デフォルトの名無しさん
垢版 |
2005/11/27(日) 06:12:29
インテルのコンパイラにはOpenMPはついてくるのですか?
2005/11/27(日) 10:56:58
>>36
日本語(ry
icc -openmp hoge.c
2005/11/27(日) 19:13:26
Sunのソラリス落とせば
OpenMP付のSunのコンパイラも手に入るよ
高性能コンパイラが無料だなんてなあ
2005/12/03(土) 12:29:21
Athlon系は分散メモリだからOpenMP使えないのかな?
40デフォルトの名無しさん
垢版 |
2006/01/30(月) 08:24:14
>>39
どういう意味?
2006/01/30(月) 15:18:18
簡単に並列処理を行わせるようにするためのもの?
将来的にはこういうのが普通に使われるようになるかもね。
2006/02/12(日) 01:28:59
GCCも4.2でOpenMP対応するみたいだね。
そしたらいよいよ知名度上がるんじゃないの?
2006/02/14(火) 06:14:02
gccがないとOpenMP使えなかった環境てマックくらいじゃない?
Windowsもかな
2006/02/14(火) 12:48:54
Intel コンパイラはサポートに熱心だよな。
今度Mac版も出るらしいから、Win、Mac、Linuxどの環境でもGCC、IntelコンパイラでOpenMP
できるようになる鴨。
2006/02/14(火) 21:19:59
>>44

おまい、髭のおっさんだろ。
46デフォルトの名無しさん
垢版 |
2006/02/17(金) 12:06:20
OpenMPが使えるかどうかによってヘッダをインクルードするかどうかを条件分岐したいのですが
どのようにしたらコンパイラがOpenMPをサポートしているか調べられるでしょうか?
2006/02/17(金) 16:15:54
>>43
VC++8は対応してるよ
2006/02/17(金) 17:36:01
>>46
#ifdef _OPENMP
#endif
49デフォルトの名無しさん
垢版 |
2006/03/12(日) 17:43:30
GOMPはどこのページからダウンロードできるのでしょうか?
2006/03/12(日) 17:47:28
C++相談室で教えてやっただろうが。
2006/03/18(土) 21:11:59
TextSS のWindowsXP(Professional)64bit化おながいします

もしくは64bitにネイティブ対応したテキスト置換ソフトありますか?

そういや64bitにネイティブ対応している2chブラウザてありましたっけ?



2006/03/19(日) 09:25:20
>>50
kwsk
2006/03/19(日) 14:16:22
>>52
今はマージされたのがtagsにある。
鯖の健康を損なわない範囲で好きなだけチェックアウトしなさい。
54デフォルトの名無しさん
垢版 |
2006/04/11(火) 11:57:56
OpenMP初めて知りました。こんなに簡単にマルチスレッドプログラムが作れるなんて
時代が変わったようだな
2006/04/18(火) 12:54:01
大きい単位で独立性の高いスレッドを切り出すのがパフォーマンスを上げるポイントなので、
細かい単位であっちこちで同期を取るようなプログラムが手軽に作れてしまえるOpenMPは痛し痒し。
激しくパフォーマンスが出なくてシングルで動かしたときより遅くなることも。
56デフォルトの名無しさん
垢版 |
2006/04/21(金) 15:19:26
OpenMPってwindowsでできるの?
2006/04/21(金) 15:25:08
>>56
VC++ 2005
2006/05/02(火) 14:09:55
>>55
細粒度はパフォーマンスでないけど、お手軽並列化〜♪って感じなんでないかい。
59デフォルトの名無しさん
垢版 |
2006/06/02(金) 08:39:59
OpenMPってお手軽だけど、効率はあまり良くないよね
2006/06/04(日) 00:55:01
モチロンソウヨ
2006/06/10(土) 00:01:58
ハイパースレッディングでOpenMP使うと激しく遅くなるよね。
2006/06/10(土) 22:40:12
それは論理CPUにスレッドをバインドすれば
なおるんじゃね?
どうやってバインドするかしらねーけど。
2006/06/10(土) 23:52:44
あまってる演算器や回路をつかって2CPUに見せかけるのがHTだから
行列の計算のような同じタイプの計算を並列化した場合遅くなるのは当たり前。
片方は整数もう片方で実数計算をさせると効果が出るかもしれない。
2006/06/11(日) 01:38:10
そうなると #pragma omp for が全滅・・・
2006/06/11(日) 18:15:49
同じ回路を使う場合でもレジスタが倍になって依存性が減るから、パイプラインのストールが減るよ。
あと実数がメインの場合、実数程の負荷は無いにせよアドレスの計算やループカウンタで整数も結構忙しい。

実数をメインにするとそこらへん上手く住み分け出来てると思った。
演算器を効率良く使えてウマー。
2006/06/12(月) 18:36:58
依存性が減るって表現はしっくりこないな
67デフォルトの名無しさん
垢版 |
2006/08/26(土) 14:58:22
VS2005のC++でOpenMPを使おうと思って、コードを書きましたが、
プログラムが開始する前にエラーが起こります。
/openmp をつけてコンパイルしたり、マニフェストファイルに
<file name="vcompd.dll" hash="XXXX" hashalg="XXX"/>と入れ
たりしましたが、まったくピクリとも動いてくれません。
皆さんは普通にVS2005でOpenMP使ってますか?
2006/08/27(日) 10:05:19
インストーラ用のマージモジュールがあったので、適当なプログラムでインストーラーを作って入れた。
\Program Files\Common Files\Merge Modules
Microsoft_VC80_OpenMP_x86.msm
Microsoft_VC80_DebugOpenMP_x86.msm
リリース版だけならvcregist_x86.exeでも導入できる。
2006/08/27(日) 16:59:19
>>67
うん、普通に使える。

>プログラムが開始する前にエラーが起こります。

ってのがどういう意味かよく分からんし(コンパイル時か実行時か)、
とりあえずエラーメッセージとかソースとか晒してみたら。


2006/08/28(月) 14:20:01
Pro以上なら普通に使えるが、実はStdやExpressでも使う方法がある。
足りないものはomp.h とvcomp(d).dllとインポートライブラリで、
これはPlatformSDK (for Win2003とかいう新しめの奴)を入れると付いてくる。
これをIDEの各検索パスに追加すればコンパイルは出来る。
ただし、WinSXSディレクトリにdllをインストールしないので実行時にDLLが無いためエラーになる。
この導入の仕方は>>68のとおり。

同じ方法でPGOもできないかと思ったがこれは無理でした。
ただ単純な/GL /LTCG オプションでのコンパイルは出来るからこれで我慢。
7167
垢版 |
2006/08/29(火) 10:28:44
ありがとうございます。インポートライブラリを入れるとうまく動きました。
ためしに
for( i=1; i<=10000000; i++ ) {
double t1 = sin( i*3.14/10000000.0 );
double t2 = cos( i*3.14/10000000.0 );
s = s+t1*t1+t2*t2;
}
を計算すると、デバッグ版ではOpenMPの方が5倍くらい時間がかかるが、
リリース版では1割くらい早くなった。
ちなみに、ハイパースレッドのデュアル
2006/08/29(火) 13:38:55
#pragma omp parallel for reduction(+:s)
for ( ...

そのプログラムだとこうですか?うちの環境だとHTの1CPUだからかずぶずぶの結果です。
73デフォルトの名無しさん
垢版 |
2006/10/03(火) 02:54:43
OpenMP 入門ありますよ。
http://www.xlsoft.com/jp/products/intel/docs/OpenMP/html/OpenMP.html
74デフォルトの名無しさん
垢版 |
2006/10/26(木) 16:01:43
その次のステップの入門書がほしい
75デフォルトの名無しさん
垢版 |
2006/10/29(日) 00:07:31
72>> その意味で ずぶずぶ とはどこの方言?
2006/10/29(日) 08:21:18
>>75
東京
2006/11/06(月) 03:38:12
g++では利用できないのでしょうか?
2006/11/06(月) 21:45:14
>>77
snapshotsとかからGCC 4.2以降を取ってきて試してみろ
2006/11/18(土) 02:07:03
Openマンコぽこちんか
2006/11/20(月) 03:17:24
OpenマンPのG☆SPOTに決まってるだろバカか
81デフォルトの名無しさん
垢版 |
2006/12/03(日) 17:52:02
>>70
omp.hがPSDK(SP1)/(R2)に入っていませんでした。
実際には何をインストールなさいましたか。

>>68
マージモジュールを使ったインストール例を参照することは可能でしょうか。
vs6しか使ったことがなく、どうもうまくいきません。


なお、私はVS2005のstd(アップグレード)を使っています。
82デフォルトの名無しさん
垢版 |
2006/12/24(日) 23:44:00
Sun SorilisとVC++(std)の組み合わせで、OpenMPできますか??
2007/02/25(日) 14:20:45
>>82
できない
84デフォルトの名無しさん
垢版 |
2007/02/28(水) 07:03:32
OpenMPでスレッド数を取得するには
#pragma omp parallel
{
cout<<omp_get_num_threads()<<endl;
}
でよいのでしょうか?もっと何かスマートな方法はないでしょうか?
85デフォルトの名無しさん
垢版 |
2007/03/06(火) 08:50:24
#pragma omp sectionsでfor構文でのdynamicスケジュールの様な動作をさせたいのですが、
どのように書けばよいのでしょうか?
86デフォルトの名無しさん
垢版 |
2007/03/09(金) 12:49:12
しらね
2007/03/09(金) 13:28:27
>>72-73
OpenMPによる並列プログラミングと数値計算法
http://www.amazon.co.jp/gp/product/4621077171
とかどーでしょ。

>>84
パラレルリージョンの中でなくてもよいはず。
#ifdef _OPENMP
cout<<omp_get_num_threads()<<endl;
#endif
などとすればよいかと。
2007/03/10(土) 02:10:13
omp_get_num_threads() はその時点でスレッドチームを構成しているスレッドの数を返すから
逐次実行部分で呼ぶと 1 を返す。
89デフォルトの名無しさん
垢版 |
2007/03/10(土) 16:00:16
#pragma omp parallel
{
#pragma omp single
cout<<omp_get_num_threads()<<endl;
}
90デフォルトの名無しさん
垢版 |
2007/03/25(日) 22:33:15
program main
!$ use omp_lib
implicit none
character(len=4),parameter :: str(0:2) = ["hage","hoge","huge"]
print *, "Hello, World!"
!$omp parallel num_threads(3)
!$ print *, trim(str(omp_get_thread_num()))
!$omp end parallel
end program main
91デフォルトの名無しさん
垢版 |
2007/04/02(月) 18:31:00
レベルの低い人向けの商売ってあるじゃないですか

たとえば、カレーライス。子供の食い物ね。マクドナルド。通はモスバーガーでしょ?
野球だと、巨人。クルマだと、トヨタ。音楽だと、ミスチル。政治だと、自民党。
ビートルズだと、ポールの曲。音楽分かってる人はジョンですよね。
マンガだと、手塚治虫や藤子不二雄。今更読む必要もないw
小説だと、古本屋に山積されてる赤川次郎。小説マニアは読みませんねw
長嶋茂雄・新庄剛志・三浦カズ・ゴン。名前だけでむかつきますね。

DELLってつまりそういうレベルの低い人向けの商品ですよね。
歴史を作るのは我々マニアですから、記憶からはいつか消え去るんですよDELLはw
92デフォルトの名無しさん
垢版 |
2007/04/07(土) 02:30:59
C++のクラスでstaticな変数を使いたいのですが、OpenMPの中で更新した場合、安全に更新されるのでしょうか?
2007/04/07(土) 07:36:57
されると思う?localな変数でも、ちゃんと明示しないと無理だし、
データ並列になっていないのでは意味無いと思わない?
94デフォルトの名無しさん
垢版 |
2007/04/10(火) 11:50:17
       ,ィ                      __
      ,. / |´ ̄`ヽー- 、 ト、        , -‐、/./.- 、 書き込みのはやきこと風の如く
    / | |    ヽ   l l        ( 火◇風 ノ
  /o ̄`ハ._.ゝ===┴=く.ノ- 、      ノ ◇ ◇ (  他人と会話せざること林の如く
  /o O / l´ ⌒    ⌒  lo ',ヽ     ( 山◇ 林 }
  \___/. ト、(●)  (●) ハ  ∧     `⌒/7へ‐´ ネットで煽ること火の如く
 / ,イ   レ::::⌒(__人__)⌒l~T--‐彡    /./
/ ̄ ̄l.  彡、  |r┬-| ノ'l  l::::::::::彡ー7⌒つ、  部屋から動かざること山の如し
彡:::::::::::l  ト、__ `ー' /|  l::::::::::::ミ  {,_.イニノ
彡ソ/ノハ   ト、 \  / ,イ  川ハ ヾー‐'^┴
2007/04/12(木) 09:18:04
>>92
ちゃんと排他制御や共有のための宣言をすれば問題ないかと。
パラレルリージョンの中で single で1プロセスだけがアクセスするとか
reduction で更新するとかね。
96デフォルトの名無しさん
垢版 |
2007/04/12(木) 10:50:30
祗園精舎の鐘の声
諸行無常の響きあり

娑羅双樹の花の色
盛者必衰の理をあらはす

おごれる人も久しからず
唯春の夜の夢のごとし

たけき者も遂にはほろびぬ
偏に風の前の塵に同じ
97デフォルトの名無しさん
垢版 |
2007/06/02(土) 15:05:34
一般論として、MPIよりもOpenMPの方が性能が低下する(遅くなる)ということはありえますか?
MPIのプログラムをOpenMPを使って書き換えたのですが、3割近く遅くなってしまいました。
98デフォルトの名無しさん
垢版 |
2007/06/02(土) 15:29:34
一般論では遅くなります
2007/06/02(土) 15:37:48
きちんとチューニングされていれば、MPIの方が速い。
あとはpthreadを使って自分で書くという手もある。
2007/06/02(土) 15:42:04
OpenMPはお手軽。だからそれに伴って犠牲になっている部分もある。それが性能。
2007/06/02(土) 17:50:17
MPIで並列効果出せるほどの大きな粒度ならOpenMPにする必要はない。
OpenMPの利点は小さな粒度の並列処理が簡単に書けることとシングルソースで
非OpenMP環境でもビルドしてテストできること。
それから既存のソースにディレクティブ挿入するだけで並列化できるところかな。
2007/06/03(日) 06:10:20
>>101
同じ粒度でも、OpenMPの方が遅くなってしまいます。
OpenMPはスレッドレベルでの切り替えなので、プロセスレベルのMPIよりも、効率が良いと思っていたので
何が問題なのか、測りかねています。
103デフォルトの名無しさん
垢版 |
2007/06/03(日) 08:40:24
競合してるんじゃない?
2007/06/03(日) 10:07:50
キャッシュのヒット率の差だと思う
もし、pragma omp forでやっているのなら、for文を二つに分けて
pragma omp parallelで二つに並列してみたら?
105デフォルトの名無しさん
垢版 |
2007/06/03(日) 10:15:44
windows はaffinty maskを使えないの?
2007/06/03(日) 11:14:45
>>102
複数のスレッドが同じ行列要素とかメモリアドレスを参照しているなら効率は
たいてい悪くなるし、プロセスの立ち上げより計算時間の方が長いのが普通だから
OpenMPの宣伝文句に騙されない方がいいと思う。
モニタリングツールがあるなら>>104の原因が疑われるからキャッシュのヒット率
みてみたらいいと思うけど、OpenMPの困る所は性能がコンパイラとライブラリに
依存しすぎることだから、どのコンパイラ使ってるかで全然違うので何とも言えないな。
2007/06/03(日) 12:26:25
環境は、Fedora5にデュアルコアOpteronx2の計4cpuをインテルコンパイラを使って、コンパイルしています。
系を大きくしても(すなわち、スレッド生成頻度をかなり下げても)300%程度で飽和してしまいます。
以前、Redhat+Xeon+インテルコンパイラの時は,2CPUで200%(4CPUではないのであまりよい比較ではありませんが)
計算速度も倍になっていたので、コンパイラの問題なのか、opteronの問題なのか、そのあたりもう少し調べてみたいと思います。
2007/06/03(日) 12:32:32
1CPU から 2CPU にスケールするのと、4CPU にスケールするのとじゃ
全然話が違うからね。
109デフォルトの名無しさん
垢版 |
2007/06/03(日) 12:57:34
4cpuならうまく組めば1割も落ちないよ
スレッドチェッカーで確認してみな
2007/06/03(日) 14:58:41
>>107
OpteronってことはNUMA構成で使ってるってことはないかな?
OpenMPはSMP用だからNUMAだと効率ががた落ちになることがあるよ。
あと趣味でやってるのでなければCPU使用率よりも計算までの終了時間で考えた方がいいと思う。
メモリ競合起こすとCPU100%でも計算速度半分なんてざらだから。
2007/06/03(日) 15:24:23
カーネルがスレッドのスケジューリングとメモリページの割当を上手く管理していれば
Dual Core x 2 Socket くらい何とかならないの?
2007/06/03(日) 15:30:27
CPUとSIMDで行列計算をうまく分散してくれるコンパイラはないものか
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況