ROMとRAMのどちらからプログラムを実行するのが速いですか?


8

電子工学の出身である私たちのほとんどは、SRAMがDRAMよりも速いことを知っています。しかし、RAMとROMを比較することになると、私にはわかりません。

私の質問はマイクロコントローラーに関連しています:「コードがRAM / ROMから直接実行される場合、そのパフォーマンスはより良くなりますか?? 1)RAMからの実行または2)ROMからの実行または3)両方が同等に実行されます」

また、ROMの読み取り速度が高くなるように設計されていることも考慮してください。一方、RAMの場合、読み取り速度と書き込み機能のトレードオフがあります。


10
(徹底的に)データシートを読むのが最善の方法です。フラッシュメモリよりもRAMからプログラムを実行する方が高速な場合があります。マイクロによっては、RAMからプログラムをまったく実行できないものもあれば、同じ速度で実行できるものもあります。
Spehro Pefhany

コメントを追加することはできませんが、参考にしようとしています。ROMが実際に使用しているRAMより速いかどうかに依存します。速度は同じですか?
OzzieSpin

現在の多くのARM Cortex-Mパーツは、SRAMから実行できるものの主要な例ですが、フラッシュへの専用の命令パスを使用できないため、実行すると遅くなります。逆に、フラッシュへのデータアクセスは、RAMへのアクセスよりも遅くなる可能性があります
Chris Stratton、

しかし、わずかに古いARM7チップ(私の経験はLPC2106とLPC2148を使用していた)を使用すると、RAMからの実行は、FLASHからの実行よりも高速になります。これは、クリスの答えとともに、私たちが言えることは「依存する」ことだけであることを証明しています。
Wouter van Ooijen

ハードウェアを既に持っている場合、最も簡単な方法は、2つのシナリオを実行して比較することです。そうでない場合は、データシートが最善の策です。
Luaan

回答:


16

データシートには、各命令にかかる時間と、RAMまたはROMから実行する場合にどのような違いがあるかが記載されています。

RAMから実行するオプションを提供するマイクロコントローラーの場合、それはおそらくより高速であり、追加のRAMスペースを使用してコードを実行する主なポイントとなるでしょう。また、フェッチのオーバーラップの問題が発生する場合もあります。別のメモリであり、RAMアクセスを同時に実行できるため、ROMから実行する方が高速な場合があります。

繰り返しますが、特定のマイクロについて知る唯一の方法は、データシートを読むことです。


レジスタから実行する方がさらに高速です。
Joshua

@ジョシュアレジスターから実行されるプログラムを使って何をするのか、何か例はありますか?それはひどく賢いように見えますが、かなり小さなプログラムサイズに制限されています。64kBグラフィックのデモを聞いたことがありますが、16レジスタのデモはありますか?=)
Cort Ammon、2015

3
@CortAmmon:512個のレジスターがあり、そのうちの400個にはプログラムコードが含まれています。RAMは3倍遅く、ROMは非常に遅いため、起動時にRAMにコピーされます(数百ミリ秒かかります)。300レジスタに収まるSDカード初期化/リーダーがあり、GPIOピン以外のハードウェアサポートはありません。ライターは別の100程度のレジスターを取るので、全体がレジスターに収まりません(これは興味深いことをするのに十分ではありません)が、イニシャライザはもう必要ないため、上書きします。
Joshua

9

それは完全にメモリとCPUアーキテクチャに依存します。経験則として、SRAMはフラッシュよりも高速で、特に高速MCU(> 100 MHz)で高速です。SRAMビットセルは(多かれ少なかれ)ロジックレベルの出力を生成しますが、フラッシュメモリはより遅い電流検出プロセスを実行する必要があります。

どれだけ高速か(もしあれば)は、アーキテクチャー(メモリのワードサイズ、それぞれの待機状態の数、キャッシュの存在、CPU命令のサイズなど)によって異なります。周波数が十分に低いと、フラッシュとRAMの待機状態がゼロになる可能性があるため、同じ速度で実行される可能性があります。

コードも重要です。コードが厳密に線形(分岐なし)である場合、フラッシュは命令をプリフェッチして、より高い周波数でもCPUを飽和状態に保つことができます。Olin氏が述べたように、コードとデータが異なるメモリにある場合、別々のプログラムとデータの読み取りパスを持つハーバードアーキテクチャCPUは異なる動作をする可能性があります。

メタルROM(およびFRAMなどの他の不揮発性メモリ)には独自の特性があり、SRAMほど高速ではない場合があります。書く能力は必ずしも違いを生むわけではありません。これは、ビットセル出力と検出回路の特性に関するものです。

データシートは速度の違いの大まかなアイデアを提供しますが、確実に知る唯一の方法はコードをプロファイルすることです。


1

「プログラムの実行」には、同期クロックを備えたCPUが必要です。遅いメモリは、システム全体を十分に遅いクロックで実行するか、挿入wait states(フェッチとデコードのフェーズの間に余分な何もしないクロックサイクル)を実行して、特定のアドレス範囲に対してのみアクティブにすることができます(たとえば、古代の8085を参照)。 CPU命令フェッチは、セットアップ/ホールドインターバル中にデータが変化しない限り、データが最終値に落ち着くタイミングを正確に認識しません。

マイクロコントローラは通常、すべてのメモリをオンチップで備えているため、特に明記しない限り、メモリシステムはすべてゼロ待機状態であると想定します。(ただし、確認のためにデータシートをお読みください)。典型的なマイクロコントローラーは、デスクトップと比較してよりシンプルなシングルチップソリューションであることを意図しているため、マイクロコントローラーでは待機状態は起こりそうにありません。したがって、マイクロコントローラがオンチップのメモリ速度を一致させないことはまずありません。

より高速なメモリは、一般的にプレミアム(高電圧、低静電容量、より多くの需要)を要します。80xx86は、L2キャッシュに高速SRAM、L1キャッシュにさらに高速のSRAMがあり、メモリコントローラーに接続された低速の低速DRAMがたくさんあります。この種のシステムは、マイクロコントローラーよりもはるかに複雑であり、問​​題の範囲を超えています。(しかし、コンピューターエンジニアには非常に興味があります!)


1
実際、完全に一致する設計は制約なしでは不可能です。プロセッサは、命令とデータメモリを分離するか、非メモリデータ命令でメモリ速度を十分に活用しないか、待機状態に陥るか、マルチポートメモリを使用します。
Chris Stratton

2
待機状態は、高性能マイクロコントローラではかなり一般的です。フラッシュが遅い。
Adam Haun、2015

@AdamHaun:裏側では、多くの内部フラッシュアレイが一度に多くのワードを読み取ることができます。コードがフラッシュ内の任意の場所にジャンプする場合、最初の命令をフェッチするのに数サイクルかかる場合がありますが、それがフェッチされると、次のいくつかの命令はさらに遅延することなく使用できる場合があります。多くの場合、バッファの終わり近くで何かにアクセスすると、システムは次の単語のセットをロードする準備をします。
スーパーキャット2016年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.