1 名前:デフォルトの名無しさん [04/11/16 23:45:50] www.go-mono.com/ 前スレ pc5.2ch.net/test/read.cgi/tech/1020215602/
832 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 02:09:59 ] >>831 残念ながらそんなことあるんだな。64bitが可能なのはlong modeという特殊なモードだべ。
833 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 02:18:51 ] >>832 あぅ、確かに64bitモードはかなり厳格になっている... 嘘ついてごめんちゃい
834 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 02:23:01 ] >>828 ってVC#の結果?
835 名前:819 mailto:sage [2009/02/13(金) 02:33:51 ] >>824 変わらなかった。 >>829 実行時間は単純に2倍になった。 参考になるかわからんが、Mono 1.2.6でも似たような結果だった。 (というより、元々は1.2.6を使っていて、こういう結果が出たから2.2に更新した)
836 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 02:42:46 ] >>835 なるほど サンクス
837 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 03:07:49 ] こんだけ単純なコードなら吐き出したCIL見比べた方が早いんじゃない?
838 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 03:30:55 ] ところがぎっちょん。 cscでコンパイルしたのをmonoで動かしても gmcsでコンパイルしたのをmsclrで動かしても同じ結果なのです。
839 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 04:59:31 ] // fsc -O test9f.fs / fscp -O test9f.fs #light open System.Diagnostics let rec reverse cnt ar = if cnt > 0 then (Array.rev ar |> reverse (cnt - 1)) else ar let Run ar = let sw = Stopwatch.StartNew() in let rt = reverse 100 ar in sw.Stop(); printfn "%A" sw.Elapsed; rt let _ = printfn "%A" (Run [| 0..10000 |]); printfn "%A" (Run [| 0L..10000L |]);;
840 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 05:00:39 ] F# (on mono 2.2)でやってみると 配列をコピーするのでその分時間がかかっているが、int64は結構速い。 00:00:00.0112015 (int32 00:00:00.0134897 (int64 >>819 の結果はこれ System.Int32: 00:00:00.0050849 s System.Int64: 00:00:01.3990044 s
841 名前:819 mailto:sage [2009/02/13(金) 13:27:13 ] >>837 ILは知識が無くてわからないけど、 >>838 の言うような結果になった。 gmcsでコンパイルしてmonoで実行=cscでコンパイルしてmonoで実行 gmcsでコンパイルしてmsclrで実行=cscでコンパイルしてmsclrで実行 ね。
842 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 17:05:23 ] つまり Array.Reverse の中の人の差か
843 名前:822 mailto:sage [2009/02/14(土) 23:18:34 ] >>842 が原因を解明してくれたんで、チラッと調べてみた。 ソースは mono-2.2/mcs/class/corlib/System/Array.cs で、 詳細は省くけど object int double 以外は、汎用的なやたら遅い Swapper というもので処理されてた。 当然 long が Swapper で処理されていたので、int と同じ処理 を追加したら以下の結果になった。 System.Int32: 0.0042768 s System.Int64: 0.0050798 s System.Int32: 0.0042583 s System.Int64: 0.0051871 s System.Int32: 0.0043195 s System.Int64: 0.0052207 s ソース見ればなんで遅いかは一目瞭然だけど、こういう処理は Generic を使うべきだろうなと痛感する。(List.Reverse か?)
844 名前:822 mailto:sage [2009/02/14(土) 23:40:01 ] 以下パッチ *** Array.cs.orig 2008-11-11 14:02:14.000000000 +0900 --- Array.cs 2009-02-14 22:40:01.000000000 +0900 *************** *** 1215,1220 **** --- 1215,1231 ---- } return; } + long[] larray = array as long[]; + if (larray != null) { + while (index < end) { + long tmp = larray [index]; + larray [index] = larray [end]; + larray [end] = tmp; + ++index; + --end; + } + return; + } double[] darray = array as double[]; if (darray != null) { while (index < end) {
845 名前:822 mailto:sage [2009/02/15(日) 00:44:07 ] 同じexeをVistaで実行したら System.Int32: 0.0007259 s System.Int64: 0.0025201 s だった・・・ 速度差はJITコンパイラ自体の速度差のような気がする。 JITコンパイラは、早いコードを生成する最適化も必要だけど 自分自身も高速に動かないといけないジレンマがあるよな。
846 名前:デフォルトの名無しさん mailto:sage [2009/02/15(日) 01:05:25 ] どうでもいいコード書くときはリストより配列の方が書くのめんどくさくなくて使ったもののあっれーおっそいなーとかってよくあるよねー俺だけですかーそうですよねー
847 名前:デフォルトの名無しさん mailto:sage [2009/02/15(日) 03:02:52 ] >>843-845 面白いネタだ サンクス
848 名前:デフォルトの名無しさん mailto:sage [2009/02/15(日) 10:16:53 ] 今後のために言っておくと、パッチの中身を2chにそのまま貼るのはやめたほうがいい 書き込むときの2chの同意画面に注意
849 名前:819 mailto:sage [2009/02/15(日) 23:57:39 ] >>843 自分でもArray.csを読んでみた。 なるほど、その3つの型以外では for(int l=0,r=array.Length;l<r;l++,r--){ object temp=array.GetValue(l); array.SetValue(array.GetValue(r),l); array.SetValue(temp,r); } みたいな実装になってるのか。そりゃ遅い訳だ 2.0以降はArray.Sort<T>(T[] array)があるみたいだから、 ついでにReverse<T>(T[] array)とかも追加されてたら良かったのにね
850 名前:819 mailto:sage [2009/02/16(月) 00:00:08 ] すまん、どうでもいいかもしれんが ×for(int l=0,r=array.Length;l<r;l++,r--) ○for(int l=0,r=array.Length-1;l<r;l++,r--) ね。
851 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 22:22:12 ] クラスライブラリ(dll)読み込まんのだけどなんでだろ。 ほかのサーバーでは同じディレクトリに入れとけばNPだったのに。 なんか必要なことあるんでしょうか?
852 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 00:19:56 ] なんかMONO足りないな・・・
853 名前:デフォルトの名無しさん [2009/02/27(金) 01:55:53 ] 2.4RC1が出たぞ。 * JIT o Metadata verifier * ASP.NET o 3.5 APIs (except for Linq support) o Precompiled Web Sites. * MonoDevelop 2.0 o Built-in GUI debugger てなってるが、バグフィックスリリースなんで面白みはない。
854 名前:アカツキ特戦隊 [2009/03/02(月) 10:23:06 ] 僕も頑張って、よい消しゴム作ったつもりです。 オークションで流してみたので、見ていってください^−^ page2.auctions.yahoo.co.jp/jp/auction/b97392083
855 名前:デフォルトの名無しさん mailto:sage [2009/03/13(金) 02:50:13 ] コンカレントGCは実装されないのかー?
856 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 08:06:13 ] blog.browncat.org/2007/12/mono.html わかるような気もする…
857 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 09:48:45 ] MONO消し ププッ・・・ククククッw