タグ

gccと最適化に関するiwwのブックマーク (6)

  • プログラム高速化の禁術 - 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で最速
  • なんでGCCはa*a*a*a*a*a を (a*a*a)*(a*a*a) に最適化できないの?っと

    c - Why doesn't GCC optimize a*a*a*a*a*a to (a*a*a)*(a*a*a)? - Stack Overflow 俺は科学技術計算の数値計算の最適化をしてたんだけどさ。GCCはpow(a, 2)をa*aにしてくれるんだな。うん。で、pow(a, 6)は最適化されずに、ライブラリ関数であるpowを呼んじゃうんだ。パフォーマンス的に最悪。(Intel C++ Compilerはpow(a,6)のライブラリ関数呼び出しを消し去ってくれるんだけどな) どうもよくわからんのが、pow(a, 6)をa*a*a*a*a*aで置き換えて、GCC 4.5.1をオプション"-O3 -lm -funroll-loops -msse4"で使ったら、mulsd命令を5個使う。 movapd %xmm14, %xmm13 mulsd %xmm14, %xmm13 mulsd

    iww
    iww 2014/03/28
    『-ffast-mathオプションを指定すると、浮動小数点数演算の誤差を気にしない』 便利そう
  • : _

    iww
    iww 2014/02/21
    『(doubleへの変換はコンパイラの最適化でも消えない。少なくともgccの-O2では消えない)』
  • KMC Staff Blog:gccのビルトイン関数 (printf)

    2009年07月03日 gccのビルトイン関数 (printf) gccのtipsを紹介します。主にgcc3.x からgcc4.x で変わっているところです。 #include <stdio.h> int main() { printf("Hello, world!\n"); } このプログラムはgcc3では普通にprintfを呼び出すコードを生成しますが、gcc4ではどうなるでしょうか。ARM版のexeGCC4でちょっと試してみます。 > gcc -S hello.c 生成されたhello.s を見てみると ... .LC0: .ascii "Hello, world!\000" .text .align 2 .global main .type main, %function main: @ args = 0, pretend = 0, frame = 8 @ frame_needed

  • 1