タグ

gccに関するgfxのブックマーク (22)

  • qrintfの最適化 - 開発日記

    H2Oの内部では,数値,文字列のフォーマッタとしてsprintfが用いられています. 我々は,最近までsprintf専用ソースコード変換器, qrintfのチューニングを行っていました. 稿ではqrintfの概要と今回適応した工夫,そして今後の課題についてまとめておきます. 1. qrintfとは? qrintfとはCコンパイラの1つであるgccのプリプロセッサのラッパーであり,snprintfを高速化するソースコード変換器です. 稿執筆時点でのqrintfの変換対象はsprintfとsnprintfです.以下文中では特にことわりのない限りsprintfと記述した場合sprintf, snprintfの両方を指します. qrintfはソースコードに出現するsprintfで利用するフォーマット文字列を解析し,型ごとに用意された関数呼出にコードを書き換えsprintfの高速化を行います.

    qrintfの最適化 - 開発日記
  • GCC 4.8でぶっ壊れるSPECのお粗末なコード

    の虫: GCC 4.8のリリースノートとC++関連の変更で、GCC 4.8は464.h264ref: SPEC CPU2006 Benchmarkを壊してしまう。これはSPECベンチマークの規格違反によるものであると書いた。では、具体的に何なのか。それを解説している記事を発見したのでかいつまんで紹介。 Embedded in Academia : GCC pre-4.8 Breaks Broken SPEC 2006 Benchmarks Regehr: GCC 4.8 Breaks Broken SPEC 2006 Benchmarks [LWN.net] どうやら、SPECベンチマークは以下のようなコードを含むそうだ。 int d[16]; int SATD (void) { int satd = 0, dd, k; for (dd=d[k=0]; k<16; dd=d[++k])

    gfx
    gfx 2013/03/24
  • GCC 4.8 Release Series — Changes, New Features, and Fixes - GNU Project - Free Software Foundation (FSF)

    GCC 4.8 Release Series Changes, New Features, and Fixes Caveats GCC now uses C++ as its implementation language. This means that to build GCC from sources, you will need a C++ compiler that understands C++ 2003. For more details on the rationale and specific changes, please refer to the C++ conversion page. To enable the Graphite framework for loop optimizations you now need CLooG version 0.18.0 a

    gfx
    gfx 2013/03/17
  • gccのプリコンパイル済みヘッダ - kryozahiro’s diary

    昨日の続き。 gccのプリコンパイル済みヘッダ(PCH)がかなり速いことに気づいたけど、日語の資料が少ないので家のマニュアルを読んだ。結構複雑だったから下にメモしておく。 作り方 foo.hのプリコンパイル済みヘッダを作る場合、普通にコンパイルするように $ gcc foo.h とするとfoo.h.gchができる。完成。ヘッダを認識しない場合は-xオプションで指定すると良いみたい。 使い方 PCHを使いたいコードからfoo.hをインクルードするとき、条件が満たされた場合、自動的にPCHが使用される。条件は以下の通り。 foo.h.gchがサーチされること gccは#include "foo.h"を発見すると、サーチパスのディレクトリごとにfoo.h.gchを探した後でfoo.hを探す。foo.h.gchとfoo.hは同じディレクトリに無くてもかまわない。また、"foo.h.gchディレ

    gccのプリコンパイル済みヘッダ - kryozahiro’s diary
    gfx
    gfx 2011/11/02
  • __builtin_return_addressについて - Shohei Yoshida's Diary

    __builtin_return_address関数の紹介。簡単にいうとある関数が どこから呼び出されたか知ることができる関数です。厳密には 該当の関数を終えたときにどの番地に戻るかということなの ですが、たいてい call命令などの次の命令を示すので、呼び出した 場所の特定も容易にできてしまいます。 私はカーネルデバッグ時に多用します。 ユーザランドであればデバッガを使うことが容易ですが、 カーネルだと若干面倒です。カーネルでもメジャーなアーキテクチャ カーネルデバッガが安心して使えるんですが、マイナーなアーキテクチャだと カーネルデバッガ用のコードが誤っている(経験あり)ということがあるので、 どうしてもprintデバッグに頼ってしまいます。 __builtin_return_addressではアドレスしか知ることができないので, objdumpや nmの併用が基となります。 変数の

    __builtin_return_addressについて - Shohei Yoshida's Diary
    gfx
    gfx 2011/09/24
  • Radium Software Development - Eat Your Own Dogfood

    This domain may be for sale!

    gfx
    gfx 2011/09/01
    -ffast-mathにまつわるheisenbugのあらすじ。
  • Big Sky :: Re: サブドメインに任意の文字列が入るウェブアプリのローカル開発

    サブドメインに任意の文字列が入るウェブアプリのローカル開発 - 冬通りに消え行く制服ガールは?夢物語にリアルを求めない。 - subtech サブドメインに任意の文字列が入るようなサービスをローカルで開発しようとすると、いろんなホストを /etc/hosts に書かないといけなくてすごく不便なので、なんとかしようと思っていたところ、id:hakobe932 先生に「それアレでできますよ」との御言葉を頂き、簡単なスクリプトを書きました。 http://subtech.g.hatena.ne.jp/cho45/20110804/1312389877 僕ならこうやるかも libcho45.c #define _GNU_SOURCE #include <dlfcn.h> #include <stdio.h> #include <string.h> #include <stdlib.h> #incl

    Big Sky :: Re: サブドメインに任意の文字列が入るウェブアプリのローカル開発
    gfx
    gfx 2011/08/04
    LD_PRELOAD
  • Benchmarks between Clang and GCC about Ruby 1.9.3

    Blogged by Ujihisa. Standard methods of programming and thoughts including Clojure, Vim, LLVM, Haskell, Ruby and Mathematics written by a Japanese programmer. github/ujihisa Since Matz Ruby Implimentation ruby 1.9.3 has been released as preview release, I think that all Rubyists should abandon the ruby they are usually using, ruby 1.9.2, and should use 1.9.3 now. Ruby 1.9.3 also supports clang ins

    gfx
    gfx 2011/08/04
  • LLVM GCC と LLVM Compiler 2.0 とどっちがいいのか? - その後のその後

    Xcode 4 からコンパイラのシステムデフォルトが GCC 4.2 から LLVM GCC 4.2 へ変更されましたが、その下にある LLVM Compiler 2.0 ってのが気になるので調べてみました。 LLVM GCC と LLVM Compiler 2.0 の違い GCCと比較した場合、LLVMコンパイラでビルドするとアプリが高速化されるらしいのですが、LLVM GCC と LLVM Compiler 2.0でそういった違いはあるのでしょうか。 WWDCのスライドによると、 LLVM GCCはGCCでパースしLLVMで機械語を生成、LLVM Compilerはパース部分をClangが行いLLVMで機械語を生成、とのことで、LLVM GCC / LLVM Compiler どちらを用いても生成されるバイナリは同じ、つまり生成されるアプリの速度などの違いはなさそうです。 (2011/

    LLVM GCC と LLVM Compiler 2.0 とどっちがいいのか? - その後のその後
  • KMC Staff Blog:GCC LTO marge

    2009年09月30日 GCC LTO marge GoogleのDiego Novillo氏が、GCCのtrunkに大量のパッチを投げました。 [LTO merge][0/15] Description of the final 15 patches http://gcc.gnu.org/ml/gcc/2009-09/msg00578.html http://gcc.gnu.org/ml/gcc-patches/2009-09/ ついにLTO(Link-Time Optimization)branchがGCC trunkにmergeされるようです。 具体的には、-fltoや-fwhopr(Whole Program Optimization)というオプションが増えます。このオプションにより、GCCは通常のアセンブリコードの代わりに、最適化のための情報を含んだGIMPLEという中間表現をダ

    gfx
    gfx 2011/07/25
  • GCCの各オプティマイズレベルで有効になる最適化を調べる - Shohei Yoshida's Diary

    GCC 4.4ぐらいから見たいなのですが、-Qオプションを使うと、 最適化等でどのオプションが有効になるかがわかるみたいです。 具体的には以下のようなコマンドです。 % gcc -O2 -Q --help=optimize # 個々のオプションについて 'enabled' or 'disabled'が確認できるそれで各レベルでの違いを見てみた。 まとめるのが面倒なので以下のようなスクリプトを走らせる #!/usr/bin/env perl use strict; use warnings; my @levels = qw(-O0 -O1 -O2 -O3 -Os); my @base = qw(gcc -- -Q --help=optimize); my %optimize; for my $level (@levels) { my @cmd = @base; $cmd[1] = $leve

    GCCの各オプティマイズレベルで有効になる最適化を調べる - Shohei Yoshida's Diary
    gfx
    gfx 2011/06/17
    gcc -Q
  • ls -l のコールグラフ - Shohei Yoshida's Diary

    GCC-4.6の stack-usageを使ってみた - syohex’s diary とコールグラフを組み合わせて何かできないかなって思ったんだけど、 今のところ何もできませんでした。コールグラフの図だけ作ったので 勿体ないので貼っておきます。 環境 Ubuntu 10.10 x86_64 ソース coreutils-8.10を使いました。 ソースは src/{ls.c,ls-ls.c}です。 作り方 一旦coreutilsを作成してあとで個別にコンパイルします。 make時に自動生成するファイルがあり、lsのソースだけでは ビルドできないためです。 % ./configure % make % cd src % gcc -std=c99 -g -pg -O2 -I. -fstack-usage -I../lib \ ls.c ls-ls.c ../lib/libcoreutils.a

    ls -l のコールグラフ - Shohei Yoshida's Diary
  • GCC-4.6の stack-usageを使ってみた - Shohei Yoshida's Diary

    GCC 4.6 RCが 3月14日に出ました。なんでもうすぐ正式版も出るかと 思います。Changlogを見ていると気になる機能がありました。それが stack-usage. 関数ごとのスタックの使用量が確認できるというものです。 これは Adaだとだいぶ前から実装されていたんですけど、4.6からは どの言語からでも利用することができます。 環境 Ubuntu 10.10 x64 GCC4.6のインストール GCC 4.5.1をビルドする - Life is very short GCC 4.5.2をビルドする - Life is very short と同じなので、これらの記事を参照してください。 準備さえできれば以下のコマンドで作成できます。 % tar xf archives/gcc-4.6.0-RC-20110314.tar.bz2 % cd gcc-4.6.0-RC-201103

    GCC-4.6の stack-usageを使ってみた - Shohei Yoshida's Diary
    gfx
    gfx 2011/03/19
  • max, min 関数の最適化と x86 の cmov 命令 - yuyarinの日記

    max 関数や min 関数は C 言語だと自分で書かないといけないので int max(int a, int b) { return a>b?a:b; } などと書いたりするのだが,比較を行っているので分岐が発生するから遅くなると思い,これって当に速いのかと思って調べてみた. 実験 以下の5つのコードを用意した.これらをそれぞれ max 関数の実装とした.検証用のコードは最後に載せる.PHP でランダムな2数値を作ったデータを 1,000,000 組用意し,入力データとして配列に読み込んだあと,ループで max 関数を実行した.このループの前後で gettimeofday で時間を測り,所要時間を算出した.それぞれの実装に対し所要時間の5回の平均をとって比較した.コードは gcc version 4.2.1 (Apple Inc. build 5664) でオプション無しでコンパイルし

    max, min 関数の最適化と x86 の cmov 命令 - yuyarinの日記
    gfx
    gfx 2010/11/24
    if文と三項演算子で出力されるマシンコードが変わるの!?
  • Issue #4753: Faster opcode dispatch on gcc - moriyoshiの日記

    追記: typo修正。テストコードに余計な「r」が含まれてたのと、「PICコード」とか間抜けなこと書いてたのを。 Issue #4753 職場でも話題になったので。 このパッチのコメントによると、threaded codeにしたほうが分岐予測が効果的に働き、15%-20%ほど速くなるとのこと。computed goto自体は、threadedにする都合によるものなので、実はあまり質的ではない。 要は、分岐予測は分岐命令ごとに、特定の呼び出しパターンを検出することで行われるものなので、ディスパッチする箇所が1カ所になっているよりは複数箇所になっている方が有効に利用できるということらしい。 つまり、 int *op = opcodes; for (;;) { static void *table = { &&OP_ADD, &&OP_LOAD, ... }; goto table[*op];

    Issue #4753: Faster opcode dispatch on gcc - moriyoshiの日記
    gfx
    gfx 2010/11/04
    computed goto (direct threaded code)
  • インタプリタ型言語を高速化する computed goto : DSAS開発者の部屋

    先日Python 3.1a1 がリリースされました。 Python 3.0 は Python 2.6 に比べてパフォーマンスが悪かったのですが、Python3.1はPython2.6よりも速くなるかもしれません。 Python3.1のパフォーマンス向上は、主に次の2点が影響しています。 ioモジュールがC言語で書き直された computed goto の採用 (--with-computed-gotos というconfigureオプションで有効) computed goto という名前を聞き慣れなかったのですが、調べてみると Ruby 1.9 の VM (YARV) や、 Perl6 の VM として開発されとうとうリリースされた Parrot にも採用されている手法でした。今回は簡単に computed goto の紹介をしてみます。 とりあえず label as value C言語の規

    インタプリタ型言語を高速化する computed goto : DSAS開発者の部屋
    gfx
    gfx 2010/08/17
    a.k.a. direct threaded code
  • Big Sky :: シャア専用memcpy その後

    今じゃぁgcc4が一般的なので、状況変わったかな?と思ったのでWindowsで再度試してみた。 Big Sky :: シャア専用memcpy 試してみた memcpy 最適化 - id:kazuhookuのメモ置き場バイト単位でコピーするアホなコードの方が、勝手にベクトル化される分、gcc 内蔵のヤツより最大3倍高速なんだってwwwx64じ... http://mattn.kaoriya.net/software/gcc/20080617134829.htm 前回は効果が無かったけど、今回は -------------------------------------------------------------------------- gcc (GCC) 4.4.0 Copyright (C) 2009 Free Software Foundation, Inc. This is fr

    Big Sky :: シャア専用memcpy その後
    gfx
    gfx 2010/06/18
  • PerlエンジニアのためのObjective-C Blocks入門 - unknownplace.org

    OS X 10.6 以降の xcode では Objective-C に Blocks というシンタックスが追加されている。 Blocks Programming Topics: Introduction Perl でいうところの無名関数(コードブロック)を作ることができる機能で、Perlでいうところの my $f = sub { ... }; $f->(); は void (^f)() = ^{ ... }; f(); のように書ける。書式がきもいのはObjective-Cの定めなのであきらめましょう。 より詳しい書式については上記ドキュメントを見ると良い。 しかしデフォルトではPerlのコードブロックとはレキシカル変数の扱いが異なる。 my $i = 0; my $f = sub { return $i + 1 }; $i++; $f->(); # 2 を返す perlではこのようにレ

  • New_C_Parser - GCC Wiki

    gfx
    gfx 2010/05/11
  • FreeBSD Daily Topics:2010年4月19日 FreeBSD GCCを置き換えるLLVM Clang,広くテスト呼びかけ|gihyo.jp … 技術評論社

    FreeBSD Daily Topics 2010年4月19日FreeBSD GCCを置き換えるLLVM Clang、広くテスト呼びかけ src ClangBSD - LLVM Clang Call for Test Roman Divacky氏がメーリングリストにおいてLLVM ClangのFreeBSD統合が一定のレベルに達したとしてコミュニティに広くテストを呼びかけています。LLVM Clangがセルフホストに到達したこと、ClangのC++サポートが向上したこと、i386/amd64のシステムとカーネルのビルドと成功していることなどが背景にあります。 テストはClangBSDのブランチを取得してビルドすることで実施できます。作業の詳しい方法はBuildingFreeBSDWithClang - FreeBSD Wikiにまとまっています。いつ、どのタイミングでメインブランチに取り込

    FreeBSD Daily Topics:2010年4月19日 FreeBSD GCCを置き換えるLLVM Clang,広くテスト呼びかけ|gihyo.jp … 技術評論社