1 名前:デフォルトの名無しさん [04/11/16 23:45:50] www.go-mono.com/ 前スレ pc5.2ch.net/test/read.cgi/tech/1020215602/
808 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 13:16:34 ] >>807 Vistaだとカレント(プログラムのあるディレクトリ)に書こうとすると変なことろに飛ばされるじゃん。
809 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 13:18:11 ] あちこちのファイルし操作してるとカレントに頼れないからな 書き込めない場会も多いし
810 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 23:56:42 ] 確かに環境変数とかってなんも設定されてないな。/tmp決め打ちでいいかと。
811 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 00:44:13 ] そしてWindowsユーザーが「勝手にtmpとかディレクトリ掘られててわろた」 とかスレたてするんですね。
812 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 01:00:31 ] mono製のクロスプラットフォームで動くアプリを数本書いてるが、 何箇所かはEnvironment.OSVersionのPlatformIDで分岐させてるよ。
813 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 01:05:55 ] tempのフォルダ取得ぐらい、.NETなら標準で用意されてるじゃねーか。 それどころかtempファイルまで作ってくれるわ。
814 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 01:48:35 ] そもそもWindowsでもTEMPとTMPの環境変数はデフォルトでセットされてる。
815 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 18:55:10 ] IronPythonはMonoで動きますか?
816 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 19:08:14 ] IronPython1.0は動く。 IronPython2.0は今のところ未対応。 F#はばっちり動くよ
817 名前:デフォルトの名無しさん [2009/02/08(日) 22:47:44 ] 消しゴムの(MONO)を使って、東方を描いてみました。 初めての試みなので、ちょっと雑な部分もあるかも知れませんが^−^; page6.auctions.yahoo.co.jp/jp/auction/f76771677 page9.auctions.yahoo.co.jp/jp/auction/k108226196 page2.auctions.yahoo.co.jp/jp/auction/b94573580 page.auctions.yahoo.co.jp/jp/auction/115816594
818 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 23:27:46 ] サラしageは他の板でやってくれ
819 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 22:10:44 ] 以下のコードのRun()の実行時間が型によって全然違うんだが仕様? 環境はUbuntu上でMonoのバージョンは2.2 VC#でもコンパイルしてみたが,intもlongもあまり差は無かった class hoge{ static void Main(){ Run(new int[10000]); Run(new long[10000]); } static void Run<T>(T[] a){ Stopwatch sw=Stopwatch.StartNew(); for(int i=0;i<100;i++) Array.Reverse(a); sw.Stop(); Console.WriteLine("{0}: {1} s",typeof(T),sw.Elapsed.TotalSeconds); } } 実行結果 System.Int32: 0.0096311 s System.Int64: 2.4027608 s
820 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 22:48:21 ] そりゃx86上じゃ64bit整数はそのままじゃ扱えないからな
821 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 23:17:13 ] MONOの最適化はちょっと甘いことがある。
822 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 00:30:42 ] >>819 CPU何使ってんの? Core2とかだったらVC#は64bitレジスタを使用している可能性がある。 Monoだと32bitレジスタ2つ使って対応していると思うけど、 それにしても遅すぎだな。 その環境の最高性能を引き出すようにコンパイルされないと マネージコードの魅力が半減しちゃうな。 ちなみに、手元の環境だとこんな感じ。 System.Int32: 0.005742 s System.Int64: 0.9745676 s 少し差が縮まってるw
823 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 00:44:58 ] 64bitモードじゃないと64bitレジスタは使えない件について
824 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 00:47:17 ] Run(new long[10000]); Run(new int[10000]); の順で実行したらどうなるの?
825 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 00:55:03 ] Windows Vista Ultimate 32bit Q6600 System.Int32: 0.0009932 s System.Int64: 0.0031525 s int と long の実行順序を逆にしても変わらん
826 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 00:58:17 ] >>825 の環境で object も試してみた System.Int32: 0.0009384 s System.Int64: 0.0032696 s System.Object: 0.0066534 s 構造体って速いんだね
827 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 01:25:13 ] 誰か64bit環境でやってみて
828 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 01:46:36 ] >>819 の Run を Int32 と Int64 でそれぞれ5回ずつ走らせて平均を取った。 x86 Int32: 0.00093284 s Int64: 0.00314952 s x64 Int32: 0.00096868 s Int64: 0.00118714 s any Int32: 0.00097392 s Int64: 0.00118982 s
829 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 02:00:35 ] なるほど あとintだけ配列の要素数を2倍にするとどうなる?
830 名前:819 mailto:sage [2009/02/13(金) 02:06:17 ] >>822 CPUはCore Solo U1300(1.06GHz)だから、 64bitレジスタはないはず。 他の型の場合についても試してみたらこんな結果になった。 Monoはintとdoubleが速くて、それ以外が一様に遅い。 VC#は32bit以下と64bitで分かれてる。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8877.txt Array.Reverseの内部でboxingされてるとかいう理由な気がしてきた。 Monoではintとdoubleだけは例外的に最適化されたりするのかも。 実際にstatic void MyReverse<T>(T[] a)とか実装して走らせてみたら、 だいたいVC#の2倍くらいの実行時間になった。
831 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 02:07:10 ] >>823 そんなことない。レジスタサイズプリフィックス(?)をつければ 普通に使えるだろ。 64bitモードに移行すれば、プリフィックスがいらなくなる分 早くなるとかはある。 むかし、MS-DOSで386の32bitレジスタを使って高速化のテクとか 色々あったことを思い出した。
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