オフィシャルサイト
http://www.openmp.org/
リンクなどは>>2以下で
探検
OpenMPプログラミング
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
NGNG270デフォルトの名無しさん
2010/03/19(金) 17:35:05 >>269
/proc/cpuinfo辺り見てなんとかならない?
/proc/cpuinfo辺り見てなんとかならない?
271デフォルトの名無しさん
2010/03/20(土) 05:26:30 Linuxなら
int cpu_num = sysconf(_SC_NPROCESSORS_CONF)
Windowsなら
SYSTEM_INFO sysinfo;
GetSystemInfo(&sysinfo);
で、sisinfoのdwNumberOfProcessorsメンバの中にはいっている。
ちなみにintな。
int cpu_num = sysconf(_SC_NPROCESSORS_CONF)
Windowsなら
SYSTEM_INFO sysinfo;
GetSystemInfo(&sysinfo);
で、sisinfoのdwNumberOfProcessorsメンバの中にはいっている。
ちなみにintな。
272デフォルトの名無しさん
2010/03/24(水) 08:25:08 Winだと NUM_OF_CPU みたいな環境変数があった気がするけどちがったかな?
273デフォルトの名無しさん
2010/03/24(水) 23:12:52 NUMBER_OF_PROCESSORS
274272
2010/03/25(木) 03:13:10 それそれ、ありがと
275デフォルトの名無しさん
2010/03/30(火) 17:45:37 CPUのコア数以上にスレッドの数を増やすと急激にパフォーマンスが落ちるのだけどなぜなのでしょうか?
Phenom II X4ですが、5スレッドにしたとたん、全スレッドのパフォーマンスが半分以下(2倍以上時間がかかる)
ようになります。OSはubuntu9.04です。
Phenom II X4ですが、5スレッドにしたとたん、全スレッドのパフォーマンスが半分以下(2倍以上時間がかかる)
ようになります。OSはubuntu9.04です。
276デフォルトの名無しさん
2010/03/30(火) 18:43:55 スレッド数>コア数ってことはデスマーチ状態なので、
バタバタと戦友たちが倒れていってるんだろうな。
バタバタと戦友たちが倒れていってるんだろうな。
277デフォルトの名無しさん
2010/03/30(火) 20:04:58278デフォルトの名無しさん
2010/03/30(火) 21:58:05 >>275
コンテキスト切り替え(スイッチ)
コンテキスト切り替え(スイッチ)
279デフォルトの名無しさん
2010/03/31(水) 06:27:33 >>275
8スレッドにすると4のときと同じくらいの時間で終わる・・・かも。
8スレッドにすると4のときと同じくらいの時間で終わる・・・かも。
280デフォルトの名無しさん
2010/03/31(水) 07:36:37 >>275
当たり前の話だ。各スレッドがリソースを取り合っているんだよ。
物理コアが4つしかないのに、5スレッドが走っているわけだから、
物理コアたちが「俺が行くぞ」「ふざけんな俺が行くんだ!」とか「おまえ行けよ、いやおまえが行けよ」
ということをやっているわけだ。
本来ならセマフォで4スレッドに制限すればよいんだけど、OpenMPではどういう風にやるっけな?
まだ対応していないと思ったけどもしOpenMPでやるなら結構トリッキーな実装になりそうだな。
当たり前の話だ。各スレッドがリソースを取り合っているんだよ。
物理コアが4つしかないのに、5スレッドが走っているわけだから、
物理コアたちが「俺が行くぞ」「ふざけんな俺が行くんだ!」とか「おまえ行けよ、いやおまえが行けよ」
ということをやっているわけだ。
本来ならセマフォで4スレッドに制限すればよいんだけど、OpenMPではどういう風にやるっけな?
まだ対応していないと思ったけどもしOpenMPでやるなら結構トリッキーな実装になりそうだな。
281デフォルトの名無しさん
2010/03/31(水) 13:14:08 4プロセスのとき、4つのコアがそれぞれ100%がんばる
5プロのとき、1つのコアが2スレッド分を負担して100%がんばってるけど
ほかの3つが50%しかがんばれない。
がんばらない、じゃなくてがんばれない。同期取るからね。
>>279 のとおり8にすると4コアみんな100%の力を出せるようになる。
5プロのとき、1つのコアが2スレッド分を負担して100%がんばってるけど
ほかの3つが50%しかがんばれない。
がんばらない、じゃなくてがんばれない。同期取るからね。
>>279 のとおり8にすると4コアみんな100%の力を出せるようになる。
283デフォルトの名無しさん
2010/03/31(水) 15:09:17 ちゃんとプロセスと計算コアを固定してる?
タダでさえ>>280 の理由で非効率な部分があるんだから・・
taskset dplace のどちらかだろう。なければこれに当たる奴みつけてね。
dplace 後者はSGIのだけの気がするけど自信はない。
タダでさえ>>280 の理由で非効率な部分があるんだから・・
taskset dplace のどちらかだろう。なければこれに当たる奴みつけてね。
dplace 後者はSGIのだけの気がするけど自信はない。
284デフォルトの名無しさん
2010/03/31(水) 15:10:32 プロセス、スレッド・・・OpenMPだとスレッドのほうがいいのかな?
あまり気にしてなかったので今気になった
あまり気にしてなかったので今気になった
285デフォルトの名無しさん
2010/03/31(水) 16:47:05 スレッドの実行時間が短すぎるんじゃないか。
それでコンテキストスイッチの割合が大きくなりすぎているのでは。
それでコンテキストスイッチの割合が大きくなりすぎているのでは。
286デフォルトの名無しさん
2010/03/31(水) 17:09:12 #pragma omp parallel for
for
凄い長い計算
でやって味噌。
for
凄い長い計算
でやって味噌。
287デフォルトの名無しさん
2010/04/01(木) 03:41:12 ちゃんとprivateも設定しろな。
288デフォルトの名無しさん
2010/04/07(水) 17:43:00 Intel Cluster OpenMPのセットアップ方法ってどこにあるの?
とりあえずライセンスファイルのダウンロードして、それをインストールするところまではできたのだけど・・・
ネットワークとかホストとかはどこで設定するの?
とりあえずライセンスファイルのダウンロードして、それをインストールするところまではできたのだけど・・・
ネットワークとかホストとかはどこで設定するの?
289デフォルトの名無しさん
2010/05/12(水) 05:18:00 ubuntu 10.04にしたらRunning Processの数がOpenMP Threadの数+1になるのだけど、どうして?
うちだけ?9.04の時はこんなことはありませんでした。
うちだけ?9.04の時はこんなことはありませんでした。
290デフォルトの名無しさん
2010/05/12(水) 06:30:33 全体を総括するあまり忙しくないプロセスがあるから一個多いのが正常。
291デフォルトの名無しさん
2010/05/21(金) 11:41:54292デフォルトの名無しさん
2010/05/23(日) 21:53:46 Fortranで !$omp parallel do private(...)
のprivate変数が多いので文字数制限に引っかかって改行しないといけないのですが、
括弧中で改行すると & や!$omp& で繋げてもうまく動きません。
どうやったらいいんでしょうか。PGIコンパイラです。
のprivate変数が多いので文字数制限に引っかかって改行しないといけないのですが、
括弧中で改行すると & や!$omp& で繋げてもうまく動きません。
どうやったらいいんでしょうか。PGIコンパイラです。
293デフォルトの名無しさん
2010/05/23(日) 22:44:30 PGIは知らないがIntelのは
!$omp parallel &
! & do
とかで出来た気がする。
2行目の行頭が!か!$か!$omp かは忘れた。
!$omp parallel &
! & do
とかで出来た気がする。
2行目の行頭が!か!$か!$omp かは忘れた。
294デフォルトの名無しさん
2010/05/31(月) 23:23:36 c++でOpenMPを使う時に
#pragma omp parallel for 文の後の
forループ内でnew演算子使っても計算は保障されるの?
保障されない場合は回避方法はあるの?
#pragma omp parallel for 文の後の
forループ内でnew演算子使っても計算は保障されるの?
保障されない場合は回避方法はあるの?
295デフォルトの名無しさん
2010/06/01(火) 00:31:24 保障されなきゃ話にならんだろ
296デフォルトの名無しさん
2010/06/01(火) 01:58:47 >>294
ちょっと計算っていうのがわかりにくいが、
要はnewで確保した領域で計算した結果が保証されるのか?
っていう意味なのかな?だとすればyesだろうけど、
atomicを考えるとめんどくさいような気がするなあ。
ちょっと計算っていうのがわかりにくいが、
要はnewで確保した領域で計算した結果が保証されるのか?
っていう意味なのかな?だとすればyesだろうけど、
atomicを考えるとめんどくさいような気がするなあ。
297294
2010/06/01(火) 22:42:21 回答どうも
コンパイルは通ったんだけど並列化されない
なぜ?
チェックし直して
うまく動いたら改めて書き込みします
コンパイルは通ったんだけど並列化されない
なぜ?
チェックし直して
うまく動いたら改めて書き込みします
298デフォルトの名無しさん
2010/06/01(火) 23:35:00 コード晒さずに結果だけ書かれてもな
299デフォルトの名無しさん
2010/06/01(火) 23:45:19 #pragma omp parallel for private(共用しない変数) num_threads(スレッド数)
300デフォルトの名無しさん
2010/06/02(水) 00:00:30 まさかshare変数をnewしたの?
301デフォルトの名無しさん
2010/07/15(木) 01:58:36 よってたかって new か・・・・恐いな。
というかどうなるんだろう?
というかどうなるんだろう?
302デフォルトの名無しさん
2010/09/12(日) 05:59:15 この板では意味ないだろうけど・・・無意味にあげておく
303デフォルトの名無しさん
2011/01/04(火) 02:21:11 このスレ過疎り過ぎ
GCC4.5.0 (MinGW) だとforループ中でbreakが使えないんだけど、解決する定石とかある?
とりあえずフラグ立てて解決したんだけどなにかいい方法があれば教えてくれ
// サンプル:指定された"TARGET"が見つかるまでのループ数を表示するプログラム
#include <stdio.h>
#include <omp.h>
#define FIN 100
#define TARGET 70
int main(){
int i, flag=0, cnt=0;
#pragma omp parallel for reduction(+:cnt)
for(i = 0;i < FIN;i++){
printf("%d: %d\n", omp_get_thread_num(), i);
cnt++;
if(flag){
printf("%d: break\n", omp_get_thread_num());
i+=FIN;
}
if(i == TARGET){
printf("%d: found and break\n", omp_get_thread_num());
flag = 1;
#pragma omp flush(flag)
i+=FIN;
}
}
printf("total %d loops\n",cnt);
return 0;
}
GCC4.5.0 (MinGW) だとforループ中でbreakが使えないんだけど、解決する定石とかある?
とりあえずフラグ立てて解決したんだけどなにかいい方法があれば教えてくれ
// サンプル:指定された"TARGET"が見つかるまでのループ数を表示するプログラム
#include <stdio.h>
#include <omp.h>
#define FIN 100
#define TARGET 70
int main(){
int i, flag=0, cnt=0;
#pragma omp parallel for reduction(+:cnt)
for(i = 0;i < FIN;i++){
printf("%d: %d\n", omp_get_thread_num(), i);
cnt++;
if(flag){
printf("%d: break\n", omp_get_thread_num());
i+=FIN;
}
if(i == TARGET){
printf("%d: found and break\n", omp_get_thread_num());
flag = 1;
#pragma omp flush(flag)
i+=FIN;
}
}
printf("total %d loops\n",cnt);
return 0;
}
304デフォルトの名無しさん
2011/01/04(火) 09:57:50 単純なループの場合は parallel for に頼らず自前で各スレッドのループ範囲を決めれば break できる。
フラグを使うのはスレッド間の同期に必要なので、break できたとしても無くせないと思われ。
#include <stdio.h>
#include <omp.h>
#define FIN 100
#define TARGET 70
int main(){
int i, found=0, cnt=0;
#pragma omp parallel reduction(+:cnt)
{
int t, n, is, ie;
t = omp_get_num_threads();
n = (FIN + t - 1) / t;
is = n * omp_get_thread_num();
ie = (is + n < FIN) ? is + n : FIN;
printf("%d: %d-%d\n", omp_get_thread_num(), is, ie);
for(i = is; !found && i < ie; i++){
printf("%d: %d\n", omp_get_thread_num(), i);
cnt++;
if (i == TARGET){
found = 1;
#pragma omp flush(found)
printf("%d: found\n", omp_get_thread_num());
}
}
printf("%d: %d loops\n", omp_get_thread_num(), cnt);
}
printf("total %d loops\n",cnt);
return 0;
}
フラグを使うのはスレッド間の同期に必要なので、break できたとしても無くせないと思われ。
#include <stdio.h>
#include <omp.h>
#define FIN 100
#define TARGET 70
int main(){
int i, found=0, cnt=0;
#pragma omp parallel reduction(+:cnt)
{
int t, n, is, ie;
t = omp_get_num_threads();
n = (FIN + t - 1) / t;
is = n * omp_get_thread_num();
ie = (is + n < FIN) ? is + n : FIN;
printf("%d: %d-%d\n", omp_get_thread_num(), is, ie);
for(i = is; !found && i < ie; i++){
printf("%d: %d\n", omp_get_thread_num(), i);
cnt++;
if (i == TARGET){
found = 1;
#pragma omp flush(found)
printf("%d: found\n", omp_get_thread_num());
}
}
printf("%d: %d loops\n", omp_get_thread_num(), cnt);
}
printf("total %d loops\n",cnt);
return 0;
}
305デフォルトの名無しさん
2011/01/05(水) 00:43:11 >>304 早速のレスサンクス
そのやり方はスマートだしちゃんと規格に準拠してるね
正月最後の休みを使って公式にあるOpenMP Specifications v3.0を読んでみたんだけど
for指示文に関連付けられたforループは規格で(jp:p.44)
// for (init-expr; test-expr; incr-expr) structured-block
// structured block:C/C++では、先頭に入口が一つと末尾に出口が一つある実行文か複合文、あるいはOpenMP構文。
// 出口点は構造化ブロックからのの分岐であってはいけません。
となってるから元々breakは無理なんだな
さらにtest-exprは
// var relational-op b または b relational-op var
//var:符号付き、または符号なしの整数型の変数 or C++の場合、ランダムアクセスイテレータ型の変数 or Cの場合、ポインタ型の変数
//b:varの型と一致した型のループ不定式
となってるから
>>303の for(i = 0;i < FIN;i++){ を for(i = 0;!flag && i < FIN;i++){ にはできない
>>304ならparallelリージョンのなかのループだから&&が使えてスマートに書けるんだな
おかげさまで勉強になったよ
参考
[en]http://www.openmp.org/mp-documents/spec30.pdf
[jp]http://www.openmp.org/mp-documents/OpenMP30spec-ja.pdf
そのやり方はスマートだしちゃんと規格に準拠してるね
正月最後の休みを使って公式にあるOpenMP Specifications v3.0を読んでみたんだけど
for指示文に関連付けられたforループは規格で(jp:p.44)
// for (init-expr; test-expr; incr-expr) structured-block
// structured block:C/C++では、先頭に入口が一つと末尾に出口が一つある実行文か複合文、あるいはOpenMP構文。
// 出口点は構造化ブロックからのの分岐であってはいけません。
となってるから元々breakは無理なんだな
さらにtest-exprは
// var relational-op b または b relational-op var
//var:符号付き、または符号なしの整数型の変数 or C++の場合、ランダムアクセスイテレータ型の変数 or Cの場合、ポインタ型の変数
//b:varの型と一致した型のループ不定式
となってるから
>>303の for(i = 0;i < FIN;i++){ を for(i = 0;!flag && i < FIN;i++){ にはできない
>>304ならparallelリージョンのなかのループだから&&が使えてスマートに書けるんだな
おかげさまで勉強になったよ
参考
[en]http://www.openmp.org/mp-documents/spec30.pdf
[jp]http://www.openmp.org/mp-documents/OpenMP30spec-ja.pdf
306デフォルトの名無しさん
2011/02/25(金) 21:14:37.06 内部関数を別の関数に渡すコード断片があると(Intel Fortranの拡張)、
例えそれが実行されなくとも、性能がガタ落ちになるようだ。理由は不明だが。
例えそれが実行されなくとも、性能がガタ落ちになるようだ。理由は不明だが。
LinuxでもしCPUに空きがあるなら、並列数をあげるようにしたいのですが、どのようにすればいいのでしょうか?
308デフォルトの名無しさん
2011/04/23(土) 16:01:03.61 linuxでノンブロッキングなconnectって
connectよんでからselectで待つのが定石だと思ってたけど
connectが成功を返すまでsleepはさんでコールし続けるってコードを見かけた
これってありなの?
connectよんでからselectで待つのが定石だと思ってたけど
connectが成功を返すまでsleepはさんでコールし続けるってコードを見かけた
これってありなの?
309デフォルトの名無しさん
2011/04/23(土) 19:20:41.40310デフォルトの名無しさん
2011/04/25(月) 18:50:56.39 >>309
すまぬ、誤爆したうえ放置してた
すまぬ、誤爆したうえ放置してた
311デフォルトの名無しさん
2011/05/19(木) 08:24:03.85 omp_set_num_threadsってOpenMPのスレッド内で呼んでも有効にならないの?
312デフォルトの名無しさん
2011/05/23(月) 11:29:46.68 >>311
スレッドを幾つ起動するかを、起動してから指定するの?
スレッドを幾つ起動するかを、起動してから指定するの?
313デフォルトの名無しさん
2011/07/01(金) 06:24:21.77 VC++2010でシングルスレッドのループが並列化したループの有無によって
速度変わってしまうのですが、原因分かりませんか?
ttp://ideone.com/Yn67n
速度変わってしまうのですが、原因分かりませんか?
ttp://ideone.com/Yn67n
314デフォルトの名無しさん
2011/07/01(金) 12:39:39.32315デフォルトの名無しさん
2011/07/01(金) 14:43:07.70 clock()はCPU時間を取得するもの
なので、裏で走るスレッドの実行時間も加算される
実時間で計測する関数を使うようにしてみればいい
なので、裏で走るスレッドの実行時間も加算される
実時間で計測する関数を使うようにしてみればいい
316313
2011/07/01(金) 15:14:31.88 原因をやんわりとではありますが掴めた気がします。
ttp://ideone.com/6g1yy
上記のコードの様に、時間取得用変数にvolatileをつけると並列ループの有無に関わらず
シングルスレッドループの速度が一定となりました。
また、時間計測処理を省いて体感で測ってみましたが、
こちらでも速度が一定な感があります。
(体感の為誤差は確認出来てませんが)
この事から、時間取得とOpenMP有効時の最適化は相性が悪いのではないかと思います。
根本的な解決にはなってませんが、回避策は分かりました、有難うございました。
ttp://ideone.com/6g1yy
上記のコードの様に、時間取得用変数にvolatileをつけると並列ループの有無に関わらず
シングルスレッドループの速度が一定となりました。
また、時間計測処理を省いて体感で測ってみましたが、
こちらでも速度が一定な感があります。
(体感の為誤差は確認出来てませんが)
この事から、時間取得とOpenMP有効時の最適化は相性が悪いのではないかと思います。
根本的な解決にはなってませんが、回避策は分かりました、有難うございました。
317デフォルトの名無しさん
2011/07/01(金) 15:15:14.35 リロードしてませんでした・・・
>>315そうしてみます、有難うございます。
>>315そうしてみます、有難うございます。
318デフォルトの名無しさん
2011/07/17(日) 14:48:54.13 taskとsectionの使い分けって?
319デフォルトの名無しさん
2011/08/11(木) 16:34:58.28 fortran90でプログラミングしてるのに、
「C/C++プログラマーのためのOpenMP並列プログラミング」を買ってしまったんだが、
大まかな部分ってCもfortranも同じなのかな?
「C/C++プログラマーのためのOpenMP並列プログラミング」を買ってしまったんだが、
大まかな部分ってCもfortranも同じなのかな?
320デフォルトの名無しさん
2011/08/11(木) 19:04:57.30 その本を窓から投げ捨てて、「fortran90 OpenMP」でググって出たPDFを読んだ方が100倍マシだよ。
321デフォルトの名無しさん
2011/08/11(木) 23:46:57.30 >>320
おっけ今から全力でぶん投げてくる
おっけ今から全力でぶん投げてくる
322デフォルトの名無しさん
2011/08/22(月) 01:58:44.67 くれ。
いや、どうせなら
図書館にでも寄贈してやってくれ
いや、どうせなら
図書館にでも寄贈してやってくれ
323デフォルトの名無しさん
2011/08/22(月) 20:50:41.53 OpenMPのスタティックなライブラリってないの?
VCだとMP使うと再頒布可能パッケージが必要だ。
VCだとMP使うと再頒布可能パッケージが必要だ。
324デフォルトの名無しさん
2011/08/22(月) 23:49:50.97 ttp://codezine.jp/article/detail/4693
> 先ほど構成をReleaseに変えてビルドした理由は、Debugでビルドして実行するには特別なファイルが
>必要になるからです。OpenMPをデバッグ構成でビルドするには、
>「Microsoft.VC90.DebugOpenMP.manifest」ファイルと「vcomp90d.dll」ファイル(VC2008の場合)が必要になります。
>このファイルはVisual Studio 2008のStandardバージョン以上ならば
>「C:\Program Files\Microsoft Visual Studio 9.0\VC\redist\Debug_NonRedist\x86\Microsoft.VC90.DebugOpenMP」
>にありますので、実行ファイルと同じ場所にコピーして下さい。そうすれば、
>Debug構成でも正常に実行できるようになります。
OpenMP対応を謳ってるくせに、なんでこんな面倒なことしないといけないんだろう・・・
プロパティで「OpenMP使う」ってするだけでできるようにしたらいいと思うんだけど。
(配布時は別途対応するにしても)
> 先ほど構成をReleaseに変えてビルドした理由は、Debugでビルドして実行するには特別なファイルが
>必要になるからです。OpenMPをデバッグ構成でビルドするには、
>「Microsoft.VC90.DebugOpenMP.manifest」ファイルと「vcomp90d.dll」ファイル(VC2008の場合)が必要になります。
>このファイルはVisual Studio 2008のStandardバージョン以上ならば
>「C:\Program Files\Microsoft Visual Studio 9.0\VC\redist\Debug_NonRedist\x86\Microsoft.VC90.DebugOpenMP」
>にありますので、実行ファイルと同じ場所にコピーして下さい。そうすれば、
>Debug構成でも正常に実行できるようになります。
OpenMP対応を謳ってるくせに、なんでこんな面倒なことしないといけないんだろう・・・
プロパティで「OpenMP使う」ってするだけでできるようにしたらいいと思うんだけど。
(配布時は別途対応するにしても)
325デフォルトの名無しさん
2011/08/23(火) 01:32:00.61 俺はフリーだろうとシェアウェアだろうと、
余計なモノをインストールさせるアプリは使わない。
余計なモノをインストールさせるアプリは使わない。
326デフォルトの名無しさん
2011/08/23(火) 01:56:49.13 Visual Studioなんて眼中に無さそうだね
327デフォルトの名無しさん
2011/08/24(水) 20:10:32.31 >>324
その記事の筆者名でググって見たほうがよい
その記事の筆者名でググって見たほうがよい
328324
2011/08/24(水) 21:41:49.47329デフォルトの名無しさん
2011/11/01(火) 13:47:35.24 C+11のparallel_forだとキャプチャする変数を指定する文法があることから
外側の関数からラムダ関数に変数を渡すっていうオーバーヘッドが
ありそうだけど、#pragma omp parallel forだとそのへんどうなってるの?
外側の関数からラムダ関数に変数を渡すっていうオーバーヘッドが
ありそうだけど、#pragma omp parallel forだとそのへんどうなってるの?
330デフォルトの名無しさん
2011/11/15(火) 14:04:00.87 C++やC99において、OpenMPループの中で、変数を宣言するのは安全なのでしょうか?
例えば、
int sum = 0;
#pragma omp parallel for reduction(+:sum)
for (int i = 0; i < 100; i++) {
int tmp = i;
tmp++;
sum += tmp;
}
この例では、OpenMP並列化されたループ内で変数iとtmpを宣言していますが、
試してみたところ問題はなさそうです。
iもtmpもスレッドプライベート変数になると思うのですが…。
何か問題があればご教示をお願いいたします。
例えば、
int sum = 0;
#pragma omp parallel for reduction(+:sum)
for (int i = 0; i < 100; i++) {
int tmp = i;
tmp++;
sum += tmp;
}
この例では、OpenMP並列化されたループ内で変数iとtmpを宣言していますが、
試してみたところ問題はなさそうです。
iもtmpもスレッドプライベート変数になると思うのですが…。
何か問題があればご教示をお願いいたします。
331デフォルトの名無しさん
2011/11/15(火) 16:07:23.72 問題ないよ!
Private 扱いの理解で無問題
Private 扱いの理解で無問題
332デフォルトの名無しさん
2011/11/15(火) 17:00:59.88 >331
ありがとうございます。これで安心して宣言できます。
今まではわざわざループの外で宣言していたので…。
ありがとうございます。これで安心して宣言できます。
今まではわざわざループの外で宣言していたので…。
333デフォルトの名無しさん
2011/11/24(木) 16:58:17.76 CreateThreadで作成したスレッド内でompを使うと
スレッドが終了してもゴミスレやメモリが残ってしまうようなのですが
これを解放する関数とかありませんか?
スレッドが終了してもゴミスレやメモリが残ってしまうようなのですが
これを解放する関数とかありませんか?
334デフォルトの名無しさん
2011/11/25(金) 08:06:46.80335デフォルトの名無しさん
2011/11/25(金) 12:24:01.62 _beginthreadex に置き換えてみましたがだめでした。
ompはランタイム関数ではないらしい?
ompはランタイム関数ではないらしい?
336デフォルトの名無しさん
2012/01/14(土) 23:38:53.03 OpenMP3.2とか出てきているみたいだけど、
OpenMPのバリア同期は関数内部でも使えるようになったのかな?
OpenMPのバリア同期は関数内部でも使えるようになったのかな?
337デフォルトの名無しさん
2012/04/20(金) 21:15:47.38 Android の NDK で使える様にならんかなぁ。。
338デフォルトの名無しさん
2012/05/03(木) 21:12:37.13 揚げ
339デフォルトの名無しさん
2012/05/07(月) 19:38:56.61 質問なんですが、
do a=1,10
do b=1,50
call test1(a,b)
call test2(a,b)
call test3(a,b)
enddo
enddo
こんなプログラムを動かしたいんですけど
これをa=1,b=1の時はCPU1がtest1,2,3を動かして、
a=1,b=2の時はCPU2がtest1,2,3を動かして(ry・・・って感じに
プログラムしたいのですが、これはdoループをparallel doで挟むだけじゃダメですか?
do a=1,10
do b=1,50
call test1(a,b)
call test2(a,b)
call test3(a,b)
enddo
enddo
こんなプログラムを動かしたいんですけど
これをa=1,b=1の時はCPU1がtest1,2,3を動かして、
a=1,b=2の時はCPU2がtest1,2,3を動かして(ry・・・って感じに
プログラムしたいのですが、これはdoループをparallel doで挟むだけじゃダメですか?
340デフォルトの名無しさん
2012/05/07(月) 19:40:00.56 >>339ですが
言語はfortranです
言語はfortranです
341デフォルトの名無しさん
2012/05/08(火) 09:21:00.56 例の前に条件を言えよ
342デフォルトの名無しさん
2012/05/08(火) 11:41:50.17 >>339
まあ、ふつうに
do a=1,10
を並列化して様子を見てみればいいんじゃね?
あるいは、
do i=1,10*50
a=(i-1)/50+1
b=mod(i-1,10)
,.,,,,,,,
enddo
として並列すべきループを一つにまとめて
dynamic な並列で処理するとか。
手元に本が無いので dynamic にするやり方がパッと出てこないが
まあ、ふつうに
do a=1,10
を並列化して様子を見てみればいいんじゃね?
あるいは、
do i=1,10*50
a=(i-1)/50+1
b=mod(i-1,10)
,.,,,,,,,
enddo
として並列すべきループを一つにまとめて
dynamic な並列で処理するとか。
手元に本が無いので dynamic にするやり方がパッと出てこないが
343デフォルトの名無しさん
2012/05/08(火) 14:55:56.02 と思ったら、b についての並列部分は
a に依存する可能性があるのか。
その場合は、2つのdo の間に
ディレクティブを入れるしかないな。
というか、まずは質問できるまで
いろいろ遊んでみるべし
a に依存する可能性があるのか。
その場合は、2つのdo の間に
ディレクティブを入れるしかないな。
というか、まずは質問できるまで
いろいろ遊んでみるべし
344デフォルトの名無しさん
2012/05/14(月) 11:39:23.47 privateって同じ変数でスレッドごとに違う数字を使えるってことだと思ってるんだけど、
これって配列をprivateに指定することってできますか?
これって配列をprivateに指定することってできますか?
345デフォルトの名無しさん
2012/05/14(月) 15:04:04.76 できるよ
346デフォルトの名無しさん
2012/05/14(月) 15:07:09.10 あ、あまり大きなサイズの配列を
private にすると、なんとか領域が
デフォを超えてエラーになるので、
何かの環境変数の値を変えないと
いけなかったハズ。
なんだっけ・・・heap だか stack だかいうヤツ。
private にすると、なんとか領域が
デフォを超えてエラーになるので、
何かの環境変数の値を変えないと
いけなかったハズ。
なんだっけ・・・heap だか stack だかいうヤツ。
347デフォルトの名無しさん
2012/05/14(月) 17:44:28.28348デフォルトの名無しさん
2012/05/18(金) 08:23:15.58349デフォルトの名無しさん
2012/05/18(金) 08:42:39.22 通りすがりだけど、
omp_set_lock と omp_unset_lock
これの使い方がいまいちよくわかんないんだよね。
omp_set_lock と omp_unset_lock
これの使い方がいまいちよくわかんないんだよね。
350デフォルトの名無しさん
2012/05/18(金) 08:55:39.47 じゃ、使わなければいいじゃん。
判らんものを無理に使うことはないよ。
判らんものを無理に使うことはないよ。
351デフォルトの名無しさん
2012/05/18(金) 10:24:47.70352デフォルトの名無しさん
2012/05/18(金) 12:14:48.44 >>349
単なるmutexじゃねーか。
単なるmutexじゃねーか。
353349
2012/05/18(金) 13:28:27.29 いじめないでくれよぅ。
shared private reduction
だけで今まで何とかなってたんだよ・・
shared private reduction
だけで今まで何とかなってたんだよ・・
354デフォルトの名無しさん
2012/05/18(金) 14:42:29.77 OpenMPの弊害か。
やっぱりある程度基礎が必要だな。
ちなみに、omp_set_lock/omp_unset_lock
は軽くて便利だぞ。
やっぱりある程度基礎が必要だな。
ちなみに、omp_set_lock/omp_unset_lock
は軽くて便利だぞ。
355デフォルトの名無しさん
2012/07/02(月) 18:29:55.05 これからOpenMP扱う初心者なのですがいきなり躓きました
Win7でVC++2010Expressを使用して
#include "stdafx.h"
#include <stdio.h>
int _tmain(int argc, _TCHAR* argv[])
{
printf("OpenMP Spec %d\n",_OPENMP);
return 0;
}
を実行しようとすると、ファイル 'VCOMPD.lib' を開くことができません。と表示され失敗してしまいました
ググったら構成プロパティでOpenMPサポートを「はい」にし、vcomp90.dllをPATHの通ったディレクトリにコピーするこが必要のとのこと
OpenMPサポートは解決したのですが、PATHの通ったディレクトリにコピーしてないから、vcompd.libを開け〜とエラーが起きるのでしょうか?
ちなみにVSコマンドプロンプト(2010)でpathと入力したら多くのディレクトリが表示されどこに入れればいいのか分かりません・・・
どこのディレクトリにコピーすればいいのか教えてください
Win7でVC++2010Expressを使用して
#include "stdafx.h"
#include <stdio.h>
int _tmain(int argc, _TCHAR* argv[])
{
printf("OpenMP Spec %d\n",_OPENMP);
return 0;
}
を実行しようとすると、ファイル 'VCOMPD.lib' を開くことができません。と表示され失敗してしまいました
ググったら構成プロパティでOpenMPサポートを「はい」にし、vcomp90.dllをPATHの通ったディレクトリにコピーするこが必要のとのこと
OpenMPサポートは解決したのですが、PATHの通ったディレクトリにコピーしてないから、vcompd.libを開け〜とエラーが起きるのでしょうか?
ちなみにVSコマンドプロンプト(2010)でpathと入力したら多くのディレクトリが表示されどこに入れればいいのか分かりません・・・
どこのディレクトリにコピーすればいいのか教えてください
356デフォルトの名無しさん
2012/07/03(火) 12:43:01.12 よく分かってないなら、絶対パスで指定すればいいんじゃね
357355
2012/07/03(火) 12:59:16.53358デフォルトの名無しさん
2012/07/03(火) 14:41:46.91 まずC++を10年勉強しろ
359デフォルトの名無しさん
2012/07/03(火) 15:32:38.77 OpenMP以前にC#とか使ってみ
360デフォルトの名無しさん
2012/07/03(火) 16:31:39.87361デフォルトの名無しさん
2012/07/03(火) 17:19:47.13 エラーに出てるけどビルドに必要なのはVCOMPD.libであってvcomp90.dllじゃないんで
362デフォルトの名無しさん
2012/07/03(火) 19:49:27.49 >>355
VS2010 (=verison 10.0) なのに、なんで vcomp90 (=version 9.0 : VS2008用) を
指定してたりするの?
あと、Debug用ライブラリ (vcompd.lib = Visual C++ OpneMP, debug) 使うなら、
VS2010 Pro (=有料版) が必要。
解決方法を4つ考えてみた:
(1) VS2010 Professional を買う
(2) VS2008 Express + Windows SDK 7.0 を使う
(3) Cygwin や MinGW をインストールして、付属のgcc/g++ を使う
(4) Linux や *BSD を使う (VMware/VirtualBoxでも併用すればよろし)
VS2010 (=verison 10.0) なのに、なんで vcomp90 (=version 9.0 : VS2008用) を
指定してたりするの?
あと、Debug用ライブラリ (vcompd.lib = Visual C++ OpneMP, debug) 使うなら、
VS2010 Pro (=有料版) が必要。
解決方法を4つ考えてみた:
(1) VS2010 Professional を買う
(2) VS2008 Express + Windows SDK 7.0 を使う
(3) Cygwin や MinGW をインストールして、付属のgcc/g++ を使う
(4) Linux や *BSD を使う (VMware/VirtualBoxでも併用すればよろし)
363デフォルトの名無しさん
2012/07/03(火) 20:26:40.35 VC++のOpenMPはデバッグビルドだと_DEBUGをundefしてからomp.hをincludeしないといけないってのが昔あったが
364デフォルトの名無しさん
2012/07/03(火) 23:09:00.31 VS2010 Pro 評価版を Virtual PC とかの捨て環境にインストールすれば vcompd.lib も入ってるけど、これコピーして使ったら逮捕されるかもしれないからやめたほうがいいね。
365355
2012/07/04(水) 16:57:37.98366355
2012/07/24(火) 17:16:07.86 久しぶりの書き込みです
言われた通りVS2008+SDK7.0でopenmpをコンパイラ実行することができました
できればサポ3.0以上を無償ソフトで使えればよかった・・・
言われた通りVS2008+SDK7.0でopenmpをコンパイラ実行することができました
できればサポ3.0以上を無償ソフトで使えればよかった・・・
367デフォルトの名無しさん
2012/08/03(金) 08:51:06.44 メモリのローカリティって何?
368デフォルトの名無しさん
2012/08/03(金) 11:28:21.30 なるべく近いアドレスのデータだけを
369デフォルトの名無しさん
2012/08/27(月) 13:57:29.01 本屋にOpenMPの新しげな本が置いてあったんだけど
あれって買った方がいいと思う?
あれって買った方がいいと思う?
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 中国・ロシア両軍の爆撃機が東京方面へ向かう「異例のルート」を共同飛行…核も搭載可能、連携して威嚇か ★7 [ぐれ★]
- 東京の自販機そばに金塊4200万円分、何者かに持ち去られる…札幌の50代が8000万円振り込んだ後に上京して被害 [どどん★]
- 山田邦子 ひょうきん族時代の年収は12億円「ただ税金が80%」 [muffin★]
- 【東京】「家族で話題にして」 “世田谷一家殺害から25年 警視庁が呼びかけ [煮卵★]
- 向こう3カ月のコメ価格、下落予想強まる…新の収穫量増え需給緩むか 米穀安定供給…調査 [蚤の市★]
- 【沖縄】開業4ヵ月でこれは…“国民の税金”投入の『ジャングリア沖縄』で見た衝撃的な光景と、モチベーションが低い一部スタッフの現状 [ぐれ★]
- テメェは俺を怒らせたオラァ👊💢😅💢👊🏡
- 円安、賃金安、人手不足、物不足、人口減少、少子高齢化、物価高、地方過疎化、インフラ崩壊、増税、高市有事👈どうする [943688309]
- ルーナイト第1条!誰よりルーナ(・o・🍬)が好きな人~🙋🏡
- おさかなさんあつまれえ
- ( ´・ω・` )風の中のおまい
- 【悲報】東京都「実質豊かさ全国最下位」👈え?じゃあ出身者以外で東京に住む意味って何? [732289945]
