タグ

高速化とgccに関するiwwのブックマーク (4)

  • プログラム高速化の禁術 - Qiita

    はじめに これは昔(2010年頃)自分が使っていた高速化技法について書いたものです. 今となってはレガシーだったり,通用しないものもあるかもしれませんが,こういう知識も無くなってしまったり,自分も忘れてしまう気がしたので,メモ代わりに書いておきます. ただ言えることは,「最適化はするな」ということです.最適化すると,保守性が大幅に失われる危険性があります.そして,これから書く項目を1つ1つ行って,高速化できたとしても,せいぜい2倍程度です.ただその2倍程度の速度も欲しい!そのためには悪魔に魂と保守性を売る!という方はご覧ください.これらの高速化は割といろいろな言語に当てはまることも多いですが,大体C++で書くことを念頭に置いていただければ,幸いです.あと,個人的には競技プログラミングだったり,計算科学をやっていた時期に見つけた経験則なので間違ってる場合もあります. コンパイルオプションをこ

    プログラム高速化の禁術 - Qiita
    iww
    iww 2018/06/27
    「newするな」と「deleteするな」はバグを減らす効果もあるので良いと思う。
  • GCC 4.7の最適化オプション比較表 - Shohei Yoshida's Diary

    GCCの各オプティマイズレベルで有効になる最適化を調べる - Life is very short の GCC 4.7版。"-Ofast"を追加しました。"-Ofast"は規約を一部 無視した最適化を行うようです。"-O3"より高速になるよう意図 されています。 なお GCC 4.8では "-Og"という最適化とデバッグ機能を兼ね備えた オプションが追加されるそうです。需要がわかりづらいですが・・・。 表生成スクリプト #!/usr/bin/env perl use strict; use warnings; $ENV{LANG} = 'C'; my @levels = qw(-O0 -O1 -O2 -O3 -Os -Ofast); my @base = qw(gcc -- -Q --help=optimizers); my %optimize; for my $level (@level

    GCC 4.7の最適化オプション比較表 - Shohei Yoshida's Diary
  • GCCの最適化オプションは "-O3"までしかない - Shohei Yoshida's Diary

    ここ十数年ぐらいの GCCの最適化は "-O3"までありません。 稀に "-O3"より大きい、"-O4"等を見るけど、それは結局 "-O3"に されてしまいます。 追記 なお最高速度のオプションは "-Ofast"です。ただこれは規約に 沿わない形での最適化も含まれます。大部分は問題無いと思い ますが、利用する場合は一応注意した方がよいでしょう。 GCC 4.8 snapshotのソースコードで確認したところ、一応内部的には保持 されていますが、結局最大で 3との比較しかないので意味がありません。 (255以上だと 255以上にされます) 大昔は "-O6"まであったという話ですが、今はありません。 将来的にどうなるか知りませんが、意図しないことをされないように "-O3"までをつけるのが無難でしょう。 各オプションの違いを知る。 GCCの各オプティマイズレベルで有効になる最適化を調べる

    GCCの最適化オプションは "-O3"までしかない - Shohei Yoshida's Diary
    iww
    iww 2017/10/31
    -Ofastで最速
  • sprintf を最大10倍以上高速化するプリプロセッサ「qrintf」を作った

    最近H2OというHTTPサーバを書いているのですが、プロファイルを取ってみるとsprintfが結構な時間をっていて不満に感じていました。実際、sprintfは数値や文字列をフォーマットするのに十徳ナイフ的に便利なので、HTTPサーバに限らず良く使われる(そしてCPU時間を消費しがちな)関数です。 では、sprintfを最適化すれば、様々なプログラムが より高速に動作するようになるのではないでしょうか。ということで作ったのが、qrintfです。 qrintfは、Cプリプロセッサのラッパーとしてソースコードに含まれるsprintfの呼出フォーマットを解析し、フォーマットにあわせたコードに書き換えることで、sprintfを高速化します。 たとえば、以下のようなIPv4アドレスを文字列化するコード片を sprintf( buf, "%d.%d.%d.%d", (addr >> 24) & 0xf

  • 1