Path: chuka.playstation.co.uk!news1.scei.co.jp!usenet From: minoru@isl.intec.co.jp (Minoru Matsumoto) Newsgroups: playstation.ny.program.freetalk Subject: Re: =?ISO-2022-JP?B?GyRCIzI+aCVGITwlViVrJE9JLE1XJEokJCEpGyhC?= Date: 14 Feb 1998 07:27:29 GMT Organization: INTEC System Laboratory Inc. Ltd. Lines: 49 Message-ID: <34e54507p1610@base.minoru.isl.intec.co.jp> References: <34E45E3B.E47CDE8D@geocities.com> NNTP-Posting-Host: 210.132.156.5 Mime-Version: 1.0 Content-Type: Text/Plain; charset=ISO-2022-JP X-Newsreader: WinVN 0.99.7J PL01 (x86 32bit) cqz03222 の松本 実です。 In article <34E45E3B.E47CDE8D@geocities.com>, t_youhei@geocities.com says... > >こんばんは、たこのすけです。 > >ホームページで最適化実験室というのを書いているのですが、 >今回の実験でxの2乗を求める場合、テーブルを使うよりか >素直にx*xとした方が早いという結果がでました。 最近の CPU は乗算器内蔵なので、以前より計算時間の差はずっと 縮まっています。特にマトリクス乗算器内蔵タイプでは、足し算と 基本的に同じ速度です。 R3000 はマトリクスタイプではないみたいですが乗算器内蔵で、 CPU の他の機構とは独立に動作します。掛け算の結果を後で使う ようなプログラムでは、この並列化の効果が出ます。 試しに、 void test() { int table[10], k; for (k = 0; k < 10; ++k) table[k] = k * k; } というプログラムを -O3 オプションでコンパイルさせたところ、 move $3,$0 move $4,$sp $L21: mult $3,$3 <---(1) addu $3,$3,1 <---(2) slt $2,$3,10 <---(3) mflo $5 <---(4) #nop #nop sw $5,0($4) .set noreorder .set nomacro bne $2,$0,$L21 addu $4,$4,4 となりました。(1) は掛け算、(4) は結果を取り出しているところですが、 (2), (3) は乗算器と並列実行するようになっています。 テーブルアクセスの方が遅いのは、メモリアクセス速度が CPU クロックより ずっと遅いからです。スクラッチエリアを使ったら結果が変わるでしょう。 # LSI-C のように、CPU レジスタを使いまわすという手もある ---