タグ

gccに関するoto-oto-otoのブックマーク (29)

  • J - SEA & FSIJ 合同フォーラム 2006年12月

    というわけで、前回の経験を活かして帰ったらすぐ書くのだった。(雑談忘年会のが結局書いてないままだし…) 6人だったという。なんて贅沢な。 とりあえず、単語だけメモったので、それをもとに。 メンテナが増えた Wikiの内容が大変充実 テスト環境が充実してます メモリ使用量も自動でテストし続けてるらしい。たまーに、メモリ使い過ぎるパッチがあるけど、それの早期発見に役立ってるとか。(今見つけた→http://gcc.gnu.org/benchmarks/ 色々ベンチマークしてんだなー) section anchor(http://gcc.gnu.org/wiki/Section%20Anchor%20Optimisations) 複数の変数をまとめて、一個のシンボル + 複数のオフセットにする。GOTのエントリが減る。MIPSとかだとエントリが減ると大変助かる…らしい。 CILを生成するバックエ

    J - SEA & FSIJ 合同フォーラム 2006年12月
  • ホワット・ア・ワンダフル・ワールド Write Great Code Vol.2 低いレベルで考え、高いレベルで書く

    Write Great Code (Vol.2) めちゃくちゃ分厚くて高い.数日前に見かけて勢いで買ってしまった.おかげで今月は貧乏生活,朝はごはんとみそしるとさんまの蒲焼き缶詰に白菜漬け,夜はごはんとキムチと缶詰というほぼ白菜とさんまのみで生きている今日このごろ,みなさまいかがお過ごしでしょうか ? (3 缶で 295 円 !! 1 缶で 2 ぶん…) 実はボクは,Vol.1 すら,IEEE 仕様の浮動小数点数演算をビット演算を使いまくってソフトウェア的に実装するところで疲れて (浮動小数点数とビット演算苦手なんですよ…),積読の部分が多かったのですが (一応全体に目を通してはいる.最近は読みたいが多すぎて,最初から最後まで精読する,ってのはあんまりできなくて,ざっと目を通しつつ,面白そうなところはじっくり読んで,的な読み方をすることが多い.あとは,必要になるたびに必要な部分を読

  • はてなブログ | 無料ブログを作成しよう

    東大生でない中川淳一郎さんが駒場寮で得た人生訓(私と東大駒場寮 3) 駒場寮の北寮9Bの部屋、「基礎科学研究会」、略して「KKK」の部屋 予備校の講師に連れられて、駒場寮に出入りするように 「代わりに面接受けろ」入寮の面接は「替え玉」で突破 「経営と文体の基は寮での読書で培った」 東京大学の駒場キャンパス(東京都目黒区)にか…

    はてなブログ | 無料ブログを作成しよう
  • ユメのチカラ: コードを読むな、理解しろ

    コードを読まないで理解するというと何やら心眼で読めとかテレパシーを使えとか、そーゆー荒唐無稽な方向に走れという事ではなく大局的に理解しましょうという話である。 カーネル読書会のネタで今回はmallocのお話だったのだが、そこでRubyのささださんがいらっしゃっていて、GC(ごみ集め)と記憶域管理の関係について熱い議論が沸騰し、その後いろいろブログなどでフォローされていたりする。 わたしもRubyでmallocやGCがどう実装されているか興味があったのでoprofileで実行プロファイルをとってみたりした。日頃利用しているノートPCRubyのテストプログラム(test/runner.rb)を実行してoprofileしたのは先日ブログに書いたとおりである。 「それとわたしのノートPCではキャッシュミスを測定できないので、Xeonのマシンでキャッシュミスを測定すると面白いと思った。GCの時ぼろ

  • 未来のいつか/hyoshiokの日記 | Cache Aware Ruby Patch

    quick and dirty hackだ。 # diff -u gc.c~ gc.c --- gc.c~ 2006-08-25 17:12:46.000000000 +0900 +++ gc.c 2006-10-03 10:47:08.000000000 +0900 @@ -1594,10 +1594,15 @@ int n = 0; for (i = 0; i < heaps_used; i++) { - RVALUE *p, *pend; + RVALUE *p, *pend; p = heaps[i].slot; pend = p + heaps[i].limit; for (;p < pend; p++) { + if ( (p+1) < pend) { + __asm__ __volatile__ ( + " prefetch (%0)\n" + : : "r" ((p+1)-

    未来のいつか/hyoshiokの日記 | Cache Aware Ruby Patch
  • Buckblog: Inspecting a live Ruby process

    So, there are you. Logged into one of your production machines, staring at a rogue Ruby process, and wondering why it has been running away with 90% of the CPU for the last half hour. Sure, you can kill it, but you’d really like to know why it is stuck there. This isn’t the first time you’ve noticed this problem, and you’re getting a little tired of manually patching things up. But how do you figu

  • 革命の日々! カーネル読書会で講演してきました

    7月にLMSで発表したglibc mallocの解説を、ブラッシュアップしてYLUG・カーネル読書会でも発表してきた。 人の知らない間にビデオ撮影をして、YouTubeにアップするとかいう話になっていたので、「ちょ・・業務用です・・・か??」とでも言わんばかり、かなり格的ビデオカメラが会場に設置されていた。 もうダメである。 緊張しまくり、用意しておいた小ネタギャグは一切言えなかった。 熱いトークを期待したいた皆さん(いるのか?)ごめんなさい。 てゆーか、ネクタイに指す、アナウンサー向けっぽげなマイクが用意されているあたりがYLUGスゴス。と思った。 まあ、それはさて置き、当日の感想としてはhyoshiokさんのBlogあたりの感想がよくまとまっていていい感じなのではないかと思う。 結論: みんなRubyが好きなんだよ。 kernel hackerもLL hackerも交流しようよ と

  • ユメのチカラ: 第67回カーネル読書会、ビデオ公開

    第67回カーネル読書会のセミナー部分のビデオを公開した。今回はお題: glibc malloc について 発表者:小崎さん malloc関数はlibcの中でもっとも使用頻度が高い関数の一つでありながら、そ の実装の詳細は意外なほど知られていません。 Unix誕生当初のプログラミングスタイルでは、ほとんどのデータはスタックと グローバル変数に格納されており、mallocの使用頻度は低かったようです。し かし、今日ではGUI、スクリプト言語、C++といったmallocを多発するソフトウェ アが極めて一般的になり、mallocの性能の重要度は増しています。 こうした点に注目して、素朴な malloc では何が問題だったのか。また、 glibc malloc がどういった点に注力してチューニングされているのか。といっ た点を説明できれば。と思います。 資料はYLUGのホームページからダウンロードで

  • type-punning (#537217) | gcc 3.4.0 リリース | スラド

    のでコンパイルできないコードが出るかもしれないとどっかのMLで出ていたのですが、実際どうなんでしょうね? 過去のコードの継承性がライブラリレベルで失われる(例えばxmultiとか)だけでも面倒臭いどころかプロジェクト次第では致命傷になるのに、コンパイラレベルで継承性を失うと滅茶苦茶な事になるので不安があるのでおしえてえらいひ キャストに関していえば、最適化をかけると strict-aliasing が 有効になるため、かなり多くのプログラムで思わぬ結果をもたらします。 例えば、 long *v = malloc(sizeof(long)); *v = 0; *(short *)v = -1; printf("%ld\n", *v); printf("%ld\n", *v); を -O2 を付けてコンパイルすると、最初の出力は 0、次のは 65535 になります。 gcc の info にあ

    oto-oto-oto
    oto-oto-oto 2006/09/26
    strict-aliasing
  • ひげぽん OSとか作っちゃうかMona- - [gcc] ライブラリ開発者は gccの「Declaring Attributes of Functions」を読むべし

    gcc を使う人は info gcc をくまなく読むべきだと言われたらそれでおしまいなのですが、info gcc の中で「Declaring Attributes of Functions」が面白かったので紹介します。 実は Mona のカーネル内で GDT(Global Descriptor Table) 関連のコードが最適化オプション -O2 では動くけど -O3では動かないという現象に出くわしました。 /* TSS. Mona has only one TSS */ setSegDesc(&g_gdt[4], (dword)g_tss, 0x00000067, SEGMENT_PRESENT | SEGMENT_DPL0 | 0x00 | 0x09);のように TSS を設定したあとに /* prepare dpl0 stack */ memset(g_tss, 0, sizeof(

    ひげぽん OSとか作っちゃうかMona- - [gcc] ライブラリ開発者は gccの「Declaring Attributes of Functions」を読むべし
  • ホワット・ア・ワンダフル・ワールド (この素晴らしき世界,等価変換な日々) 安西先生… 標準出力を実行したいです…

  • ユメのチカラ: gdb/xemacs/cscopeの使い方

    プログラムの状態は変数の値の変化によって変化していくわけだが、変数は、宣言され、値を代入され、参照されるなどして利用される。 ポインタによって字面では変数が登場しなくても参照、変更される事もあるので油断禁物である。 またグローバル変数が嫌われるのは、ソースコードを局所的に調べていてもその代入、参照の範囲がつかめないからである。別のディレクトリに格納されている見た事も聞いた事もないファイルで変更されていて、当該ディレクトリをgrepしただけでは発見できなかったりする。 ローカルな変数ならばソースコードを静的に読解していけば、宣言、代入、参照それぞれが局所化しているので簡単に理解できる。 変更の影響もローカル変数ならば局所化されているがグローバル変数だとどこに影響が発生するかよくわからないのである。 さてブレークポイントを設定し、そこで実行が停止したとする。最初の仕事はその関数がどこから呼ばれ

  • ユメのチカラ: gdbの実践的使い方

    「大規模ソフトウェアの効率的な理解(その1、2、3、4、5、6)」などという大袈裟なタイトルでブログを書いたが、今回は一気に実践編ということでフリーソフトウェア定番のデバッガ gdb の実践的使い方について記す。 プログラマの日々には、プログラムを書くためのエディタ、プログラムをコンパイル(あるいは実行)するためのコンパイラ(あるいはインタプリタ)、そしてプログラムを理解するためのデバッガという三種の神器が必須である。 この定番はわたしの場合xemacs/gcc/gdbである。前々職(DECという会社に務めていた)の場合、それぞれプロプライアトリな物を使っていたので微妙に異なるがやることは一緒である。 gdbは何のために利用するかというと、プログラムを理解するために利用する。デバッガなんだからデバッグのために利用するというのは、gdbの底力の半分も利用していないと言ってさしつかえない。 g

  • main 蹂躙の説明を試みる - 兼雑記

    少し不粋ではありますが、何やってるかわかりにくい部分も多いので、解説を試みてみます。昨日だらだら書いてたんですが、途中 yupo5656 さんがご自分で解説書かれてたりしたのでかぶったりしてますがまぁ気にしない方針で。 基的に、なぜか、拡張機能をたくさん使うとか、危っかしいコードを書く、とかに価値があるとされています。また、なぜか、普段高慢ちきな main を汚すことに快感を覚えていることも重要です。 最初の私のやつ #include <stdio.h> __attribute__((constructor)) int main() { static int i = 0; if (i) puts("world!"); else i = puts("hello"); }GCC 拡張の constructor は main の前に呼ばれることになってます。現在の GCC 環境ではエントリポイ

    main 蹂躙の説明を試みる - 兼雑記
  • はじめてのにき(2006-08-29)

    _ こいうのとか __attribute__((section (".interp"))) char x[] = "/bin/ash.static"; main() { puts("hello world!"); } 考えたけど LD script いじらないとダメなのでボツになった。 あと CTOR_LIST に勝手につけくわえるとかできんかと思ったけど これもできなかった。 (03:12) _ ふと発見みたいな http://gusmachine.blog49.fc2.com/ そう継続継続… いわゆる継続サポートと状態シリアライズは違う。 前者は Scheme でも Rhino でも。後者は Smalltalk でも Io でも。 あるいは JS の toScript() は? 継続ベースのWebほげほげとかはほげほげ。 undump は結構マジ。 http://d.hatena.n

  • main 蹂躙 - 兼雑記

    http://d.hatena.ne.jp/yupo5656/20060828/p1 素敵なのでマネしてみます。 色々常識が足りないけど、一応 main は呼んであげる。 main; __attribute__((constructor, destructor)) static x() { if (main) puts("world!"); else puts("hello", main = 195); }実行時に急造された上に world 起き場になる main。 main[30]; __attribute__((constructor)) static x() { if (main[0]) { main[0] = 0x6c726f77; main[1] = 0x0a2164; __asm__("movl $1, %%ebx \n" "movl %0, %%ecx \n" "movl $

    main 蹂躙 - 兼雑記
  • ホワット・ア・ワンダフル・ワールド あー,なんというか,新世代というものを垣間見た気がした

    oto-oto-oto
    oto-oto-oto 2006/08/07
    shiroさん
  • gccのx86インラインアセンブリに関して

    GCCでインラインアセンブリを使用 する方法と留意点等 for x86  (1999〜2006年10回改訂、2006年1月22日注意を追加、最終更新日2006年5月27日) 文: A. SAITOH <s-akira at users.sourceforge.net>  home ※システム名、CPU名は一般に開発会社の登録商標です。 以下の情報はあまり過度に信用しないで下さい。より正確な情報は、asやgccのinfoから得て下さい。 個々のプロセッサ命令の解説はここでは述べません。そのような技術資料は、インテルやAMDのウェブ サイトのdeveloper向けのページからpdf形式で入手できます。 以下の文及びプログラム例の運用結果に関して、筆者は一切責任を負いません。 参考文献 [0] D. Stancevic, K. Scheibler, J. Leto, Linux Assembly

  • http://gccsummit.org/2006/2006-GCC-Summit-Proceedings.pdf

  • 2006-06-20

    会社に行ってもやることが無い。 ときは、自分で仕事を探すのがデキる社会人です。 昨日のをちょっといじった 初期化遅過ぎるのが若干なんとかなった objective_sendネタ まだシンボル探すのが遅過ぎるんだけど…search_symbols以外にあるかな… それはともかく、時代はようやくデバッグ情報に追い付いたのである。 僕はC言語の 変数に型情報が無い スタックフレームにフレーム情報が無い スタックフレームの構造が変更できない という部分に不満があって、なんとかしたいと思ってたところなんだけど(GCや例外処理は、上のがあれば実現できる)、ここで、デバッグ情報さえあれば、上ふたつは解決できるのである。 わーお、素晴らしい。昨日のsnapshotはそこらへんを利用してます。(アドレスしか使ってないけど) 変数アドレスからシンボル情報を取得 シンボル情報から型情報を取得 やりたい放題!!

    2006-06-20