- 1 名前:デフォルトの名無しさん mailto:sage [2009/09/21(月) 17:19:27 ]
- マルチスレッドプログラミングについて語るスレ
■前スレ マルチスレッドプログラミング相談室 その7 pc12.2ch.net/test/read.cgi/tech/1215253576/ ■過去スレ その1 ttp://pc3.2ch.net/tech/kako/997/997345868.html その2 ttp://pc5.2ch.net/test/read.cgi/tech/1037636153/ その3 ttp://pc8.2ch.net/test/read.cgi/tech/1098268137/ その4 ttp://pc8.2ch.net/test/read.cgi/tech/1130984585/ その5 ttp://pc11.2ch.net/test/read.cgi/tech/1157814833/ その6 ttp://pc11.2ch.net/test/read.cgi/tech/1187008532/ OS・言語・環境は問わないが、それゆえ明記すべし。 テンプレ 【OS】 【言語】 【実行環境】 【その他特記する事項】
- 795 名前:デフォルトの名無しさん mailto:sage [2011/11/15(火) 13:40:05.39 ]
- >>794
スレ違い。 BASICの宿題はお前にまかせた ttp://hibari.2ch.net/test/read.cgi/tech/1136788500/
- 796 名前:デフォルトの名無しさん mailto:sage [2011/11/15(火) 18:00:31.85 ]
- マルチスレッドで九九表を作るという課題かもしれない
- 797 名前:デフォルトの名無しさん mailto:sage [2011/11/15(火) 18:18:03.92 ]
- 処理そのもののコストよりもスレッド作るコストの方がでがいわw
- 798 名前:デフォルトの名無しさん mailto:sage [2011/11/15(火) 19:26:55.17 ]
- >>797
つまり、よりコストを下げるためにFiberを実装する宿題と言うことか。
- 799 名前:デフォルトの名無しさん mailto:sage [2011/11/16(水) 00:04:15.44 ]
- 教官が採点不能すぐるwww
- 800 名前:デフォルトの名無しさん mailto:sage [2011/11/16(水) 00:07:19.51 ]
- SSE使おうぜ
- 801 名前:デフォルトの名無しさん mailto:sage [2011/11/16(水) 08:01:57.58 ]
- SSEを使ったからといって、マルチスレッドとはいえないがな。
- 802 名前:デフォルトの名無しさん mailto:sage [2011/11/16(水) 09:10:50.87 ]
- 数値計算ならSSEとマルチスレッドを両方使うのが常識だな
- 803 名前:デフォルトの名無しさん mailto:sage [2011/11/16(水) 13:08:03.64 ]
- ならGPGPUで
- 804 名前:デフォルトの名無しさん mailto:sage [2011/11/16(水) 17:08:36.01 ]
- SSE+マルチスレッドなら九九ならず9999999×9999999くらいの表を作るべきだな
- 805 名前:デフォルトの名無しさん mailto:sage [2011/11/16(水) 17:35:23.60 ]
- 約100T個
- 806 名前:デフォルトの名無しさん mailto:sage [2011/11/16(水) 20:09:53.33 ]
- GPGPUってマルチスレッドなのか?
一応処理単位をスレッドと呼ぶけどそれじゃSSEもマルチスレッドになるような 数値計算だとデータ並列が基本だから数値計算プログラムを書く人から見たら いわゆるマルチスレッドと大して違わないんだろうが
- 807 名前:デフォルトの名無しさん mailto:sage [2011/11/16(水) 20:32:03.35 ]
- GPGPUもSSEも「並列化プログラミング」だよね
ただそれらはスレッド無しでも使える技術だから、このスレでは微妙かも 以前は並列処理スレがあったけど、そちらはdat落ちした
- 808 名前:デフォルトの名無しさん mailto:sage [2011/11/16(水) 22:50:07.24 ]
- SSEはSIMDだろ、んでGPGPUとスレッドはMIMD。
SSEとGPGPUは機能としては勿論、分類としても全然違うと思うぞ。
- 809 名前:デフォルトの名無しさん mailto:sage [2011/11/17(木) 02:40:46.84 ]
- GPGPUで重要な性質はSIMDだろ
いかにSIMDを生かせるかで性能が決まって、アルゴリズムもそれが前提になる
- 810 名前:デフォルトの名無しさん mailto:sage [2011/11/17(木) 02:59:04.56 ]
- GPGPUの各クラスタというか構成単位について見ると
同時に異なる命令を実行していることがあり得るので Single Instructionではない フリンの分類に当てはめるならMIMD しかし、もっと狭めたSPMDっていう表現のほうが適切じゃないの
- 811 名前:デフォルトの名無しさん mailto:sage [2011/11/17(木) 03:21:03.30 ]
- 複数の別々の画像に対して同じ処理を並列に独立に実行したら
タスク並列かデータ並列かどっちになるの?
- 812 名前:デフォルトの名無しさん mailto:sage [2011/11/17(木) 07:24:31.73 ]
- どっちも使ってるで良いだろ
- 813 名前:デフォルトの名無しさん mailto:sage [2011/11/20(日) 20:50:45.10 ]
- GPUは投機実行するか、単に並列実行するかで方向性がかなり変わるよね。
もっとも、GPGPUとしては投機実行の方が需要が多いだろうけど。 投機実行となると実行してる命令はクラスタ毎に異なるから やっぱMIMDとしての使用がメインという事でないか。
- 814 名前:デフォルトの名無しさん mailto:sage [2011/11/20(日) 23:03:59.97 ]
- GPGPUは「ゆかいな牧場」のメロディーで発音したくなる。
- 815 名前:デフォルトの名無しさん mailto:sage [2011/11/21(月) 00:44:45.34 ]
- >>814
しまった、そう発音していた。
- 816 名前:デフォルトの名無しさん mailto:sage [2011/11/21(月) 18:45:55.58 ]
- >>815
おまえがいちろうか、
- 817 名前:デフォルトの名無しさん mailto:sage [2011/11/21(月) 19:42:22.04 ]
- 大人になってから改めて歌詞を見ると下ネタにしか見えないな
- 818 名前:デフォルトの名無しさん [2011/11/22(火) 19:52:25.40 ]
- シングルスレッ〜ドでコード おまえ書いてたころ〜
- 819 名前:デフォルトの名無しさん mailto:sage [2011/11/22(火) 20:32:28.94 ]
- 人というのは知っている言葉を敏感に聞きとれるようになっている
すなわち、それは>>817がエロくなっただけのこと
- 820 名前:デフォルトの名無しさん mailto:sage [2011/11/24(木) 06:40:15.25 ]
- かゆいな牧場
- 821 名前:デフォルトの名無しさん mailto:sage [2011/11/25(金) 22:40:29.78 ]
- atomic_store、stomic_load関数って自分で実装しなくてはならない羽目になったらどうするんですか
WindowsAPIを探してみたんですがよくわかりません Interlockedシリーズを応用するんでしょうか?
- 822 名前:デフォルトの名無しさん mailto:sage [2011/12/13(火) 03:13:09.01 ]
- メモリ競合は、あるスレッドがあるアドレス位置に書き込みを行っている最中に、
別のスレッドがそのアドレス位置に書き込み、もしくは読み込みを行うことで、 そのアドレス位置に中途半端にデータが書き込まれた状態で別のデータが書き込まれる、 あるいは読み込まれることによって起こる、という認識で正しいでしょうか? その場合、それはビット単位で起こるのでしょうか? たとえば以下のように、ある変数に2スレッドで書き込み、1スレッド読み込む場合、 変数の値が 0x00, 0xff 以外の値になることはあるでしょうか? もし変数のサイズがもっと大きければどうでしょう? // thread0 var = 0x00; // thread1 var = 0xff; // thread2 if( var ) ; // ...
- 823 名前:デフォルトの名無しさん mailto:sage [2011/12/13(火) 05:03:20.45 ]
- >>822
環境次第。その対象アドレスにあるのが普通のメモリなら、ビット単位と言う事は無いのでその2値以外になることはおそらくない。
- 824 名前:デフォルトの名無しさん mailto:sage [2011/12/13(火) 17:01:56.05 ]
- >>822
どのサイズが問題なく読み書きできるかは環境(CPUやVM等)しだい (intはOKだがdoubleはだめといった感じ)
- 825 名前:デフォルトの名無しさん mailto:sage [2011/12/13(火) 17:32:59.62 ]
- >>822
32ビットx86なら4バイトアライメントされたアドレスの4バイトをmovでアトミックに書き込める、 これが8バイトだとmov2回になるので(もっと違う値なら)2値のどちらでもない状態が存在する、とかいうのはある でも付いて行けなくなるから考えないほうがいいぞ
- 826 名前:デフォルトの名無しさん mailto:sage [2011/12/14(水) 04:35:01.63 ]
- >>823-825
ありがとうございます。 とりあえず、メモリを読み書きする電気的な信号などがバッティングして データが飛んだりハードが壊れたりということはないんですね。
- 827 名前:デフォルトの名無しさん mailto:sage [2011/12/14(水) 06:38:46.37 ]
- メモリ競合程度でハード自体が壊れるなら欠陥品と言わざるを得ない
- 828 名前:デフォルトの名無しさん mailto:sage [2011/12/14(水) 08:09:32.50 ]
- >>826
その環境が組み込みでメモリマップドI/Oの先にいい加減な回路が繋がっていたりしたら、壊れるかも知れんが。 尤も、そんな回路ならマルチスレッドに関係なく壊しそうだけど。
- 829 名前:デフォルトの名無しさん mailto:sage [2011/12/14(水) 15:52:37.83 ]
- そんなハードウェア上で何も組める気がしないぜ
- 830 名前:デフォルトの名無しさん mailto:sage [2011/12/14(水) 16:07:15.72 ]
- >>829
しかしそれでも組むのが我々の仕事だ
- 831 名前:デフォルトの名無しさん [2012/01/15(日) 18:00:02.48 ]
- 物理ディスクとのI/Oコストってデカイじゃん
もしかしたらアーカイブのままメモリに読み込んで、 メモリ中でアーカイブ展開しながら処理した方が 早いんじゃないかとも思うんだが、 検証しやすいサンプルとか無い? 高速展開と、部分抽出が出来れば効果が現れやすいと思う。
- 832 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 18:23:45.87 ]
- >>831
20年くらい前に、そういうコンセプトのフリーウェアがあったっけな。 とりあえず試してみたら良いだろ。 圧縮率を20%と仮定するなら、100KBのreadにかかる時間と、 80KBのreadにかかる時間差を計測する。 後はオンメモリに置いといて、その時間差ないに解凍できるかだ。 ちなみにディスクの待ち時間の大部分はヘッドのシーク。 データサイズが多少小さくなったところで、得られる時間は少ない。 データが連続している場合、20KB減ったところで1msも短くならないぞ。
- 833 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 20:58:51.56 ]
- 何だ無駄か。読み込みスレッドで随時解凍しながら取り込めば、
ワーカーの処理待ちを減らせるかと思ったのに。
- 834 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 22:18:40.46 ]
- いや、IO自体のオーバーヘッドは今でもバカにならない。
ネットワーク上のファイルIOもレイテンシがでかい。 いまどき数百MBからGBオーバーのファイルも少なくないんだから、本気でバッファを大きくとるか、コンカレントに処理して欲しい。 アーカイバをいくつか使い比べると何割というレベルの速度差がある。 速い奴はちゃんとそういう所にも気を配ってる。
- 835 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 23:21:05.40 ]
- そういえば昔、NetWareというサーバOSがあったな
クライアントのローカルHDDをアクセスするよりも LANでつながったNetWareサーバ上のファイルをアクセスする方が高速だった 古きよき時代
- 836 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 01:37:22.73 ]
- JavaのFutureとpthread_joinとの違いが、
スレッドプール使えるかどうかぐらいしか解からん。 アレは、pthread_joinとスレッドプール以外じゃ何が違うの? (オブジェクトと例外返すのは置いといて)
- 837 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 01:47:25.07 ]
- いやFutureは結果返すためのものだからそれ置いといたらダメだろ
- 838 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 02:01:11.36 ]
- pthread_joinも結果は返せるからね。
pthread_joinを軽くラップするだけで、 例外を返すのもオブジェクトを返すのも簡単にできちゃう。 結果を返す事だけに注目すると差異としてはあまりに小さいと思うけど。
- 839 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 11:48:41.44 ]
- >>831
読みきってから処理するのではなく 読みながら処理する
- 840 名前:デフォルトの名無しさん [2012/01/16(月) 13:00:46.78 ]
- 無圧縮データでディスクIOが、どれくらい
コスト掛かるのか調べてみた。 調べ方は2つスレッドを走らせ、 片方はひたすらカウント、 もう片方はファイル読み込みしながら、 読み込んだバイト数分だけカウント。 どちらもカウント変数をクリティカルセクションで囲んだ。 CPUは2コア。 この条件で実行するとファイル読み込み してるほうが1/8程度遅かった 遅い遅い言うけどそうでも無いのな。
- 841 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 17:41:36.51 ]
- キャッシュ読んでるだけじゃないのそれ
- 842 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 20:46:09.02 ]
- まぁ、NTFSの圧縮ファイルシステム使って早くなるなら、
みんな圧縮してるよね。
- 843 名前:デフォルトの名無しさん mailto:sage [2012/01/18(水) 00:09:55.35 ]
- それは一旦全部解答してから読み込むからでしょ
- 844 名前:デフォルトの名無しさん mailto:sage [2012/01/18(水) 15:32:20.55 ]
- その認識は完全に間違ってる
blogs.msdn.com/b/ntdebugging/archive/2008/05/20/understanding-ntfs-compression.aspx
- 845 名前:デフォルトの名無しさん mailto:sage [2012/01/21(土) 07:08:56.51 ]
- 2chのログは圧縮フォルダに入れた方が圧倒的に速い
- 846 名前:デフォルトの名無しさん mailto:sage [2012/01/22(日) 10:58:15.73 ]
- パソコン側のHDDキャッシュがお馬鹿ってことじゃあ
- 847 名前:デフォルトの名無しさん mailto:sage [2012/01/23(月) 09:41:58.18 ]
- >>846
正しいだろ。
- 848 名前:デフォルトの名無しさん mailto:age [2012/02/21(火) 23:37:31.35 ]
- ディスク絡みのスレッドの話だけど、HDDのランダムアクセスの遅さに驚愕した。
任意のスレッド数(プール使用)で、複数同時にファイルを読み込み、 MD5ハッシュを取り出してファイル比較するツールを作った。 んで、1ファイル1MB未満のファイル群と、1ファイル40MBを超える ファイル群に対して実行してみた。4コア環境で実行したら 1MB未満だと3スレッドが最速。40MB以上だと1スレッドが最速ってな結果になった。 40MB以上で、1スレッドだとディスクアクセスが100MB/sを超える。 40MB以上で、4スレッドだとディスクアクセスは30MB/s未満まで低下した。 みんなは、この辺どう回避してんの?
- 849 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 23:46:23.99 ]
- >>848
非同期IOとか、メモリマップドファイルとか。 複数スレッドから同時アクセスなんかしたら、ディスクシークが増えて、 帰って遅くなるのは当たり前。
- 850 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 23:47:16.21 ]
- >>848
NCQにまかせて神に祈る ってのは冗談で 1. 読む順番が決まっているならデータをデフラグでその順番に並べておく 2. その順番に読めるように1スレッドで読みに行く
- 851 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 00:02:11.03 ]
- >>849
理屈じゃ分かっちゃいたんだけどねぇ。まさかここまで遅いとは・・・。 >>850 並列化は諦めるしかないのかねぇ。
- 852 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 00:31:00.86 ]
- ファイルを読むスレッド(1つだけ)とMD5の計算他をするスレッドを分けるとか?
CPU時間がどっちかに偏ってたらだめかもしれませんが。
- 853 名前:852 mailto:sage [2012/02/22(水) 00:34:57.35 ]
- って850さんが既に言ってますね。ファイルを読むスレッド1+それ以外の計算をするスレッド複数。
そしてディスクアクセスの時間>>計算の時間なら、ディスクが物理的に1つしかない以上は並列化は無理かと。
- 854 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 00:49:03.05 ]
- >>852
それが微妙なんだよね。 MD5の計算って一般的に順序依存があるから、 1つ前に計算した計算結果が無いと、 次の計算が始められないんだよ。 そんなんもんで、ファイル別なら順序依存が無いから とりあえず、1スレッド1ファイル処理にしてたんだけど。 実は、ディスクアクセスというよりMD5の 順序依存が一番足引っ張ってんのかもね。 あと、MD5の計算時間だけど読み込みの10倍遅いよ。
- 855 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 00:57:48.08 ]
- >>854
〜かもね、とかの妄想に付き合うのは疲れるから、調べてから書けよ
- 856 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 01:17:35.11 ]
- >>855
調べるつってもなぁ。発想の問題じゃない? これ以上調べられることあるかい?
- 857 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 01:18:33.05 ]
- 頼むから喧嘩はやめてくれよな
- 858 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 01:18:41.54 ]
- > 順序依存が一番足引っ張ってんのかもね。
を明らかにすればいいじゃない
- 859 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 01:24:03.16 ]
- >あと、MD5の計算時間だけど読み込みの10倍遅いよ。
あれ?それならいけるんじゃない? 仮に11コアのCPUがあったとして、 1コア目→ディスクから10個のファイルを読み出してメモリに吐く 2〜11コア目→1コア1ファイル分担当で計算 って形で10コアまでスケールするはずだと思うんだけど。コアはスレッドと読み替えてもok。
- 860 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 01:33:14.66 ]
- >>859
ロード時間L, MD5計算時間Mとすると(L=10M) 馬鹿正直にやったら10(L+M) = 110M お前のやり方だと10L+M = 101M どこがスケールしてるんだ? ついでに2スレッドでも101Mは出ると思う
- 861 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 01:34:10.53 ]
- >>860
ごめんどっちが遅いのか勘違いした 吊ってくるわ
- 862 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 01:39:04.31 ]
- >>854
計算が10倍遅いなら、シングルリーダスレッドでも十分にペイする。 ただ、机上で計算すればあんたの実測値なら3並列と4並列に分かれ目がある。 ファイル一件の読み込みを1、比較するってことなんでサイズは全ファイル ほぼそろってるとして、4対象の場合のそれぞれの最長パスは 1リーダ+4計算スレッド: 4+10 = 14 全部で1スレッド: 1*4+10*4 = 44 4(リーダ+計算)スレッド:1*(100/30)+10 = 13.33 (100MB/sが4スレで30MB/sになったから) まあ実測すると他のプロセスとかとの兼ね合いでまた変わるだろうけど、 多分安定度で言えばシングルリーダスレッド+N計算スレッドじゃないかなあ。 OSのページキャッシュに乗っている事が期待できる状況ならまた別だけど。
- 863 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 01:42:35.74 ]
- >>858
ディスクアクセスの改善が無理ならMD5の 順序依存を直すしか無いと言えるんだけど。 もう本当に打つ手がないか意見が聞けないとなんとも。 >>859 確かにね。最終的にはそれが一番効率がいいのかなとも 思うんだけど、ただその方法は計算するファイルは1ファイルまるごと 読み込まないといけないんだよね。 そこがちょっともっといい方法が無いかと引っかかるよ。
- 864 名前:859 mailto:sage [2012/02/22(水) 01:45:16.15 ]
- 861が俺のレスみたいに見えるので一応自己弁護しておこうw
ロード時間L, MD5計算時間Mとすると10L=M シングルスレッド→10(L+M)=110L 11コアによるマルチスレッド→10L+M=10.1L とほぼ11倍の性能ということで理屈上スケールはするはずだ、と。もう寝るおやすみ〜
- 865 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 01:46:07.56 ]
- >>862
机上の計算の計算式がイミフなんだが
- 866 名前:860 mailto:sage [2012/02/22(水) 01:47:47.73 ]
- >>864
うんごめん そのとおり
- 867 名前:859 mailto:sage [2012/02/22(水) 01:49:07.58 ]
- 俺のアホー
マルチスレッドは10L+M=20Lだ。効率は50%弱か。今度こそおやすみー
- 868 名前:862 mailto:sage [2012/02/22(水) 02:01:42.37 ]
- 見直すといろいろあれだったので気にしないでw
- 869 名前: ◆0uxK91AxII mailto:sage [2012/02/22(水) 15:13:40.47 ]
- thread一つ、非同期読込と計算を交互に行う。
- 870 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 17:09:49.10 ]
- 読み込み時間がクリティカルなんだから
読み込みスレッドが他の作業をしたらダメなんじゃないの?
- 871 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 19:17:39.81 ]
- HDD一個に複数からアクセスすれば、パフォーマンス低下するのが当然じゃあ
- 872 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 20:04:50.74 ]
- SSDなら実測値が結構改善するんかね
大して普及してないから宛にならんけど
- 873 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 00:31:39.79 ]
- スレッド制御に頭使いすぎてI/Oウエイトによる遅延完全に無視してない?
- 874 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 00:40:50.43 ]
- >>872
普及はどこから出てきた
- 875 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 01:04:22.28 ]
- >>874
SSDから。
- 876 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 01:07:07.00 ]
- いやだから。
SSDがとんだけ普及してるか、は実測値に影響する項なのか?ってことだろ
- 877 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 01:23:30.75 ]
- 普及してるかどうかは実測値には影響しないよ。
SSD上での実測値改善が見られるとありがたいけど、 世の中SSD搭載してないPCも多いから、 SSDだけで速くなるプログラムはよくないよねって話しだし。
- 878 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 01:25:38.17 ]
- そっちかよ
自分とこの環境で動かすんじゃないのか
- 879 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 01:49:14.20 ]
- 自作のハッシュ計算ツールだけど、MD5計算速度はキャッシュに乗ってる状態だと
3GHz弱のCore2Duo程度のCPUでも300MB/sは超えてるぞ。 計算のが十倍遅いってどういうことだ? HDDなんて速くても100MB/s題だと思うが…
- 880 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 01:57:30.10 ]
- スレッド構成を書いてもらわないとなんとも言えないなぁ
単にシングルスレッドなら100MB/s超えるしね
- 881 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 01:59:55.78 ]
- >>879
読み込み時間を差し引いた計算時間はどれぐらいだったの?
- 882 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 02:05:32.93 ]
- >>879
300MB/sってのは、MD5の関数なりクラスなりが1秒間に 計算できた情報量という理解であってる?
- 883 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 02:07:57.39 ]
- 読み込みと計算は別スレッドで同時にやってるから正確には分からんな。
まあいろいろ状況によって時間が変わるけど、計算だけなら最速時で400MB/sくらいだった希ガス。 ああもちろん、読み込みやってもキャッシュに乗ってたら最速だとほぼ同じくらいまで行くよ。
- 884 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 02:31:42.72 ]
- 純粋な計算速度が負けるってのは構成が gcc+linux+Phenom X4 1.8Ghz だからなのかねぇ
- 885 名前:デフォルトの名無しさん [2012/02/25(土) 14:26:44.01 ]
- ちょっとスレッドとは違うかもしれないんだけど
メッセージキューを設計しています シグナルハンドラからキューに積みたいんですが どうしても排他制御ができません うまい方法はありますでしょうか
- 886 名前:885 mailto:sage [2012/02/25(土) 14:28:07.28 ]
- 自己解決しました
- 887 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 00:27:52.96 ]
- C# の.NET4.0なんですけど
List<Double> hoge は適当な値が入っているとして Parallel.For(0,hoge.Count,(val)=> { hoge[val] = 0.0; }); とした場合、常にhogeの中身が全て0.0になりますか? この処理はLockしなくても大丈夫のような気がするんですが少し心配です。
- 888 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 00:38:36.19 ]
- MSの今のList<T>の実装では問題ないはずだけど保証されているわけではない
でもそれデリゲート呼び出しのコストがかさむから普通にループ回したほうが速いだろ 並列でやるんなら、4コアなら領域を4分割して中でループ回したほうがいい
- 889 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 00:46:40.99 ]
- つまり、>>887を
Parallel.Invoke(()=> { for(int i = 0;hoge.Count/4;i++) { hoge[i] = 0.0; } }, ()=> { for(int i = hoge.Count/4;(hoge.Count/4)*2;i++) { hoge[i] = 0.0; } } ・・・(以下略) とした方が良いということですか?
- 890 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 00:47:12.66 ]
- 訂正
読み取りだけならスレッドセーフだと書いてあるな
- 891 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 12:48:47.15 ]
- いくつかstatic変数があって、それぞれに書き込み続ける
スレッドを作ったのですが、コンテキストスイッチが発生 しまくってます(2000〜3000/秒) int a, b, c; DWORD __stdcall A(void*){ a = ... } DWORD __stdcall B(void*){ b = ... } DWORD __stdcall C(void*){ c = ... } それぞれのスレッドを単独で実行させた場合は、それほど スイッチしないので、キャッシュ競合が原因なんでしょうか。 それぞれの変数が同じキャッシュラインに乗らないようにするには どうすれば良いですか? それともキャッシュは関係ないですか? VC10です。
- 892 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 21:27:49.37 ]
- なんでキャッシュでコンテキストスイッチが起こるのよ…
- 893 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 22:05:31.00 ]
- >>891
コンテキストスイッチは関係ない。 >それぞれの変数が同じキャッシュラインに乗らないようにするには キャッシュは8〜32バイトぐらいの単位で管理しているから、 適当に無駄なメモリを確保して、それぞれのメモリアドレスが 隣接しないようにすればよい。
- 894 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 22:19:38.86 ]
- >それぞれのスレッドを単独で実行させた場合
はああ?
- 895 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 00:23:04.48 ]
- メモリバリアの間違い?
|

|