- 1 名前:デフォルトの名無しさん mailto:sage [2007/04/29(日) 09:54:14 ]
- コンパイラ性能、コンパイルオプション、コードの最適化などについて語りましょう。
主に速度面の最適化を中心としますが、サイズなどの最適化もどうぞ。 なお、OS、CPU、コンパイラなどは限定しません 前スレ C、C++の最適化について語るスレ pc11.2ch.net/test/read.cgi/tech/1084676298/
- 437 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2008/02/22(金) 22:57:28 ]
- 変態boostはおなかいっぱい
- 438 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 23:41:48 ]
- ダンゴさんは本当に知識豊富だな
- 439 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 01:18:13 ]
- 別に「変態boostはお腹一杯」では何も有益な事は読みとれんだろww
むしろ「もうこりごりだ」っていう反応にも取れるくらいだ。 C++のクロージャについてはgccなんかがサポートしてるから、アセンブラを吐かせてみて そのコードを見るって言うのはどう?結構面白い実装になっていると聞いたことがある。
- 440 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 01:54:46 ]
- 439は本当に知識豊富だな
- 441 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 01:55:54 ]
- クロージャ使うと遅くなるってイメージがある
- 442 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2008/02/23(土) 01:58:40 ]
- っていうかboostってコードサイズをboostするんだよ。
- 443 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 02:06:44 ]
- 別に「別に\「変態boostはお腹一杯\」では何も有益な事は読みとれんだろww\
むしろ\「もうこりごりだ\」っていう反応にも取れるくらいだ。\ C++のクロージャについてはgccなんかがサポートしてるから、アセンブラを吐かせてみて\ そのコードを見るって言うのはどう?結構面白い実装になっていると聞いたことがある。」では何も有益な事は読みとれんだろww むしろ「もうこりごりだ」っていう反応にも取れるくらいだ。 C++のクロージャについてはgccなんかがサポートしてるから、アセンブラを吐かせてみて そのコードを見るって言うのはどう?結構面白い実装になっていると聞いたことがある。
- 444 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 02:07:24 ]
- Boostつかうと一気に実行ファイルサイズが10倍に?!
- 445 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2008/02/23(土) 02:08:11 ]
- \7
- 446 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 02:09:10 ]
- >>444
でも使わないと実行時に要するメモリサイズが10倍に!?
- 447 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 02:32:18 ]
- boost使うとコンパイル時間が4倍位に
- 448 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 02:32:46 ]
- それはリアルな
- 449 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 02:37:29 ]
- boost――それは決して便利とは言えない、そして無駄にコンパイルの時間とファイルサイズだけを喰っていってしまう。
しかし必要とあれば使わなければならんのだ――漢にはそういう時が来るものなのだ。
- 450 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 09:51:43 ]
- 必要でもあえて使わないのが漢じゃねーのか?
- 451 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 09:59:07 ]
- 1クロック1バイトまでこだわった俺仕様ライブラリを作るのが漢ってものじゃないのか。
- 452 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 11:41:07 ]
- 昔, RAM 1k とかで 8bit マシンのアセンブラ書いて時は
メモリの 1byte は血の一滴って感じだったけどな…
- 453 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 11:50:57 ]
- >>450
人、それを馬鹿と言う。
- 454 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 13:08:01 ]
- >昔, RAM 1k とかで 8bit マシンのアセンブラ書いて時は
1024バイトなんて随分贅沢だなぁ、おい。
- 455 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 19:12:43 ]
- いや、1Kbitじゃないか。
- 456 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 21:28:52 ]
- 6810か
- 457 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 06:40:59 ]
- >>456
それだったら4114x2の方が安いんじゃないだろうか?
- 458 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 06:41:38 ]
- 2114のまちがい
- 459 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 10:08:59 ]
- "?"不要 話にならない<当時の価格
- 460 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 10:10:10 ]
- <←これってどこの文化なの
- 461 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 10:52:33 ]
- こんにちはー(^^)>おーる
- 462 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 15:14:31 ]
- >>460
DOSのリダイレクト
- 463 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 16:30:39 ]
- 仮にもマなら半角の>を使え
- 464 名前:デフォルトの名無しさん [2008/02/24(日) 20:45:27 ]
- てs
- 465 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 01:54:03 ]
- 実行速度重視よりもメモリ使用量重視の方が早くなるときがあることについて
- 466 名前:デフォルトの名無しさん [2008/03/06(木) 02:13:09 ]
- >>465
単一のアプリだけで動いている訳じゃないからな たとえば残り100Mで全部使用したら、OSや他のアプリがメモリ必要とするから追い出されることになる しかし自分が動くときにはメモリ上に再び持ってくるから、追い出すのとを繰り返しかなり遅くなる メモリは最低限にするのが速い
- 467 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 03:49:27 ]
- あとCPUのキャッシュに乗るとものすごく速くなるんで、そのへんも絡んでくるかと
- 468 名前:デフォルトの名無しさん [2008/03/06(木) 04:09:33 ]
- 省メモリで動くならCPUキャッシュを考えて良いけど、
スワップが起こりうるならその時間の方が圧倒的にかかる
- 469 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 04:16:59 ]
- 結局実測するしかないんだよな
- 470 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 04:58:27 ]
- それもあらゆる環境で。
- 471 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 08:02:59 ]
- >>470
馬鹿? あらゆる環境で最適な最適化なんてあるわけないじゃん。 「ターゲットとする」と形容するなら兎も角。 実際、Woodcrestで速くなるように最適化したら、Pen4で遅くなったなんてよくある話だ。 # それ以前に、「あらゆる」だと一体どこまで対象にするんだ? Pen3か? 486か?w
- 472 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 08:30:20 ]
- >>471
日本語読めない馬鹿?
- 473 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 08:34:42 ]
- 自分が説明できていないことを棚に上げて他人をけなすバカ?w
- 474 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 09:22:50 ]
- 恥ずかしい誤読で鼻息を荒くするのも、
まぁ、人生経験のうちではある。
- 475 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 11:25:42 ]
- >>471
woodcrest, pen4云々とCレベルの最適化技法とは次元が違うでしょw
- 476 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 11:28:57 ]
- >>465
実際にどんなケースで省メモリコンパイルのほうが速くなる?
- 477 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 11:33:47 ]
- >>475
>471じゃないが、Cレベルの最適化限定なのか? だとしたら、キャッシュやスワップがどうこうなんて関係ないと思うのだが。 逆に、キャッシュやスワップを云々するならそれらのサイズに影響するわけだから、 CPUに依存した話になってしまうだろうし。
- 478 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 12:19:55 ]
- >>477
Pen4が、Pen3がってのは、吐き出すコードの並べ順とかそういう要因だから、Cコード側でどうにもならんだろ。 キャッシュどうこうは、配列や構造体のサイズを変えたりなどのCコードレベルでの最適化ができるだろ。
- 479 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 12:21:15 ]
- SSEを使ったベクトル化もベクトル化しやすいCコードにするなどCレベルでの最適化の範疇だな。
- 480 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 22:29:41 ]
- アセンブリまで意識した時点でCレベルではない。
たいていCプログラマに求められるものではあるが。
- 481 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 01:02:33 ]
- ダンゴさんの鋭い意見が望まれるな
- 482 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 01:25:06 ]
- かわいそうな奴はもう放っとけよ
- 483 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 11:02:27 ]
- 通院中だから、ちょっと待っててね。
- 484 名前:デフォルトの名無しさん [2008/03/07(金) 14:42:19 ]
- VC++の浮動小数点ですが、
/fp:precise fast strict の中でどれが一番精度が高いのでしょうか? デフォルトのpreciseだと思っていたのですが、 floatをdoubleに変えたときの結果に一番近かったのが fastだったのですが。
- 485 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 15:48:46 ]
- >>484
まず、floatをdoubleにした結果に一番近いの意味が不明
- 486 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 17:16:52 ]
- >>484
x86のFPUはfloatだろうとdoubleだろうと、内部では80bitで計算している。 そのために、floatの計算で本来なら丸め誤差が発生するはずのところで、 誤差が発生しないという問題が生じる。 厳密に規格で決められた通りの精度で計算するためには、1つの計算が 終わるたびに丸め操作が必要になる。 その辺のコントロールをするのが/fpオプションで、fastは速度優先で 最低限の丸め操作しかしないので計算の精度が必要以上に上がってしまう。 また、どのタイミングでメモリにストアされるかによっても、計算結果が 変わってしまうので、全く同じ入力を与えても常に同じ結果になることが 保証できない。
- 487 名前:♪(*^ ・^)ノ⌒☆ mailto:sage [2008/03/07(金) 18:40:21 ]
- >>480
命令の並び順こそモダンなCPUではOoOがあるからあんまり影響しない。 レイテンシの極端に大きい命令に展開されるのがわかってる場合は アンロールしてソフトパイプライニングするのも有効。もちろんCレベルでできる。 C++なら機種依存の手続きをトレーツ(笑)にしてインターフェイスを汎用化する手もあるね。 >>481 黙れスイーツ(笑) >>**** ご希望にお答えしてお前は放置 >>483 おう、闘病がんがれよ
- 488 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 20:08:28 ]
- NGnameが増えたのか?
- 489 名前:ヾ(*´∀`*)ノ mailto:sage [2008/03/07(金) 20:57:02 ]
- どうぞどうぞ
- 490 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 00:15:33 ]
- >>486
コードが同じならメモリにストアされるタイミングも同じで、 同じ入力を与えたら同じ結果になるんじゃないの? それとも、入力ってのはソースファイル(コンパイラに対する入力)のことかな?
- 491 名前:デフォルトの名無しさん [2008/03/08(土) 00:45:47 ]
- >>490
レジスタからあふれてメモリに追い出されるときに丸めが生じる。 同じ式が違う場所にあるときに丸めるタイミングが違ってくる可能性がある。
- 492 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 00:51:19 ]
- 同じ位置にあるコードでの話じゃなかったのか。
- 493 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 01:24:27 ]
- 同じ位置にあっても、コンパイルされるたびに毎回同じ結果に
なることが保証できない。
- 494 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 01:32:41 ]
- つまり、入力ってのはソースファイル(コンパイラに対する入力)のことになるわけだね?
- 495 名前:486 mailto:sage [2008/03/08(土) 02:03:49 ]
- いや、関数に対する入力のつもりで書いたんだが。
言いたいことは491の言ってることだな。 クライアントとサーバで同じ式を書いても同じ結果にならなかったり、 デバッグ用のコードを入れたら結果が変わったり、インライン展開 されるかどうかで結果が変わってしまう。
- 496 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 02:16:10 ]
- コンパイルしてしまった後のプログラムがあって、
それの全く同じタイミングに実行される全く同じ位置のコード(マシン語レベルで)に 全く同じ入力を与える場合を想定してたんだぜ。
- 497 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 02:43:10 ]
- ダンゴさんのレスでスレが一気に加熱したな。
- 498 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 02:46:36 ]
- メモリ4倍にしたらCPUの処理速度が40%以上遅くなった。
- 499 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 02:49:01 ]
- CPU の問題じゃなくて、サイズの違うメモリを使ってるからじゃないのか?
- 500 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 09:00:59 ]
- 単純に、交換したメモリが遅いだけじゃないの?
- 501 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 09:29:12 ]
- CPU が遅くなったと言うなら、
レジスタのみの演算をぶん回して 比較しないとな。
- 502 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2008/03/08(土) 13:26:10 ]
- Intel入ってないだけじゃないの?
Athlon 64の前のモデルではメモリ増やすと逆に遅くなる現象があるらしーな。
- 503 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 14:39:40 ]
- PenDの速さの実感できなさ具合は異常
- 504 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 16:24:45 ]
- あぼーん推奨ワード:ダンゴさんの
- 505 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2008/03/08(土) 17:28:20 ]
- 同意
- 506 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 00:40:05 ]
- ダンゴさんが復活したおかげでレス数がうなぎのぼりだな
- 507 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 04:12:57 ]
- あぼーん推奨ワード:ダンゴさんが
- 508 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 05:24:38 ]
- あぼーん推奨ワード:ダンゴ、団子
- 509 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 17:06:41 ]
- だんご大家族♪
- 510 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 22:48:39 ]
- DANGOさんのおかげでEDが直りました
- 511 名前:498 mailto:sage [2008/03/09(日) 23:25:11 ]
- superπでチェックしたが明らかにCPUトロくなった。256を1Gに変えたのだが。
- 512 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 23:25:18 ]
- 弾固さんのおかげで層化学会に入ることができました
- 513 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 23:26:32 ]
- どうせ128MBの板を何枚もポトペタしただけなんだろ?
- 514 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2008/03/09(日) 23:51:13 ]
- 板です。128kgまで耐えられます。
- 515 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 23:54:19 ]
- 面白くないから黙ってろ
- 516 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2008/03/10(月) 00:03:49 ]
- >>511
OSは?Windows 2000は512MB以上はほとんど管理してないよ
- 517 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 00:30:06 ]
- >>515
お前も面白くない。自分に適用しないジャッジを人に適用しないようにな。
- 518 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 14:32:22 ]
- 以降、面白さを最適化するスレになりますた。
- 519 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 14:36:11 ]
- 面白さのサイズが最小になるのか
- 520 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 17:59:24 ]
- 以降、面白さを最適化するスレを最適化するスレになりました。
- 521 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 20:20:10 ]
- >>1 に goto >>1000 って入れときゃいいんじゃね?
- 522 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 22:11:35 ]
- 僕らが一つと半分のスレッド、時間にしてほぼ4年の月日を消費して分かった事、それは
どんなにメモリを必要とするプログラムを書いても副作用がなければそのプログラムは 何もせずにOSに制御を返す1024バイトにも満たないデータ列と同じだという事。
- 523 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2008/03/10(月) 22:18:01 ]
- いや、今わかったのはたぶんあんただけよ。
- 524 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 22:36:50 ]
- DANGOさんのベンチマークは副作用で満たされているな
- 525 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2008/03/10(月) 22:52:46 ]
- それを言うな
- 526 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 11:27:17 ]
- 副作用でスレが荒れる
- 527 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 13:14:19 ]
- メモリ2G積んでるけどそっちがフル稼働するずっと前にCPUがまんまんになる
- 528 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 18:32:21 ]
- 以降下ネタ禁止
- 529 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 21:18:20 ]
- ISAバスのEMSメモリカードが遅くて泣いたのはいい思い出
- 530 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 21:21:26 ]
- 私のPCは、CPU温度は低いのにGPUはちんちんに熱くなる。
- 531 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 13:21:14 ]
- それ普通
- 532 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 13:47:44 ]
- >>527
それは今時普通ですから
- 533 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 22:00:28 ]
- ある C++ のメソッドを アセンブラに書き換えたら、かえって実行速度が遅くなった orz
- 534 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 22:12:21 ]
- あるある。
コンパイラってマジ賢いわ。
- 535 名前:533 mailto:sage [2008/03/12(水) 22:25:43 ]
- それがさー 多倍長整数の1ビットシフトと論理積処理なんだぜ
r = (r << 1) & mask; // r, mask は多倍長整数 こんな単純な処理はキャリービットを使ったシフト命令が使えるアセンブラの方が絶対速いはずなのだが アセンブラにすると、グローバルな最適化がうまくできないみたいで、C++ よりも遅くなったみたい
- 536 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 22:28:49 ]
- そう言うときはどういう処理吐いてるか見た方がいいよ。
- 537 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 22:30:44 ]
- >>535
差し支えなければC++とasm双方晒してくれ。
|

|