アカウント名:
パスワード:
今でも電気ポットみたいなのには使われているという話です。
この業界、自分や自分の知っている人が「発明した」ことにするのが好きですよね。試すことにコストのかからないソフト関係では、残念ながら大抵のことは既にやられていると思ったほうが良いとつくづく思います。
# ソースを示せないのでAC
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
普通のやつらの下を行け -- バッドノウハウ専門家
コンパイラに勝つ方法 (スコア:1)
ちょっとバイナリから外れるけど(汗
Re:コンパイラに勝つ方法 (スコア:2, 興味深い)
まだキャッシュと言うものが無くてCPU内部クロックとメモリアクセス速度とが同じ時代はいろいろありましたがね。
アドレス演算はインクリメントよりデクリメントの方が速かったとか、
割り算より掛け算が早いから逆数掛けてシフトするとか、
1/4正弦テーブルで16bitSinCosを引いてくるとか、
PCレジスタ相対でアドレス求めるとクロックが1稼げるとか(1命令3クロックとか4クロックの時代)、
任意の範囲でループ無しのテーブルジャンプでメモリコピーとか(いまではキャッシュに収めてループの方が早い)
ハハハ
Re:コンパイラに勝つ方法 (スコア:1)
http://www.smallnews.net/azuco/column/amd64/hornet.htm
手前味噌ですけど、テーブルジャンプとか微妙な速度なんですよね・・・
プロセッサによっても特性が違いますし・・・・・
そういうのを踏まえて、達人ならなんか奇跡を見せてくれるんじゃないのかなとw
余計なもの覚悟・・・(Re:コンパイラに勝つ方法) (スコア:2, 興味深い)
タイマー代わりにして、ゲームの発射ボタンのトリガ判定に
していた、なんというのを読んだことがあります。
Apple IIについての書籍に書いてありました。書いたのは、
先日Apple Iを600万円と鑑定した柴田さんです。
以上、リンゴ屋の完全な横やりでした。失礼しました。
-- gonta --
"May Macintosh be with you"
Re:余計なもの覚悟・・・(Re:コンパイラに勝つ方法) (スコア:1, 興味深い)
今でも電気ポットみたいなのには使われているという話です。
この業界、自分や自分の知っている人が「発明した」ことにするのが好きですよね。試すことにコストのかからないソフト関係では、残念ながら大抵のことは既にやられていると思ったほうが良いとつくづく思います。
# ソースを示せないのでAC
Re:コンパイラに勝つ方法 (スコア:1, すばらしい洞察)
で、それを手動でtable jumpにしても改善するわけ無いじゃん。
>いわゆる旧世代の高速化技法というのはほぼ死滅したわけで、
じゃなくて、コンパイラがすべて取り込んだの。
(そして適切に使い分けてる)
>>割り算より掛け算が早いから逆数掛けてシフトするとか
こんなのも当然やってるよ。(シフトは不要だと思うが)
>>1/4正弦テーブルで16bitSinCosを引いてくるとか
これは頻度にもよるが、計算した方が早かったりする。
Re:コンパイラに勝つ方法 (スコア:1)
少々荒いながらも精度の見積もりしつつ高速低負荷演算ならこれかな?
Re:コンパイラに勝つ方法 (スコア:0)
C++ → アセンブラリスト → スーパースケーラ・キャッシュ等にあわせて最適化
ということを説明してある本はいくつかありましたね。
ちょっと前ならMMXとか3DNow!などでコンパイラと差をつけることはできましたが
今はそれすらコンパイラがやってくれるようになりましたからx86/x64系統では
人がコンパイルに勝つのはかなりの至難の技で、できたとしてもすぐに陳腐化
してしまう技術になってしまうかと・・・
Re:コンパイラに勝つ方法 (スコア:1)
>2. 割り算より掛け算が早いから逆数掛けてシフトするとか、
>3. 1/4正弦テーブルで16bitSinCosを引いてくるとか、
>4. PCレジスタ相対でアドレス求めるとクロックが1稼げるとか(1命令3クロックとか4クロックの時代)、
>5. 任意の範囲でループ無しのテーブルジャンプでメモリコピーとか(いまではキャッシュに収めてループの方が早い)
1,4 ---- そんなことはコンパイラが知っている
2,3,5 -- アセンブラに特化した手法ではなく高級言語で書けばよい
つーわけで「超絶アセンブラ」の例になってないと思う。
2は「シフト」とあるんで固定小数の話かな?
整数除算命令がない(ので関数呼び出しになる)とか極めて遅いCPUとかあるので、今でも有効。
浮動少数の場合、しかるべき最適化オプション(gccなら-ffast-math)をつけるとコンパイラがやる。
演算精度の問題で同値にならないことがあるので、標準では有効にならないけど。
Re:コンパイラに勝つ方法 (スコア:1)
文脈読んでくださいね~、だれも今の超絶アセンブラの例など書いてませんよと。
AZUCOさんが「そうです。いわゆる旧世代の高速化技法というのはほぼ死滅したわけで、」と書けるのは文脈読めてるからですよね。
ちなみにコンパイラを過信すると・・・ってのはよくある話です。
当時のコンパイラだって”コンパイラが知っている”ハズのことをやってないのは珍しくもないし今でも・・・。
>2は「シフト」とあるんで固定小数の話かな?
>整数除算命令がない(ので関数呼び出しになる)とか極めて遅いCPUとかあるので、今でも有効。
そうです、正解。
「CPU内部クロックとメモリアクセス速度とが同じ時代」と言うのは浮動小数点演算器はオプション装備で普通は無くても不思議ではなかった時代ですよと暗黙に示してもおります、メジャーCPUならi286とか68000が末期あたりかな?
Intelだとi386/i486で浮動小数点演算器有りのDXと無しのSXが並列で売られCPUのデフォルト標準装備になったなのはPentiumからだったかなと曖昧な記憶。
680x0系も"EC"が頭に付くと浮動小数点演算器無しバージョンになった68020/68030、これ以降は涙無くては語れない。
Re:コンパイラに勝つ方法 (スコア:0)
(正確にはUINT_MAX/3+1をかける)
Re:コンパイラに勝つ方法 (スコア:1)
これは、アーキテクチャに依存しない一般的なテクニック。
Re:コンパイラに勝つ方法 (スコア:0)
勝ちたいならグローバル最適化の能力をつけるのが吉?つまり、アルゴリズムだけど。
#未来の処理系はデータの使われ方から最適アルゴリズムを導出したりして・・・
Re:コンパイラに勝つ方法 (スコア:1)
すいません、profile guided optimization (PGO) という汎用的なテクニックなんですけど。
すでに商用コンパイラでも実装されています。
Re:コンパイラに勝つ方法 (スコア:1)
元ACの
> #未来の処理系はデータの使われ方から最適アルゴリズムを導出したりして・・・
で重要なのは「最適アルゴリズムを導出」ってところで、
バブルソートなソースから、処理するデータによって
クイックソートなコードを吐いたり
バケットソートなコードを吐いたり
してくれるようなコンパイラを想定しているのでは?