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】 【言語】 【実行環境】 【その他特記する事項】
676 名前:デフォルトの名無しさん mailto:sage [2011/09/15(木) 12:08:07.35 ] >>674 だから最初からCLR2のメモリモデルではと言っとろうに
677 名前:デフォルトの名無しさん mailto:sage [2011/09/15(木) 12:13:29.95 ] >>675 どこを誤読してるのか明確に指摘してくれ。 ttp://msdn.microsoft.com/ja-jp/magazine/ee532386.aspx 正確には全く同じ話ではないが、結論は同じことになる話が出てる。 まあMSDNマガジンの例の方がより無茶な話も出てるけど。
678 名前:デフォルトの名無しさん mailto:sage [2011/09/15(木) 12:18:55.76 ] C# よく分かんないけど、変数をまとめたクラス class Vars { int a, b, c, ...; static Vars instance; } があって、更新側 Vars v = new Vars(); v.a = aaa; // 1 v.b = bbb; // 2 v.c = ccc; // 3 ... Vars.instance = v; // 4 これで 1 〜 3 の順番が入れ替わるのは許せるけど、 1 〜 3 と 4 の順番が入れ替わるのってありなの? まじ???
679 名前:678 mailto:sage [2011/09/15(木) 12:21:02.84 ] 続き。volatile の必要性については、参照側 int prevA = 0; while (true) { Vars v = Vars.instance; if (v.a != prevA) { doSomething(v); prevA = v.a; } } とすると、参照側の Vars.instance のアクセスがキャッシュされるから、 Vars.instance は volatile じゃないと駄目ってことでしょ。 Vars.instance を直接アクセスせずに getter を介してれば volatile は不要、かな?
680 名前:デフォルトの名無しさん mailto:sage [2011/09/15(木) 12:32:34.08 ] >>679 不要。 読み取りを削除出来るのは、同一ロケーションからの隣接した読み取りのみ。 よって読み取りが削除されることはない。
681 名前:デフォルトの名無しさん mailto:sage [2011/09/15(木) 12:34:46.76 ] >>678 ECMAのメモリモデルではあり得るが、 CLR2のメモリモデルでは起こらない。
682 名前:デフォルトの名無しさん mailto:sage [2011/09/15(木) 12:57:20.42 ] >>680 おっと、もう少し正確には、読み取りが丸ごと無くなってしまうような事はない。
683 名前:デフォルトの名無しさん mailto:sage [2011/09/15(木) 21:05:03.01 ] どうでもええけどえらそーに言ってたやつらが急に黙りこくってて笑えるぞ
684 名前:デフォルトの名無しさん mailto:sage [2011/09/19(月) 02:54:28.89 ] >>677 それって、Xbox360のXNAとかWindowsPhoneとかでも同じなのかな。 IA-64版のメモリモデルをx86版とほぼ同じになるように修正したのは ビジネス的な判断としてはアリかもしれんが、 PowerPCやarmでも同じようにするのはオーバーヘッドが大きすぎると思うんだが。
685 名前:デフォルトの名無しさん mailto:sage [2011/09/19(月) 10:38:04.13 ] 実行環境(.NET Framework)の話とC#などの言語の話がごっちゃになってる気がする。 .NET Frameworkのモデルでは書き込み順が入れ替わることはないが、 その前のコンパイラの段階で x = 1; y = 2;が逆転することはある。
686 名前:デフォルトの名無しさん mailto:sage [2011/09/19(月) 11:50:25.42 ] ねーよ。 何のために変わるんだよ。
687 名前:デフォルトの名無しさん mailto:sage [2011/09/19(月) 16:23:59.39 ] まあCLRのメモリモデルを頼りにしたければ、MSILで書けってこった。
688 名前:デフォルトの名無しさん mailto:sage [2011/09/19(月) 17:16:22.88 ] メモリモデルに反するコンパイルを行うコンパイラがどこにあんだよ。
689 名前:デフォルトの名無しさん mailto:sage [2011/09/19(月) 18:54:18.85 ] \ここにいるぞ!/
690 名前:デフォルトの名無しさん mailto:sage [2011/09/19(月) 19:10:50.21 ] ヒュー!
691 名前:デフォルトの名無しさん mailto:sage [2011/09/19(月) 19:37:52.18 ] ハンドコンパイラ、自由にコードを作成できる
692 名前:デフォルトの名無しさん mailto:sage [2011/09/19(月) 20:11:33.77 ] 最近のコンパイラは最適化もしなくなったのか
693 名前:デフォルトの名無しさん mailto:sage [2011/09/19(月) 21:18:28.10 ] 「最適化」を「何でもアリ」と勘違いしているヒトが居る模様
694 名前:デフォルトの名無しさん mailto:sage [2011/09/19(月) 21:29:41.61 ] 実際問題、最近のマルチスレッドを前提とした中間言語処理系では、 昔みたいな静的コンパイル時の大胆な最適化は行わない。 というか、実行環境のCPUが想定できないので、あまり意味もない。
695 名前:デフォルトの名無しさん mailto:sage [2011/09/19(月) 21:36:40.42 ] もっとも、可能性で言えばECMA仕様準拠のコンパイラならありえなくはない。 MSのコンパイラならあり得ない。 でも多分、ECMA仕様準拠のコンパイラでもそんなことはやらない気がする。
696 名前:デフォルトの名無しさん mailto:sage [2011/09/19(月) 22:14:25.39 ] それこそ言語仕様次第でしょ。 たとえばCプログラムが、逐次一貫性メモリモデルに沿ったプロセッサで動く実行コードに コンパイルされるとして、じゃあ何が保証されるかというとCの言語仕様の範囲内でしかない。 書き込み順を入れ替えても、Cコンパイラとしては正しい。
697 名前:デフォルトの名無しさん mailto:sage [2011/09/19(月) 23:26:17.69 ] だから最初から特定の処理系の話だよね。
698 名前:デフォルトの名無しさん mailto:sage [2011/09/19(月) 23:29:00.91 ] そして言語仕様だけでは定義されてない範囲ってものがある。 C言語仕様だけじゃマルチスレッドにおいて何もできない。
699 名前:デフォルトの名無しさん mailto:sage [2011/09/20(火) 00:11:35.17 ] 結局、>678の質問の答えはどうなん? CLRの仕様から答えは決まるのか、 それともC#も仕様で決まるのか?
700 名前:デフォルトの名無しさん mailto:sage [2011/09/20(火) 00:14:14.83 ] >699 >698が言ってる通り、C#の仕様では1-4の実行順序は規定されていない。 よって、リオーダーは起こりうる。
701 名前:デフォルトの名無しさん mailto:sage [2011/09/20(火) 00:41:04.58 ] C/C++の仕様だと、;等のシーケンスポイントの前後での入れ替えは 起こらないことが規定されてるけどな。 機械語の書き込み順が、現れた順番で行われるかどうか、という点には 何も規定されていない。JVMやCLR等はそういう点にも言及されていると。
702 名前:デフォルトの名無しさん mailto:sage [2011/09/20(火) 00:55:54.52 ] それはCプログラムの意味(抽象機械上での振る舞い)定義でしかないよ。 意味が変わらなければ入れ替えは許される。 (そうでないと、ループ不変式移動すらできない) 問題は、Cプログラムの意味定義は実行の流れがひとつという前提でなされていること。
703 名前:デフォルトの名無しさん mailto:sage [2011/09/20(火) 00:58:37.26 ] ついでに機械語命令の実行順は、プロセッサの仕様で規定されている。 もちろん未規定な部分もあるけどね。
704 名前:デフォルトの名無しさん mailto:sage [2011/09/20(火) 01:14:32.80 ] ???
705 名前:デフォルトの名無しさん mailto:sage [2011/09/20(火) 01:18:24.02 ] >問題は、Cプログラムの意味定義は実行の流れがひとつという前提でなされていること。 C#の言語仕様では、別スレッド等ではなく突然実行が複数になったり入れ替わったりすることを許しているわけ? >ついでに機械語命令の実行順は、プロセッサの仕様で規定されている。 CLRでは規定されてないとでも?
706 名前:デフォルトの名無しさん mailto:sage [2011/09/20(火) 01:26:01.83 ] さっきから暴れてる方、 >>698が言ってる通り、C#の仕様では1-4の実行順序は規定されていない。 や >意味が変わらなければ入れ替えは許される。 の出展を示してくれませんかね。 それぞれ、C#の言語仕様とCの言語仕様の、どの部分で言及されているのか。 でなければ、ただの脳内妄想と区別がつきませんので。
707 名前:デフォルトの名無しさん mailto:sage [2011/09/20(火) 01:48:51.52 ] その通りだと思うが出典だぞ
708 名前:デフォルトの名無しさん mailto:sage [2011/09/20(火) 02:28:18.91 ] C#言語仕様の範囲では、 C#言語仕様の 3.10 実行順序 および 10.5.3 Volatile フィールド で規定されてる。 でMSの.NET Frameworkの実装としては、何度か出てるCLRの仕様に則っている。
709 名前:デフォルトの名無しさん mailto:sage [2011/09/20(火) 08:38:12.37 ] コンパイラが実行順序かえたら駄目だろ
710 名前:708 mailto:sage [2011/09/20(火) 09:28:06.57 ] 念のため、俺は>>700 ではない。
711 名前:デフォルトの名無しさん mailto:sage [2011/09/20(火) 09:28:42.41 ] レベルひくっ
712 名前:デフォルトの名無しさん mailto:sage [2011/09/20(火) 10:22:38.97 ] ○____ .|| | .|| ● | .|| | .|| ̄ ̄ ̄ ̄ .|| 君が代は ∧__,,∧|| 千代に八千代に ( `・ω・|| さざれ石の巌となりて ヽ つ0 こけのむすまで し―-J
713 名前:デフォルトの名無しさん mailto:sage [2011/09/23(金) 11:34:40.79 ] >>708 C#言語仕様もCLRの仕様も、またECMAのCLI仕様においても、 全部「命令のリオーダーが許されるか否か」の視点でしか 記述されてないんだよね。 例えばCLR2.0においては、同一スレッド内の書き込みの順序は 入れ替えられないとされてるようだけど、実行環境がx86であれば それは単に「コンパイラがプログラムを機械語に落としこむときに 書き込み命令の発行順を入れ替えない」とするだけで実現可能。 x86 CPUのメモリモデルは非常に強いので、アウトオブオーダー実行などによって、 ある書き込みが先行する書き込みより先にglobally visibleになることは認められていない。
714 名前:713 mailto:sage [2011/09/23(金) 11:35:46.25 ] でも、PowerPCやarmでは事情が違ってくる。 これらのCPUのメモリモデルはx86よりもずっと緩いので、 単に「コンパイラが書き込みの順序を入れ替えない」とするだけだと、 CPUによるリオーダーによって「他スレッドからは書き込み順が 入れ替わったように見える」ことが起こりうる。 一方で、このようなCPUによるリオーダーまでも防ごうとすると、 ほとんどの書き込み命令の間にメモリバリア命令を挟まなきゃ ならなくなる。当然、パフォーマンスの低下はとてつもない。 .NETのメモリモデルって、x86のことしか考えてないように見えるんだよね。 JavaやC++11のメモリモデルは、そういう「リオーダー禁止」とかの 直接的視点ではなく、もっとメタなレベルで「ある書き込みが ある読み込みからはvisibleか否か」を定義してるので、 x86以外のアーキテクチャでも実装しやすくなっている。 今後、マルチコアなWindowsPhoneが出てきたときに いろいろ酷いことになったりしなきゃいいが。
715 名前:デフォルトの名無しさん mailto:sage [2011/09/23(金) 18:44:38.36 ] 実際にitanium版とかあるわけで、実用上なんとかなるレベルだったんじゃないの?
716 名前:デフォルトの名無しさん mailto:sage [2011/09/23(金) 18:48:00.72 ] あとCLIとかのメモリモデルもリオーダはメモリの可視性を含めた話だよ。 キャッシュの影響で、実質的に順序が変わったように見える話とかも出てきてるんだから。 特にECMAの仕様はかなりjavaに近いと思うが。 ていうかほとんどjavaと変わらんような。
717 名前:デフォルトの名無しさん mailto:sage [2011/09/23(金) 18:52:07.56 ] 書き込み毎にメモリバリアいるんじゃないかってのは俺も疑問無くはないんだけど、 多くのCPUではこのルールを守るのは大してペナルティはないというのも読んだことがあって、 実際のとこはよく分からない。
718 名前:デフォルトの名無しさん mailto:sage [2011/09/23(金) 18:54:03.30 ] 何が言いたいのかわからんなあ
719 名前:! 【14m】 【東電 66.0 %】 mailto:sage [2011/09/23(金) 18:58:34.31 ] ペリフェラルいじるときは エイエイオー しまくりだ
720 名前: ◆0uxK91AxII mailto:sage [2011/09/23(金) 20:02:20.23 ] CLRなんて作らないから、どうでも良い。
721 名前:デフォルトの名無しさん mailto:sage [2011/09/23(金) 22:55:12.81 ] >>715 Itaniumで.NETアプリを動かすのって、基本的には x86のWindowsサーバー上のアプリをそのまま持っていきたい ってニーズがほとんどだろうから、その場合はパフォーマンスより先に 互換性確保のほうが最大限に重視されるだろうね。
722 名前:デフォルトの名無しさん mailto:sage [2011/09/24(土) 03:15:05.37 ] C++0xとCLRとJavaのメモリモデルの違いとか考えたこともない話だわ マルチスレッドに詳しいひとは普段どんな仕事してるんだろ
723 名前:デフォルトの名無しさん mailto:sage [2011/09/24(土) 10:21:23.71 ] 排他に必要なメモリバリア類をライブラリだかCLRだかVMだかがやるんじゃないの。 そこを超えて踏み込む(=排他をケチる)とメモリモデルの違いが表面化するとか? 俺の持論:volatileで十分w
724 名前:デフォルトの名無しさん mailto:sage [2011/09/24(土) 11:58:45.66 ] volatileの言語仕様知らないだろw
725 名前:デフォルトの名無しさん mailto:sage [2011/09/24(土) 15:39:38.60 ] volatileを信用してると痛い目合うコンパイラもあるぞ
726 名前:デフォルトの名無しさん mailto:sage [2011/09/24(土) 15:56:04.66 ] 会う
727 名前:デフォルトの名無しさん mailto:sage [2011/09/24(土) 17:11:35.69 ] コンパイラからバールのような物が飛んでくるのですね
728 名前:デフォルトの名無しさん mailto:sage [2011/09/24(土) 17:55:34.09 ] perlのようなものか
729 名前:デフォルトの名無しさん mailto:sage [2011/09/24(土) 18:18:48.58 ] >>716 ECMA-335はvolatile変数についてrelease-acquireバリアは要求してるけど、 sequential consistencyは要求してないように見える。12.6.7には > a conforming implementation is not required to provide a single total ordering > of volatile writes as seen from all threads of execution. とも書いてるし。
730 名前:729 mailto:sage [2011/09/24(土) 18:20:59.69 ] >>716 だから、ECMA-335において、たとえば以下のようなコードでは volatile int a = 0; volatile int b = 0; Thread1: { a = 1; int r1 = b; } Thread2: { b = 1; int r2 = a; } r1 == 0 && r2 == 0 という結果も許されるんじゃないかな。 一方で、JavaのvolatileやC++11のstd::atomicはこういう結果を許さない。
731 名前:デフォルトの名無しさん [2011/09/24(土) 19:22:11.48 ] .NETではInterlocked使うんだよ
732 名前:デフォルトの名無しさん mailto:sage [2011/09/24(土) 20:10:49.35 ] メモリバリアとアクセス競合ごっちゃになってないか?
733 名前:デフォルトの名無しさん mailto:sage [2011/09/25(日) 00:03:40.81 ] javaってこれのせいでvolatile遅いんじゃねーの?
734 名前:デフォルトの名無しさん [2011/09/25(日) 00:21:16.82 ] Javaって誕生当初はロックのコストが無視できるくらいVM遅かったの? コレクションが全部同期とか頭おかしいよね
735 名前:デフォルトの名無しさん [2011/09/25(日) 00:25:40.60 ] 遅かった
736 名前:デフォルトの名無しさん mailto:sage [2011/09/25(日) 01:33:01.66 ] 複数リクエストが並行してバンバン来るservletやjspがその上で動いてたもんだから大変
737 名前:デフォルトの名無しさん mailto:sage [2011/09/25(日) 13:00:47.00 ] >>734 まさにそのとおり
738 名前:デフォルトの名無しさん mailto:sage [2011/10/04(火) 11:57:09.05 ] ハードディスクが一つしかない環境だと ファイルアクセススレッドを何本走らせても結局ハードディスクにアクセスしてるのは常に一つだから 二本目以後は意味ないですか?
739 名前:デフォルトの名無しさん mailto:sage [2011/10/04(火) 13:08:54.15 ] そんなことはない。
740 名前:デフォルトの名無しさん mailto:sage [2011/10/04(火) 15:42:40.84 ] シークが増えて、余計に遅くなるという意味なら有る
741 名前:デフォルトの名無しさん mailto:sage [2011/10/04(火) 18:03:27.80 ] CPUから見ればI/Oは超遅いから無意味、と予想するけど OSやHDDのキャッシュでかなり違うのかもしれない 結局環境依存だしやってみて実測するしかないっていうね
742 名前:デフォルトの名無しさん mailto:sage [2011/10/04(火) 20:06:08.63 ] >>738 >>740 シークを待っている間に別の処理を行える事で、 早くなる可能性もある。どっちに転ぶかは仕様 次第なんで、それだけの話じゃわからない。 確実に言えるのは「早くなる場合と、遅くなる場合と、変わらない場合がある」って事だけだ。
743 名前:デフォルトの名無しさん mailto:sage [2011/10/04(火) 20:49:34.91 ] S-ATAて仕様上はコマンド並び替えとかでシーク減るとか無かったけ?
744 名前:デフォルトの名無しさん mailto:sage [2011/10/05(水) 10:48:57.34 ] 期待するだけ空しい
745 名前:! 【13.8m】 【東電 78.9 %】 mailto:sage [2011/10/09(日) 21:31:08.21 ] NCQをまともに機能させるのは大変なことだお( ^ω^)
746 名前:デフォルトの名無しさん mailto:sage [2011/10/10(月) 06:46:41.34 ] FFのリークが酷過ぎ
747 名前:デフォルトの名無しさん mailto:sage [2011/10/19(水) 08:42:15.18 ] メモリバリアとか難しすぎて頭おかしくなりそう atomic_int a = 0, b = 0; //thread1 a.store_acquire(1); int x = b.load_release(); //thread2 b.store_acquire(1); int y = a.load_release(); これでx == 0 && y == 0が真になることがあるという話なんだけど頭の中でどう考えてもならない いったいどういうカラクリでx,yが同時に0になるの?
748 名前:デフォルトの名無しさん mailto:sage [2011/10/19(水) 09:23:38.50 ] >>747 正しくはstore_releaseとload_acquireね。 store & acquire とか、load & release とかいう組み合わせはない。
749 名前:デフォルトの名無しさん mailto:sage [2011/10/19(水) 13:56:45.85 ] >>747 他のスレッドに値が反映されるまでラグがあると考えればいいよ
750 名前:デフォルトの名無しさん mailto:sage [2011/10/22(土) 16:08:33.08 ] >>747 atomic_int a = 0, b = 0; //thread1 a.store_release(1); int x = b.load_acquire(); //thread2 b.store_release(1); int y = a.load_acquire(); だとすると、 load_acquire()はstore_release()の前に移動できる。
751 名前:デフォルトの名無しさん mailto:sage [2011/10/22(土) 21:42:35.60 ] そういやなんで皆ロックの速さに拘るの? スレッド全体の処理量に対してロックが必要なのは極僅かでしょ。
752 名前:デフォルトの名無しさん mailto:sage [2011/10/22(土) 21:55:02.53 ] いやロックの話じゃなくてアトミック操作の話
753 名前:デフォルトの名無しさん mailto:sage [2011/10/22(土) 22:55:15.90 ] 排他ロックしたら負け
754 名前:デフォルトの名無しさん mailto:sage [2011/10/23(日) 09:19:45.48 ] volatileで十分w
755 名前:デフォルトの名無しさん mailto:sage [2011/10/23(日) 09:26:02.86 ] >>754 解雇
756 名前:デフォルトの名無しさん mailto:sage [2011/10/23(日) 14:57:53.13 ] volatileでどんなコード吐くかみんとハマるよ
757 名前:デフォルトの名無しさん mailto:sage [2011/10/23(日) 15:13:30.40 ] javaやC#ならvolatileで充分だろうな。 CとC++のvolatileは別もんだから役に立たん。 詳しくはC++11スレを見てこい。
758 名前:デフォルトの名無しさん mailto:sage [2011/10/23(日) 15:22:42.74 ] volatileかmutexかなんてのはこっちでする話だろうに なんであのスレでしつこく長引いてたんだか
759 名前:デフォルトの名無しさん mailto:sage [2011/10/23(日) 16:16:29.85 ] >>758 言語仕様読まないバカが粘着したせい
760 名前:デフォルトの名無しさん mailto:sage [2011/10/23(日) 19:18:18.55 ] C/C++のvolatileはvolatileで目的があって用意されたものだがマルチスレッドと直接関係はない低水準機能で、 使う場合もあれば使わない場合もあると。 volatile std::atomic<T>はJavaのvolatileとほぼ同じ意味だそうだが。
761 名前:デフォルトの名無しさん mailto:sage [2011/10/23(日) 19:28:17.70 ] コンパイラによる静的な省略や並び替えは抑制できるけど CPUが実行時に行う最適化には関与しないから無意味
762 名前:デフォルトの名無しさん mailto:sage [2011/10/23(日) 21:37:00.66 ] はあ?
763 名前:デフォルトの名無しさん mailto:sage [2011/10/23(日) 21:58:56.17 ] >>762 少しは勉強しろ
764 名前:デフォルトの名無しさん mailto:sage [2011/10/23(日) 22:06:44.84 ] >>750 atomic_int a = 0, b = 0; //thread1 a.store_release(1); int v = a.load_acquire(); int x = b.load_acquire(); //thread2 b.store_release(1); int w = b.load_acquire(); int y = a.load_acquire(); のときでも x == 0 && y == 0 はありうる?
765 名前:デフォルトの名無しさん mailto:sage [2011/10/23(日) 22:06:59.86 ] 意味不明なこと言ってるのがわかってないの?
766 名前:デフォルトの名無しさん mailto:sage [2011/10/23(日) 22:07:49.18 ] >>765 自己レス?
767 名前:デフォルトの名無しさん mailto:sage [2011/10/23(日) 22:09:36.03 ] >>764 //thread1 int v = a.load_acquire(); int x = b.load_acquire(); a.store_release(1); //thread2 int w = b.load_acquire(); int y = a.load_acquire(); b.store_release(1); リオーダーされてこうなったら全部0
768 名前:デフォルトの名無しさん mailto:sage [2011/10/23(日) 22:11:32.64 ] >>767 てきとーなこと書くなよ
769 名前:768 mailto:sage [2011/10/23(日) 22:24:48.00 ] >>767 すまん勘違いしてた。同じa同士のloadとstoreはひっくり返るはずが無いと思ったが実際の動作ならそうなりえるよね。
770 名前:デフォルトの名無しさん mailto:sage [2011/10/23(日) 23:05:40.90 ] >>760 それvolatile無くてもJavaのvolatileと同じ。 volatile変数としてatomicを使えるようになってるだけで、 特別扱いはない。
771 名前:デフォルトの名無しさん mailto:sage [2011/10/23(日) 23:19:22.09 ] >>767 ,769 同じスレッド上でのリオーダーの話と別のスレッドから見たときの順序の話がごちゃ混ぜになってないか? a.store_release(1); int v = a.load_acquire();//a.store_releaseとa.load_acquireは同じオブジェクトなのでリオーダーできない。 int x = b.load_acquire();//その結果b.load_acquireも上に移動できない。 しかしながらseq_cstじゃ無いので他のスレッドから見たときの順序が保障されないので x == 0 && y == 0 はありうる これでいいんじゃね?
772 名前:デフォルトの名無しさん mailto:sage [2011/10/23(日) 23:32:07.62 ] そのコードで会話が成立してるところが凄いかも
773 名前:デフォルトの名無しさん mailto:sage [2011/10/24(月) 00:06:26.80 ] いまから一生懸命C++11での質問してる人がいるけど、 まともに使えるコンパイラでてんの? メモリバリアとかよくわかんないなら、 今使えるライブラリを動かして勉強した方が早いんとちゃう? 3年後11に本腰入れたって出遅れはしないだろ。
774 名前:デフォルトの名無しさん mailto:sage [2011/10/24(月) 00:09:00.47 ] 3年後には次の規格が出てるよ
775 名前:デフォルトの名無しさん mailto:sage [2011/10/24(月) 00:19:19.45 ] >>738 なみの処理じゃ、IOの影響がでかすぎて、 速度の優劣はIO次第になるな。 例えば、1600個の画像からMD5を採ったとき、 IO状態次第で0.7秒から、1分40秒もの差がでる。 恐らく前者はキャッシュ効果だろう。 スレッドを4本でスレッドプール使って計算したが、 確かに計算は速いものの、結局IOがもたつくとどうしようもなく遅い。
776 名前:デフォルトの名無しさん mailto:sage [2011/10/24(月) 00:20:20.50 ] >>774 03から11の間に規格あったっけ?