2

BASIC (Parallax BASIC Stamp) の縮小バージョンを実行している組み込みプロセッサがあります。ループでは、SPI バス経由で 1024 個の値を書き込んでいます。

コンパイルされた言語では、ループをアンロールすることで速度を上げることができます (ループにより多くのステートメントを入れて、オーバーヘッドとステートメントの比率を減らします)。ただし、BASIC は解釈型言語であり、各ステートメントは実行前に解釈されるため、よくわかりません。

利用可能なピンを見つけてそれにパルスを書き込んでから、オスコープで測定する必要があるため、プロファイリングは困難です。

理論的な観点から、BASIC でのループのアンローリングには速度の利点がありますか?

4

1 に答える 1

1

理論的には、ループを展開すると、ループ内のインクリメントと比較にかかる時間が短縮されます。ループのオーバーヘッド時間が短縮されるため、パフォーマンスが向上します。

解釈されたプログラムで得られる時間は、コンパイルされたプログラムほど重要ではない場合があります。インタープリターが命令をフェッチし、解釈 (コードのビルド) して、ステートメントのコードを実行するために必要な時間のオーバーヘッドがあります。ループの展開にかかる時間を大幅に節約するには、時間の節約がこのオーバーヘッドよりも大きくなければなりません。

マイクロプロセッサーとは異なり、インタープリターは実行速度が最適化されていない場合があります。最新のプロセッサには、高速キャッシュ、分岐予測、および先読み技術が備わっています。他の命令が実行されるときに、新しい命令をキャッシュにフェッチすることさえできるものもあります。ループ展開は、ジャンプの数を減らし、実行をより予測可能にすることで、これらの機能を利用します。コンパイル済み言語の場合、これにより大幅な節約が追加されます (大規模な反復の場合)。ほとんどの通訳者はこれらの機能を採用していない可能性があるため、このパフォーマンス時間の節約は当てはまらない場合があります。

パフォーマンスの向上を判断するには、測定が最適です。私の場合、測定を実行するためのスケジュール ヒットを正当化するのに十分なユーザーの苦情が必要です。

于 2011-05-14T21:46:03.017 に答える