Cygwin + MinGW + GCC 相談室 Part 8 (988レス)
Cygwin + MinGW + GCC 相談室 Part 8 http://mevius.5ch.net/test/read.cgi/tech/1411399211/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
700: デフォルトの名無しさん [] 2020/05/02(土) 23:21:47.63 ID:nkPqW+JC MinGWっていうかGitBash環境なんだけど WSL1より2倍ぐらいシェルスクリプトが遅いんだよね どこが原因かわからんけどこんなもん? なにか大きな差がでるポイントでもあるんかね? http://mevius.5ch.net/test/read.cgi/tech/1411399211/700
701: デフォルトの名無しさん [sage] 2020/05/03(日) 03:37:53.54 ID:HUz+EFHq WSL1 (bash 4.4.20) だと $ time bash -c 'i=0; while [ $i -lt 1000000 ]; do : $((i+=1)); done' real 0m6.317s user 0m6.313s sys 0m0.000s MinGW64 (bash 4.4.23) だと $ time bash -c 'i=0; while [ $i -lt 1000000 ]; do : $((i+=1)); done' real 0m15.053s user 0m15.000s sys 0m0.030s Cygwin (bash 4.4.12) だと $ time bash -c 'i=0; while [ $i -lt 1000000 ]; do : $((i+=1)); done' real 0m13.897s user 0m13.858s sys 0m0.046s うーん、こんな単純なコードで2倍の差がでてるから もうこれはどうしようもないのか? http://mevius.5ch.net/test/read.cgi/tech/1411399211/701
702: デフォルトの名無しさん [sage] 2020/05/03(日) 04:04:18.44 ID:HUz+EFHq 比較とか計算が遅いのかと思ってやってみたけど この比率は変わらない WSL1 $ time bash -c 'for i in $(seq 1000000); do :; done' real 0m2.159s user 0m1.828s sys 0m0.359s Cygwin $ time bash -c 'for i in $(seq 1000000); do :; done' real 0m4.222s user 0m3.889s sys 0m0.341s MinGW64 $ time bash -c 'for i in $(seq 1000000); do :; done' real 0m4.821s user 0m4.342s sys 0m0.436s WSL1 → Cygwin(2倍ぐらい遅い)→MinGW(さらに10%遅い) こんな傾向がある。ファイルシステムは関係ないはず やってるのはCPUの処理だけなはずなんだけどなぁ http://mevius.5ch.net/test/read.cgi/tech/1411399211/702
703: デフォルトの名無しさん [sage] 2020/05/03(日) 05:18:19.65 ID:1PSoskYy 調べるとradeonのドライバを切れとか書いてあるけど… http://mevius.5ch.net/test/read.cgi/tech/1411399211/703
704: デフォルトの名無しさん [sage] 2020/05/03(日) 05:22:33.02 ID:HUz+EFHq >>703 使ってないよw http://mevius.5ch.net/test/read.cgi/tech/1411399211/704
705: デフォルトの名無しさん [sage] 2020/05/03(日) 05:24:47.68 ID:HUz+EFHq radeonの話は画面に出力が絡むなら 関係ありそうな気もするけど、それ以外でも発生するんだろうかね あとHOMEは MinGWは /c/Users/myname Cygwinは/home/mynameだ http://mevius.5ch.net/test/read.cgi/tech/1411399211/705
706: デフォルトの名無しさん [sage] 2020/05/03(日) 05:26:40.40 ID:HUz+EFHq よく見ると大きな差があるのはuser空間だから コンパイルオプションが違ってるとかなのかな? http://mevius.5ch.net/test/read.cgi/tech/1411399211/706
707: デフォルトの名無しさん [sage] 2020/05/03(日) 05:38:01.14 ID:1PSoskYy seq使うんじゃなくて{1..1000000}の方がいいかもね http://mevius.5ch.net/test/read.cgi/tech/1411399211/707
708: デフォルトの名無しさん [sage] 2020/05/03(日) 06:00:40.65 ID:HUz+EFHq >>707 つってもわずか一回だからなぁ。やってみてもいいけど WSL1 $ time bash -c 'for i in {1..1000000}; do :; done' real 0m1.710s user 0m1.547s sys 0m0.156s Cygwin $ time bash -c 'for i in {1..1000000}; do :; done' real 0m4.854s user 0m4.811s sys 0m0.108s MinGW64 $ time bash -c 'for i in {1..1000000}; do :; done' real 0m4.934s user 0m4.843s sys 0m0.109s あとあれから少しわかったのはMinGWは何回か繰り返せば Cygwinに迫るのでファイル読み込み?とかも少し関連してるんだと思う が2倍以上かかることに変わりはない cygwin.dll?とかが遅いのかもな。MinGWでも使ってるんじゃなかったっけ? http://mevius.5ch.net/test/read.cgi/tech/1411399211/708
709: デフォルトの名無しさん [sage] 2020/05/03(日) 07:25:18.35 ID:69WKUEPM >>708 を、WSL1, Ubuntu 18.04 で、3回やった。 8GB メモリ、CPU-i3・エコモード real 0m4.680s user 0m4.234s sys 0m0.453s http://mevius.5ch.net/test/read.cgi/tech/1411399211/709
710: デフォルトの名無しさん [sage] 2020/05/03(日) 07:38:38.22 ID:HUz+EFHq >>709 いや比較しないと意味ないだろw http://mevius.5ch.net/test/read.cgi/tech/1411399211/710
711: デフォルトの名無しさん [sage] 2020/05/03(日) 07:39:48.20 ID:HUz+EFHq ちなみに俺のはCPUはi7な Cygwin、MinGWを実行したら それの2倍かかるはず http://mevius.5ch.net/test/read.cgi/tech/1411399211/711
712: デフォルトの名無しさん [sage] 2020/05/03(日) 21:39:24.17 ID:ADBK+oPb cygwinはforkがヘボいから遅い MinGWといいつつmsysのbashやろ これもforkがcygwinゆずりだから遅い。 wslもfork遅いと思うけど。 virtual boxにwindowsファイルを共有させたものの方が実は速い。 純粋にwindowsとLinuxの環境を同居させたきゃ仮想PC Linuxでwindows binaryをクロスビルド、テストまでしたけりゃwsl http://mevius.5ch.net/test/read.cgi/tech/1411399211/712
713: デフォルトの名無しさん [sage] 2020/05/03(日) 21:47:49.28 ID:v0W4oGhj まあ名前解決のところと passwd/group の設定はしといた方がいいね http://mevius.5ch.net/test/read.cgi/tech/1411399211/713
714: デフォルトの名無しさん [sage] 2020/05/03(日) 23:40:13.01 ID:sXSeyux8 >>712 forkが遅いのはわかってるけど、 このコードでforkなんて大量にはしないだろ? time bash -c 'for i in {1..1000000}; do :; done' http://mevius.5ch.net/test/read.cgi/tech/1411399211/714
715: デフォルトの名無しさん [] 2020/05/04(月) 02:27:10.75 ID:R/PLl+Gn 元々、bash が、ループ向きではないから、dash などを使う for は遅いから、while などを使う。 実行時間中のほとんどが、フォークの時間 ループは、awk, perl, ruby などでは、0.1 秒も掛からない。 単一プロセス中の処理だから http://mevius.5ch.net/test/read.cgi/tech/1411399211/715
716: デフォルトの名無しさん [sage] 2020/05/04(月) 03:06:12.15 ID:szliIti6 あ、dashの結果書くの忘れてた。dashは速いから数を10倍にしてる 傾向は一緒。ただのループなのに2倍ぐらいの差が出てしまう WSL1 $ time dash -c 'for i in $(seq 10000000); do :; done' real 0m4.480s user 0m2.875s sys 0m2.047s Cygwin $ time dash -c 'for i in $(seq 10000000); do :; done' real 0m7.598s user 0m6.531s sys 0m1.296s MinGW64 $ time dash -c 'for i in $(seq 10000000); do :; done' real 0m7.905s user 0m6.905s sys 0m1.155s http://mevius.5ch.net/test/read.cgi/tech/1411399211/716
717: デフォルトの名無しさん [sage] 2020/05/04(月) 03:06:42.72 ID:szliIti6 >>715 どこでフォークしてるというの? http://mevius.5ch.net/test/read.cgi/tech/1411399211/717
718: デフォルトの名無しさん [sage] 2020/05/04(月) 03:16:08.18 ID:szliIti6 awkは更に速いから、更に10倍にしてる。これなら理解できるな。 CygwinとMinGW64がWSL1より少し遅いのは起動時のパフォーマンスの差だろう ってことはシェルスクリプトだと、なにか遅くなる処理をやってるってことか 整数型じゃないとか? WSL1 $ time awk 'BEGIN{i=0;for(i=0;i<100000000;i++);}' real 0m4.121s user 0m4.109s sys 0m0.016s Cygwin time awk 'BEGIN{i=0;for(i=0;i<100000000;i++);}' real 0m4.978s user 0m4.875s sys 0m0.031s MinGW64 $ time awk 'BEGIN{i=0;for(i=0;i<100000000;i++);}' real 0m4.586s user 0m4.562s sys 0m0.015s http://mevius.5ch.net/test/read.cgi/tech/1411399211/718
719: 715 [sage] 2020/05/04(月) 04:54:04.28 ID:R/PLl+Gn for がコマンドだから、フォークされるのだろ。 だから、シェルスクリプトでは、while を使えと言われる bash よりも、dash を使う。 それ以上は、awk, perl, ruby http://mevius.5ch.net/test/read.cgi/tech/1411399211/719
720: デフォルトの名無しさん [sage] 2020/05/04(月) 05:14:01.45 ID:szliIti6 whileを使うと遅いからforに変えたのですが? forを使った>>716とループ回数は同じ WSL1 $ time dash -c 'for i in $(seq 10000000); do :; done' real 0m4.480s user 0m2.875s sys 0m2.047s $ time dash -c 'i=0; while [ $i -lt 10000000 ]; do i=$((i+1)); done' real 0m15.811s user 0m15.766s sys 0m0.016s Cygwin $ time dash -c 'for i in $(seq 10000000); do :; done' real 0m7.598s user 0m6.531s sys 0m1.296s $ time dash -c 'i=0; while [ $i -lt 10000000 ]; do i=$((i+1)); done' real 0m26.173s user 0m26.109s sys 0m0.031s MinGWはCygwinと大差ないので省略 http://mevius.5ch.net/test/read.cgi/tech/1411399211/720
721: 715 [sage] 2020/05/04(月) 07:28:52.02 ID:R/PLl+Gn 8年前のシェルスクリプトの本には、 10万行の処理で、 for : 9分 while : 5秒 awk/perl : 0.1秒 http://mevius.5ch.net/test/read.cgi/tech/1411399211/721
722: 715 [sage] 2020/05/04(月) 07:33:20.66 ID:R/PLl+Gn $((i+1)) という部分が、コマンドだから遅いのだろう ほとんどが、そのフォーク時間 http://mevius.5ch.net/test/read.cgi/tech/1411399211/722
723: デフォルトの名無しさん [sage] 2020/05/04(月) 07:37:26.49 ID:iIYyf/rd せいぜいbashのサブコマンドで、forkしとらん気がする ただマルチスレッドは使ってるかも知れんし、その際のメモリ操作はなんか性能の問題があった気はする http://mevius.5ch.net/test/read.cgi/tech/1411399211/723
724: デフォルトの名無しさん [sage] 2020/05/04(月) 07:49:25.72 ID:szliIti6 >>722 コマンドじゃないよ http://mevius.5ch.net/test/read.cgi/tech/1411399211/724
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 264 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
1.410s*