Upload
others
View
1
Download
0
Embed Size (px)
Citation preview
Copyright © 2002 ARM Limited. All rights reserved.
アプリケーションノートアプリケーションノートアプリケーションノートアプリケーションノート
ARMulatorを使用したベンチマーク
資料番号:ARM DAI 0093AJ-00
発行:2002年 3月
Copyright ARM Limited 2002
93
Copyright © 2002 ARM Limited. All rights reserved.
アプリケーションノートアプリケーションノートアプリケーションノートアプリケーションノート 93ARMulatorを使用したベンチマークを使用したベンチマークを使用したベンチマークを使用したベンチマーク
Copyright © 2002 ARM Limited. All rights reserved.
リリース情報リリース情報リリース情報リリース情報
アプリケーションノート 93の改訂履歴は以下の通りです。
改訂履歴改訂履歴改訂履歴改訂履歴
日付日付日付日付 発行発行発行発行 変更内容変更内容変更内容変更内容
2002年 3月 A 初版
著作権著作権著作権著作権
ARM、ARM Poweredロゴ、Thumb、StrongARMは、ARM社の登録商標です。
ARMロゴ、AMBA、Angel、ARMulator、EmbeddedICE、ModelGen、Multi-ICE、ARM7TDMI、ARM9TDMI、TDMI、STRONGは、ARM社の商標です。
本書に記載されている他のすべての製品・サービスは、その所有者の商標です。
守秘義務守秘義務守秘義務守秘義務
本書は誰でも閲覧することができます。したがって配布に関する規定はありません。
アプリケーションノートアプリケーションノートアプリケーションノートアプリケーションノート 93に関するご意見に関するご意見に関するご意見に関するご意見・ご質問・ご質問・ご質問・ご質問
本アプリケーションノートに関するご意見等がございましたら、電子メールに以下の情報をご記入
の上、[email protected]までお寄せ下さい(英文のみ)。
• 資料名
• 資料番号
• ご意見のあるページ番号
• ご意見の内容
補足または改善すべき点についてのご提案もお待ちしています。
ARMホームページホームページホームページホームページ
http://www.arm.com
目次
Copyright © 2002 ARM Limited. All rights reserved.
目次目次目次目次
1 はじめにはじめにはじめにはじめに ....................................................................................................................................4
2 Dhrystoneベンチマークベンチマークベンチマークベンチマーク...........................................................................................................52.1 概要..................................................................................................................................52.2 Dhrystoneのビルド .........................................................................................................5
3 性能ベンチマーク性能ベンチマーク性能ベンチマーク性能ベンチマーク ......................................................................................................................73.1 性能測定 ..........................................................................................................................73.2 サイクルカウントの例:ARM7TDMIを使用した Dhrystone ...........................................73.3 キャッシュ非搭載コアの統計データ................................................................................83.4 統計データの解釈 ............................................................................................................9
4 リアルタイムシミュレーションリアルタイムシミュレーションリアルタイムシミュレーションリアルタイムシミュレーション ..............................................................................................104.1 ARMulatorの性能 ..........................................................................................................104.2 シミュレーション時間の読み出し .................................................................................104.3 ARMulatorのクロック周波数 ........................................................................................104.4 マップファイル..............................................................................................................114.5 メモリ統計データの読み出し ........................................................................................134.6 リアルタイムシミュレーションの例:Dhrystone..........................................................14
5 キャッシュ搭載コアのベンチマークキャッシュ搭載コアのベンチマークキャッシュ搭載コアのベンチマークキャッシュ搭載コアのベンチマーク .......................................................................................165.1 概要................................................................................................................................165.2 ARMulatorキャッシュモデル ........................................................................................175.3 キャッシュ搭載コアの統計データ .................................................................................185.4 キャッシュの初期化.......................................................................................................195.5 キャッシュ非搭載コアの性能が低くなる理由 ...............................................................195.6 キャッシュ搭載コアのその他の統計データ...................................................................205.7 キャッシュ効率の評価 ...................................................................................................215.8 キャッシュ搭載コアの統計データの解釈 ......................................................................225.9 密結合メモリ .................................................................................................................24
6 参考文献参考文献参考文献参考文献 ..................................................................................................................................27
7 付録付録付録付録 .........................................................................................................................................287.1 ARMulatorで判明している問題 .....................................................................................28
はじめに
4 Copyright © 2002 ARM Limited. All rights reserved. Application Note 93ARM DAI 0093AJ-00
1 はじめにはじめにはじめにはじめに
性能が最重要視される組み込みアプリケーションを開発する場合には、ソフトウェアをハードウェ
アに実装する前に、そのソフトウェアの性能を評価できることが望まれます。事前に評価すること
により、コード中で最適化が必要な部分の見極めや、クロック周波数やメモリサブシステム要件の
見積りといったことが可能になります。
ADS(ARM デベロッパスイート)に同梱されている ARMulator(ARM 命令セットシミュレータ)を使用すれば、正確なベンチマークを実行し、コード実行中の統計データを収集することができ
ます。
注:注:注:注: ARMulatorは C言語ベースの ARMコアのモデルで構成されているため、実ハードウェアの動作を完全に再現できるとは限りません。100%正確なシミュレーションを必要とする場合は、HDL モデルを使用する必要があります。
本アプリケーションノートでは以下について説明します。
• ADS 1.2に同梱されている AXDデバッガと ARMulatorを使用したベンチマークにおけるプロセス
• ARMulatorが生成した統計データの意味と目的
• キャッシュ搭載コアのベンチマークにおける注意事項
本アプリケーションでは、ベンチマークのテストプログラムとして、Dhrystone ベンチマークアプリケーションのサンプルを使用します。Dhrystone ではシステム性能を厳密に測定できないことが知られていますが、ARMulatorのベンチマーク機能を理解する上では有効なプログラムです。
注:注:注:注: 本アプリケーションノートに記載しているベンチマークの分析結果は、特定のコアの動作を反映するものです。その情報のほとんどは一般的なものですが、他のコアでは異なる動作が見られる場合もあります。
注:注:注:注: 本アプリケーションノートでは、特に記載がない限り、ADS 1.2の使用を前提としています。ADSの旧バージョンと旧ソフトウェア開発ツールキット(SDT)でも、全般的には同じような機能を使用できます。
Dhrystoneベンチマーク
Application Note 93 Copyright © 2002 ARM Limited. All rights reserved. 5ARM DAI 0093AJ-00
2 Dhrystoneベンチマークベンチマークベンチマークベンチマーク
2.1 概要概要概要概要ARM(および業界各社の大半)が提唱するMIPS値は、「Dhrystone VAX MIPs」を指しています。この測定の背後にある考えは、マシン(当社の場合は ARM システム)の性能を基準マシンの性能と比較することです。業界では基準 1 MIPマシンとして VAX 11/780を採用しています。
ベンチマークは、システムの 1 秒当たりの Dhystone 数を測定し、その結果を基準マシンで得られた 1秒当たりの Dhystone数で割ることによって計算されます。
したがって、「80 MIPS」は「80 Dhrystone VAX MIPS」を意味し、そのシステムの処理速度がVAX 11/780の 80倍であることを表しています。
基準マシンと比較する理由は、命令セットの違いについて論じる必要がないからです。RISC プロセッサは、単純命令を数多く使用する傾向にあります。x86 や VAX のような CISC マシンは、複雑命令を数多く使用する傾向にあります。単にマシンの 1秒当たりの命令実行数をカウントした場合、単純命令を使用するマシンの方が高い数値を示しますが、かといってジョブをより速く処理できる
かどうかは分かりません。あるマシンが 1 つの仕事を処理する速さと、別のマシンが同じ仕事を処理する速さを比較することにより、命令セットの違いを問題にする必要がなくなります。
一般的に使用される Dhrystoneベンチマークプログラムには以下の 2つのバージョンがあります。
• Dhrystone 1.1• Dhrystone 2.1
ARM では Dhrystone 2.1 で得られた数値を使用しています。VAX 11/780 は 1757 Dhrystone/秒を実行します。
ARM7ファミリの最大性能は、0.9 Dhrystone VAX MIPS/MHzです。
ARM9ファミリの最大性能は、1.1 Dhrystone VAX MIPS/MHzです。
上記の数値は、32ビット幅、ウェイトステート 0のメモリから ARMコードが実行されると仮定した場合の数値です。ウェイトステートが挿入されている場合、あるいは(キャッシュ搭載コアで)
キャッシュがディセーブルされている場合には、上記のパフォーマンスの値は低くなります。
1 秒当たりに実行される ARM 命令の数は、単に周波数をそのコアの平均 CPI(命令当たりサイクル数)で割ることによって推定できます。
ARM7ファミリの平均 CPIは、約 1.9サイクル/命令です。
ARM9ファミリの平均 CPIは、約 1.5サイクル/命令です。
2.2 Dhrystoneののののビルドビルドビルドビルド
Dhrystone アプリケーションは、ADS インストールディレクトリの examples\dhry サブディレクトリ内にあります。ベンチマークを行う場合は、この Dhrystoneディレクトリの作業用コピーを作成して使用することを推奨します。
デフォルトでは、ADS 付属のコンパイラは高度に最適化されたコードを生成します。コードサイズ、実行速度、デバッグビューの 3つのバランスは、コンパイラオプションを指定することによって制御できます。以下の例で使用されるイメージは、最大実行速度に基づいて構成されます。
ここでは、リンクなしの設定で Dhrystoneファイルをコンパイルします。
armcc -c -Otime -W -DMSC_CLOCK dhry_1.c dhry_2.c
オプション-Otime の設定により、コードサイズよりも速度を重視して最適化されたコードが生成されます(デフォルトでは-Ospace が設定されます)。また、オプション-DMSC_CLOCK の設定により、処理時間測定に Cライブラリ関数 clock()が使用されます。
Dhrystoneベンチマーク
6 Copyright © 2002 ARM Limited. All rights reserved. Application Note 93ARM DAI 0093AJ-00
コンパイラの最適化と、他のコマンドラインオプションの詳しい説明については、ADS 1.2に同梱されている「コンパイラ/ライブラリガイド」の第 2章と第 3章を参照して下さい。
コンパイラによって生成される多数の警告は、無視するか、-W オプションを使用して抑制できま
す。これらの警告が生成されるのは、Dhrystone アプリケーションが ANSI C ではなくカーニガン&リッチー方式の Cでコーディングされているためです。
ベンチマークの比較では、オプション-g を使用しないことを推奨します。理由は、このオプションを使用すると、デフォルトでコンパイラの最適化レベルが最低に設定されるためです。-g スイッチオプションを使用する場合は、このデフォルトをオーバライドして最適化レベルを最大に
設定するため、-O2 スイッチオプションを同時に使用する必要があります。同様に、CodeWarriorプロジェクトファイルを使用する場合には、「Release」バージョン(最適化レベル最大、デバッグなし)を使用して Dhystoneベンチマークプログラムを作成する必要があります。
リンクを実行するには以下のように指定します。
armlink dhry_1.o dhry_2.o -o dhry.axf
詳細については、examples\dhry ディレクトリ内の readme.txt ファイルを参照して下さい。
また、同じベンチマークプログラムを ANSI Cで記述した dhryansiサンプルプログラムを使用することができます。このサンプルは ADSに付属しており、ADSインストールディレクトリのexamples\dhryansi サブディレクトリ内にあります。
2.2.1 CodeWarriorの使用の使用の使用の使用
Dhrystone プロジェクトファイル dhry.mcp を CodeWarrior にロードします。プロジェクトウィンドウから[Release]を選択し、リリースビルドを生成するように変更して下さい。Dhrystone をビルドするには、[Make]ボタンをクリックするか、F7キーを押します。
性能ベンチマーク
Application Note 93 Copyright © 2002 ARM Limited. All rights reserved. 7ARM DAI 0093AJ-00
3 性能ベンチマーク性能ベンチマーク性能ベンチマーク性能ベンチマーク
性能を向上させる鍵は、タスクの実行に必要なマシンサイクル数を最小限に抑えることです。
3.1 性能測定性能測定性能測定性能測定
AXD では、デバッガ内部変数$statistics に、バスとコアに関する統計データが保持されます。この統計データは、[System Views] -> [Debugger Internals]を選択するか、コマンドラインインタフェースプロンプトで print $statistics を入力することによって表示できます。
$statistics
この変数を使用して、ARMulator が保持している統計データを出力できます。この変数は読み出し専用です。
ADW デバッガ(ADS 1.1 とそれ以前のバージョンのみに付属しています)では、以下の変数も定義されています。
$statistics_inc
$statistics または$statistics_inc が前回表示されてからの各タイプのサイクル数を表示します。
AXD においても、新しい参照ポイントを作成することにより、同様の機能を使用できます。その場合は、0から始まる別のカウンタセットが作成されます。
3.2 サイクルカウントの例サイクルカウントの例サイクルカウントの例サイクルカウントの例::::ARM7TDMIを使用したを使用したを使用したを使用した Dhrystoneこの例では、Dhystone アプリケーションのメインループによって実行される命令の数と、それに費やされるサイクル数が参照されます。ループを一時停止させる位置は、繰り返しごとに呼び出さ
れる関数 Proc_6 のエントリポイントが適しています。
コードの性能を向上させるため、コンパイラがインライン関数を選択する場合があります。この決
定基準は、コンパイラオプションの変更によって変わります。
3.2.1 手順手順手順手順
1 Dhrystone プロジェクトをまだビルドしていない場合は、セクション 2 の説明にしたがってこれをビルドします。
2 AXD を起動します。Codewarrior を実行している場合は、メニューから[Project]->[Debug]を選択して AXD を起動し、Dhrystone プロジェクトをロードします。コマンドラインを使用する場合は、axd dhry.axf と入力します。
3 AXDで[Options] -> [Configure Target...]を選択し、ターゲットに「ARMUL」を選択して、[Configure]ボタンをクリックします。使用するプロセッサに ARM7TDMIを選択し、[Floating Point Emulation]のチェックボックスがオフになっていることを確認して、[OK]をクリックします。コンフィギュレーションダイアログボックスで[OK]をクリックします。最後に使用したイメージを再ロードするかどうかを尋ねるメッセージが表示されたら、
[Yes]をクリックします。
4 [Processor Views] -> [Low Level Symbols]を選択し、[Low Level Symbols]ウィンドウ内でProc_6 を検索します。その行の上で右クリックし、[Locate Disassembly]を選択します。[Disassembly]ウィンドウ内でこの行にブレークポイントを設定します。
5 [Go]ボタンをクリックする(または F5キーを押す)と実行が開始され、プログラムがmain まで実行されます。もう一度[Go]をクリックしてプログラムを実行し、プロンプトが表示されたら、Dhrystoneを少なくとも 2回実行するように要求します。プログラムはProc_6 に設定されたブレークポイントまで実行し、そこで停止します。
6 [System Views] -> [Debugger Internals]を選択し、[Debugger Internals]ウィンドウ内の[Statistics]タブをクリックします。[Statistics]枠内で右クリックし、[Add New ReferencePoint]を選択します。名前の入力を促すメッセージが表示されたら適切な名前を入力し、[OK]をクリックします。
7 [Go]ボタンをクリックします。Proc_6に設定されたブレークポイントに再度到達すると、ループの 1 回の繰り返しに費やされた命令数とサイクル数を反映するように、参照ポイントの内容が更新されます。
性能ベンチマーク
8 Copyright © 2002 ARM Limited. All rights reserved. Application Note 93ARM DAI 0093AJ-00
3.2.2 結果結果結果結果
以下の表は、ループの 1回の繰り返しに関して、上記の手順にしたがって得られた結果を示しています。
命令命令命令命令 Sサイクルサイクルサイクルサイクル Nサイクルサイクルサイクルサイクル Iサイクルサイクルサイクルサイクル Cサイクルサイクルサイクルサイクル 合計合計合計合計
308 349 156 53 0 558
注:注:注:注: 使用する ADS のバージョンと、ARMulator で設定した対象プロセッサにより、上記の結果とは若干異なる場合があります。
3.3 キャッシュ非搭載コアの統計データキャッシュ非搭載コアの統計データキャッシュ非搭載コアの統計データキャッシュ非搭載コアの統計データ
AXD では各コアに関する多数の統計データが表示されます。これらの統計データは、フォンノイマン型とハーバード型の 2つのメモリアクセスアーキテクチャに基づくカテゴリに分類することができます。以下ではこの統計データについて説明します。
キャッシュ搭載コアの統計データについては、セクション5.3を参照して下さい。
3.3.1 フォンノイマン型コアの例フォンノイマン型コアの例フォンノイマン型コアの例フォンノイマン型コアの例::::ARM7TDMI
フォンノイマン型のコアでは、データアクセスと命令アクセスの両方が 1つのバスで行われるため、サイクルタイプはこの両方のメモリアクセスのタイプを表しています。
Sサイクルサイクルサイクルサイクル シーケンシャルサイクルを示します。CPU は同一アドレスに対する転送、もしくは直前のアドレスから 1ワードまたは 1ハーフワード後のアドレスからの転送を要求します。
メモリ制御シグナル:SEQ=1, nMREQ=0
Nサイクルサイクルサイクルサイクル 非シーケンシャルサイクルを示します。CPU は、前のサイクルで使用されたアドレスと無関係のアドレスに対する転送を要求します。
メモリ制御シグナル:SEQ=0, nMREQ=0
Iサイクルサイクルサイクルサイクル 内部サイクルを示します。CPU は内部機能を実行しているため(またはキャッシュから実行されているため)、転送を要求しません。
メモリ制御シグナル:SEQ=1, nMREQ=1
Cサイクルサイクルサイクルサイクル コプロセッササイクルを示します。
メモリ制御シグナル:SEQ=0, nMREQ=1
合計合計合計合計 Sサイクル、Nサイクル、Iサイクル、Cサイクルの合計を表します。
コアによっては、ISサイクル数が生成されます。このサイクルは、Iサイクルの次にシーケンシャルサイクルが続く特殊なサイクルです。このサイクルのタイミングは、メモリコントローラの実装に
依存します。このサイクルでは、I サイクルの間にアドレスを投機的にデコードすることから開始できるため、S サイクルが発生する場合には高速で S サイクルを発行できます。したがって、いわゆる「IS併合」サイクルは、シミュレーションで特別に処理する必要があります。
性能ベンチマーク
Application Note 93 Copyright © 2002 ARM Limited. All rights reserved. 9ARM DAI 0093AJ-00
3.3.2 ハーバード型コアの例ハーバード型コアの例ハーバード型コアの例ハーバード型コアの例::::ARM9TDMI / ARM9E-S
ハーバード型のコアでは、データと命令に個別のバスが使用されるため、データアクセスと命令
フェッチを同時に実行することができます。
ハーバードメモリシステムの設計が困難であることから、ハーバード型コアがそのままの状態で使
用されることは少なく、一般的にはキャッシュ搭載モデルが使用されます。通常、このようなコア
ではキャッシュレベルでハーバード方式が採用され、メモリインタフェースにはフォンノイマン方
式が採用されます。
そのままのハーバード型コアにデフォルトで使用される ARMulator のメモリモデルは、命令アクセスとデータアクセスの同時実行を可能にするために、デュアルポート RAM をシミュレートします。生成されるサイクルタイプは以下の通りです。
コアサイクルコアサイクルコアサイクルコアサイクル コアクロックの総チック数を示します。このサイクルには、インターロックや 1サイクルを超える命令によるパイプラインの停止サイクルも含まれています。
IDサイクルサイクルサイクルサイクル 命令バスとデータバスがアクティブになります。
Iサイクルサイクルサイクルサイクル 命令バスがアクティブになり、データバスがアイドルになります。
アイドルサイクルアイドルサイクルアイドルサイクルアイドルサイクル 完全なアイドルサイクルを表します。命令バスとデータバスの両方がアイドルになります。
Dサイクルサイクルサイクルサイクル 命令バスがアイドルになり、データバスがアクティブになります。
合計合計合計合計 メモリバス上のサイクル数の合計を表します。
ARMulatorを使用して生のハーバードコアのベンチマークを実行することは、キャッシュ効率を 100%と仮定した場合の、キャッシュ搭載コアで得られる理論上の最大性能を知る上で有用です。
3.4 統計データの解釈統計データの解釈統計データの解釈統計データの解釈
生成された統計データの合計値は、コード実行中に発生したメモリバスサイクル数の合計を表して
います。メモリバスの周波数が分かっていれば、その値から実行時間を計算することができます。
前述の通り、ARM7TDMI では、1 回の Dhrystone ループに 558 バスサイクルが費やされます。例えば周波数を 10MHzと仮定すると、ループの 1回に要する実行時間を計算できます。
1回の繰り返しにかかる総実行時間は次のように求められます。558 x 1 / 10,000,000 = 55.8uS
エミュレートするクロック速度を 10MHz とし、Dhrysonte を最後まで実行することにより、以下の結果を確認することができます。
Microseconds for one run through Dhrystone: 55.8Dhrystones per Second: 17937.2
次の章では、リアルタイムシミュレーションについて詳しく説明します。
注:注:注:注: この例では故意に低いクロック速度を設定しています。低いクロック速度を設定することで、必要となる Dhrystoneの繰り返し回数が減り、ARMulatorが Dhrystoneを最後まで実行するのに要する時間を短縮できるためです。
注:注:注:注: 特定のクロック周波数で Dhrystoneが返す結果を知っておくことは、特定のハードウェアのパフォーマンスを短時間で測定(または確認または確認または確認または確認)するためにも非常に有用です。クロック周波数が10MHzのとき、Dhrystoneは 1回のループの繰り返しを約 50uSで実行することが分かっています(32ビットメモリの使用と、ウェイトステートが 0であることが前提です)。
したがって、Dhrystoneを使用することにより、キャッシュの設定や実際のクロック速度など、システムの設定を簡単にテストすることができます。Dhrystoneは非常に小さなプログラムであり、一般的にはすべてがコアのキャッシュメモリから実行されるため、このようなテストは特にキャッシュ搭載コアに有効です。
キャッシュ搭載コアの統計データの解釈については、セクション5.3を参照して下さい。
リアルタイムシミュレーション
10 Copyright © 2002 ARM Limited. All rights reserved. Application Note 93ARM DAI 0093AJ-00
4 リアルタイムシミュレーションリアルタイムシミュレーションリアルタイムシミュレーションリアルタイムシミュレーション
ARMulatorにはリアルタイムシミュレーションの機能があります。
クロック速度が指定されている場合は、ARMulator モデルによって記録されるサイクルカウントを使用して実行時間を計算することができます。また、特定のクロック速度におけるメモリ特性が分
かっている場合には、適切なウェイトステートを挿入できます。
このようなシミュレーションを実行するには、以下を指定する必要があります。
• プロセッサのクロック速度
• プロセッサに接続されているメモリのタイプと速度
詳しい説明と例については、セクション4.4「マップファイル」を参照して下さい。
4.1 ARMulatorの性能の性能の性能の性能
ARMulator の実際の MIPS 性能は、ホストコンピュータのパフォーマンスに依存します。目安として、ARM7TDMIなどの単純なモデルでは、100MHzの PCにおいて約 1 MIPSのパフォーマンスを達成できます。より複雑なモデルでは、実行速度がこれよりも遅くなります。
4.2 シミュレーシミュレーシミュレーシミュレーションションションション時間の読み出し時間の読み出し時間の読み出し時間の読み出し
シミュレーションを実行するとき、ARMulator は総経過時間を常に記録しています。この値は、シミュレートされるプログラムまたはデバッガによって読み出すことができます。
4.2.1 アセンブラからのシミュレート時間の読み出しアセンブラからのシミュレート時間の読み出しアセンブラからのシミュレート時間の読み出しアセンブラからのシミュレート時間の読み出し
シミュレートされるクロックをアセンブリ言語プログラムから読み出すには、セミホスティング
SWI SYS_CLOCK を使用します。
4.2.2 Cからのシミュレート時間の読み出しからのシミュレート時間の読み出しからのシミュレート時間の読み出しからのシミュレート時間の読み出し
C プログラムから読み出す場合は、標準 C ライブラリ関数 clock()を使用します。この関数のデフォルトの実装では、経過したセンチ秒数が返されます。
4.2.3 デバッガからのシミュレート時間の読み出しデバッガからのシミュレート時間の読み出しデバッガからのシミュレート時間の読み出しデバッガからのシミュレート時間の読み出し
シミュレーション開始から経過したセンチ秒数が、内部変数$sys_clock によって記録されます。AXDでこの値を表示させるには、[System Views] -> [Debugger Internals]を選択します。
4.3 ARMulatorのクロック周波数のクロック周波数のクロック周波数のクロック周波数
ARMulator では、($statistics を得る目的で行われる)命令の実行とサイクル数のカウントにクロック周波数を必要としないため、クロック周波数が指定されていなくても問題はありません。し
かし、標準 C関数 clock()への呼び出しや、セミホスティング SWIの SYS_CLOCK を含む場合など、使用するアプリケーションプログラムによってはクロックへのアクセスを必要とするため、
ARMulator は常にクロック情報を提供できなければなりません。ARMulator はこれを以下のように行います。
• クロック速度が指定されている場合、ARMulator はその周波数を使用してタイミングを取ります。
注:注:注:注: システムクロックに「Real-time」が設定されている場合、$sys_clock はシミュレートされた実行時間ではなくホストコンピュータのリアルタイムクロックを使用して、実時間を返します。つまり、ホストコンピュータのパフォーマンスをベンチマークすることになります!
AXD からクロック周波数を指定するには、[Options]->[Configure Target...]->[Configure]を選択し、[Speed]ボックスにクロック速度を入力します。単位を指定せずに速度を入力すると、その単位はHzとみなされます。例えば 50と入力すると、50MHzではなく 50Hzとみなされます。kHz単位やGHz単位の速度も指定できます。
リアルタイムシミュレーション
Application Note 93 Copyright © 2002 ARM Limited. All rights reserved. 11ARM DAI 0093AJ-00
4.4 マップファイルマップファイルマップファイルマップファイル
ARMulatorの初期設定では、0ウェイトステートの 4GBの 32ビットメモリを使用するシステムがモデリングされます。
実システムで、このような理想的なメモリシステムが使用されることはまず考えられません。この
ため、mapfile と呼ばれる別のメモリモデルを使用できます。mapfile メモリモデルは、シミュレートされるシステムのメモリタイプと速度を記述した、マップファイルと呼ばれるメモリ記述ファイ
ルを読み込みます。
マップファイルは、接続されたメモリ領域をいくつか定義し、各領域について以下を定義します。
• その領域がマップされるアドレス範囲
• バス幅(バイト単位)
• そのメモリ領域へのアクセス時間
ARMulator では任意の名前を付けたマップファイルを使用できます。ブラウズ機能に認識させるにはマップファイルの拡張子を.map または.txt にする必要がありますが、マップファイルのテキスト入力フィールドにパスとファイル名を明示的に入力すれば、どのような拡張子でも使用できます。
使用するマップファイルを指定するには、メニューから[Options]->[Configure Target]を選択し、「ARMUL」を指定して、[Configure]ボタンをクリックします。メモリマップファイルのパスとファイル名を検索もしくは入力して、[OK]をクリックします。
考え得るメモリアクセスごとのウェイトステート数を計算するため、ARMulator はマップファイル内に指定された値と、そのモデルに対して指定されたクロック周波数を使用します。
注:注:注:注: キャッシュ搭載コアの場合、指定されるクロック周波数は、コアクロック周波数となります。バスクロック周波数は、指定されたクロック周波数を ARMulator定数 - MCCFGで割ることによって計算されます。求められたバスクロック周波数は、キャッシュ搭載コアにおけるウェイトステート数の計算に使用されます。
4.4.1 マップファイルのフォーマットマップファイルのフォーマットマップファイルのフォーマットマップファイルのフォーマット
各行のフォーマットは以下の通りです。
start size name width access{*} read-times write-times
上記において:
start メモリ領域の開始アドレスを 16進数で指定します(例:0x80000)。
size メモリ領域のサイズを 16進数で指定します(例:0x4000)。
name メモリアクセスの統計データを表示するときに、メモリ領域の識別に使用できる 1単語を指定します。任意の名前を使用することができます。メモリアクセスの統計データを読みやすくするには、
SRAM、ROM、FLASH などの分かりやすい名前を使用して下さい。
width データバスの幅をバイト単位で指定します(8ビットバスの場合は 1、16ビットバスは 2、32ビットバスは 4です)。
access このメモリ領域に対して実行できるアクセスのタイプを記述します。
r 読み出し専用
w 書き込み専用
rw 読み出し/書き込み
- アクセス不可。すべてのアクセスはアボートを生成します。
アクセスタイプにアスタリスク(*)を追加することにより、メモリアクセスに 32 ビットデータバスを使用する Thumb ベースのシステムを表すことができます。この場合は、データの上位 16ビットをラッチする 16 ビットラッチを使用するシステムがモデリングされるため、以降の 16ビットシーケンシャルアクセスは、このラッチから直接フェッチすることができます。しかし、
この設定は推奨される方法ではなく、ほとんどのメモリシステムで必要とされません。
read-times ノンシーケンシャル読み出し時間とシーケンシャル読み出し時間をナノ秒で表します。これらの値
は、ノンシーケンシャル読み出しアクセス時間の次にスラッシュ(/)を挿入し、その次にシーケン
リアルタイムシミュレーション
12 Copyright © 2002 ARM Limited. All rights reserved. Application Note 93ARM DAI 0093AJ-00
シャル読み出しアクセス時間を指定して入力する必要があります。スラッシュを省略して値を 1 つだけ指定すると、ノンシーケンシャルアクセス時間とシーケンシャルアクセス時間が同じとみなさ
れます。
write-times ノンシーケンシャル書き込み時間とシーケンシャル書き込み時間を指定します。指定方法は読み出
し時間の場合と同じです。
例例例例 10 80000000 RAM 4 rw 135/85 135/85
次の例はシステムに、アドレス 0~0x7FFFFFFF番地の連続する 1つの RAMセクションを定義し、そのセクションは 32 ビットデータバスを使用し、読み出し/書き込みアクセス可能、ノンシーケンシャルアクセス時間が 135ns、シーケンシャルアクセス時間が 85nsであると指定します。
例例例例 2
次の例は、32KB のオンチップメモリと、16ビットの ROM、32KB の外部 DRAM を使用する、典型的な組み込みシステムを示しています。
00000000 8000 SRAM 4 rw 1/1 1/100008000 8000 ROM 2 r 100/100 100/10000010000 8000 DRAM 2 rw 150/100 150/1007FFF8000 8000 DRAM2 2 rw 150/100 150/100
以下の 4つのメモリ領域があります。
• アドレス 0~0x7FFF 番地は 32 ビットデータバスを使用する高速アクセス領域です。この領域は SRAM と呼ばれます。
• アドレス 0x8000~0xFFFF 番地は 16 ビットデータバスを使用する低速アクセス領域です。この領域は ROM と呼ばれ、イメージコードを保持します。この領域は読み出し専用としてマークされます。
• アドレス 0x10000~0x17FFF 番地は、イメージデータに使用される RAM領域です。
• アドレス 0x7FFF8000~0x7FFFFFFF 番地はもう 1つの RAM領域です。
最終ハードウェアでは、ここでは区別された外部 DRAM の 2 つの領域が結合されます。この結合によってシミュレーションの精度に差が生じることはありません。
高速メモリ(ウェイトステートなし)を表現するため、SRAM 領域のアクセス時間には 1ns が指定されています。実際には、ARMulator はこのアクセス時間を最も近いクロックサイクルに丸めるため、アクセスごとに 1 クロックサイクルを要することを意味します。しかし、アクセス時間を1ns に指定することにより、異なるクロック速度を設定した多数のシミュレーションで同じマップファイルを使用することができます。
注:注:注:注: 正確なシミュレーションを行うため、メモリマップ内において、シミュレートするイメージによってアクセスされる可能性のあるすべてのメモリエリアが記述されていることを確認して下さい。
イメージによってアクセスされるすべてのメモリエリアが必ず記述されているようにするため、
マップファイルの最後の行に、アドレス範囲全体を含む 1つのメモリ領域を定義することができます。例えば、上記の記述に以下の行を追加することができます。
00000000 80000000 Dummy 4 - 1/1 1/1
これにより、予想したメモリ領域の範囲外で発生した読み出しまたは書き込みを、"print$memory_statistics"コマンドを使用して検出できます。この範囲に含まれる未定義アドレスに対するアクセスは、データアボート例外も生成します。
注:注:注:注: マップファイル内のエントリはシーケンシャルに処理されるため、ダミーのメモリ領域はマップファイル内の最後のエントリとする必要があります。
リアルタイムシミュレーション
Application Note 93 Copyright © 2002 ARM Limited. All rights reserved. 13ARM DAI 0093AJ-00
4.5 メモリ統計データの読み出しメモリ統計データの読み出しメモリ統計データの読み出しメモリ統計データの読み出し
AXDを使用してメモリ統計データを読み出すには、コマンド di(dgbinternalsコマンドの短縮形)を入力し、$memstats が表示されるまで任意のキーを押して下さい。
以下は、DRAM領域のみに関する統計データの例を示しています。
$memstats[2].name DRAM.start 0x00010000.limit 0x00008000.width 0x01.access 0x03.Nread_ns 0x00000096.Nwrite_ns 0x00000096.Sread_ns 0x00000064.Swrite_ns 0x00000064.Nreads 0x00004674.Nwrites 0x00002E7F.Sreads 0x0000005B.Swrites 0x000000F0.ns 0x0087279C.s 0x00000000
リアルタイムシミュレーション
14 Copyright © 2002 ARM Limited. All rights reserved. Application Note 93ARM DAI 0093AJ-00
4.6 リアルタイムシミュレーションの例リアルタイムシミュレーションの例リアルタイムシミュレーションの例リアルタイムシミュレーションの例::::Dhrystoneここで紹介する例にしたがって作業を続ける前に、以下のマップファイルを作成する必要がありま
す。このファイルに test.map という名前を付けます。
00000000 80000000 RAM 4 RW 135/85 135/85
このマップファイルは、以下のシステムを記述しています。
• アドレス 0x0番地から始まるメモリセクション
• 長さが 0x80000000バイト
• RAMとしてラベル付けされている
• 32ビット(4バイト)バスを使用
• 読み出し/書き込みアクセスが可能
• 読み出しアクセス時間 ― ノンシーケンシャル:135ns、シーケンシャル:85ns
• 書き込みアクセス時間 ― ノンシーケンシャル:135ns、シーケンシャル:85ns
このマップファイルを指定する手順については、セクション4.4を参照して下さい。
これで関連付けが完了し、プログラムを実行できます。CodeWarrior を実行している場合は、Dhrystone プロジェクトファイルがロードされていることを確認し、メニューから [Project]->[Debug]を選択します。それ以外の場合は、AXD を起動して[Load Image]ボタンをクリックし、dhry.axf ファイルを選択します。
セクション4.3の手順を参照してエミュレートするクロック速度を 20MHzに設定して下さい。
[Go]ボタンをクリックする(または F5キーを押す)と、実行が開始されます。
Dhrystone数を尋ねるメッセージが表示されたら、「50000」と入力します。
アプリケーションの実行が完了したら、報告された 1秒当たりの Dhrystone数を記録します。この値がシステムのパフォーマンスを示す値となります。
4.6.1 結果結果結果結果
以下は、表示された Dhrystone値とメモリ統計データの結果を示しています。
Microseconds for one run through Dhrystone: 84.2Dhrystones per Second: 11876.5
$memstats[0].name RAM.start 0x00000000.limit 0x80000000.Nreads 0x008370FD.Nwrites 0x00204627.Sreads 0x014BE20B.Swrites 0x00126BA5.ns 0x35F349D8.s 0x00000003
注:注:注:注: 使用する ADS のバージョンと、ARMulator に設定した対象プロセッサにより、上記の結果とは若干異なる場合があります。
リアルタイムシミュレーション
Application Note 93 Copyright © 2002 ARM Limited. All rights reserved. 15ARM DAI 0093AJ-00
4.6.2 シミュレーションに要する時間を短縮するシミュレーションに要する時間を短縮するシミュレーションに要する時間を短縮するシミュレーションに要する時間を短縮する
シミュレーションにかかる実際の時間は、指定されたクロック速度を 10または 100の因数で割り、メモリアクセス時間に同じ因数を掛けることで、大幅に短縮できる場合があります。clock()関数(またはセミホスティング SWI命令 SYS_CLOCK)から返された時間を、同じ因数で割って下さい。
これは、シミュレートされる時間が内部ではマイクロ秒で記録されるのに対し、SYS_CLOCK はセンチ秒単位でのみ値を返すためです。このクロック速度の除算を行い、桁をナノ秒カウントからセ
ンチ秒カウントにシフトすることで、同じレベルの精度を維持したまま、はるかに短い時間でシ
ミュレーションを実行することができます。
注:注:注:注: 実際の実行時間を短縮するには、Dhrystoneの実行回数も減らす必要があります。
キャッシュ搭載コアのベンチマーク
16 Copyright © 2002 ARM Limited. All rights reserved. Application Note 93ARM DAI 0093AJ-00
5 キャッシュ搭載コアのベンチマークキャッシュ搭載コアのベンチマークキャッシュ搭載コアのベンチマークキャッシュ搭載コアのベンチマーク
5.1 概要概要概要概要近年のプロセッサコアの多くは、外部メモリシステムよりもはるかに高速で命令とデータを処理す
ることができます。
キャッシュと密結合メモリ(TCM)は、外部メモリがコアよりも遅く狭い、もしくはそのどちらかである場合に、システムパフォーマンスを向上させるための 2つの異なるアプローチです。
キャッシュと TCMは、コアの近くに位置する小容量の高速メモリです。
キャッシュは、以後のアクセスの大半がキャッシュから実行されるという事実を利用した、一つの
妥協案です。キャッシュミスが発生すると、メモリ位置の 1 行すべてがキャッシュされます。パフォーマンスの改善は、ほとんどのアクセスが、現在の命令からそれほど離れていないところで発
生するという「参照の局所性」の原理に依存します。
密結合メモリは、システムのコードとデータ、もしくはその一方が、TCM に配置される(コピーされる)場合にのみ効果的です。TCM がイネーブルされている場合は、システムメモリマップの一部を占有します。
キャッシュと TCMには一般的に以下のような利点があります。
• システムパフォーマンスを向上させる。
• 外部メモリアクセス数を減らすことにより、システムの電力消費量を軽減する。
• 使用可能な外部バス帯域幅を増やす。
注:注:注:注: 通常、キャッシュと TCM は、外部メモリが遅い、もしくは狭い場合にのみ効果を発揮します。高速メモリを使用できる場合には、恐らく非キャッシュ搭載プロセッサを選択する方が良いでしょう。
注:注:注:注: キャッシュ搭載ハーバードアーキテクチャコア(命令バスとデータバスが独立しているコア)では、キャッシュおよび TCM レベルでハーバードアーキテクチャが採用され、外部メモリに対しては単一アクセスが実行されます。したがって、ハーバードアーキテクチャの効果は、キャッシュ(または TCM)がアクセスされる場合にのみ発揮されます。
キャッシュは外部メモリ位置のコピーを保持します。通常これらは最近アクセスされたメモリ位置
です。一度キャッシュに保存されると、これらのコピーが自動的に外部メモリよりも優先して使用
されます。
キャッシュが有用であるのは、これらのキャッシュされたメモリ位置が再利用される場合です。こ
のことは、実システムでは以下のような場合にごく一般的に行われています。
• 命令ループ
• 頻繁に参照されるデータ
キャッシュの動作はまったく外からは見えませんが、外部メモリのどの範囲をキャッシュするのか
を指定するために、ある程度のコアの初期化が必要となります。
通常、キャッシュ搭載コアは、低速クロック(バスと外部メモリのクロック)と高速クロック
(キャッシュから動作しているときのコアのクロック)の、2つのクロックドメインで動作します。高速クロックの周波数は、[Configure Target...]ダイアログボックスで ARMulatorに指定される周波数となります。
実際のコアのクロックは、これら 2 つのクロックの組み合わせによって生成されます。このクロックは、パイプラインクロックと考えることができます。このクロックは、実行すべき命令がある場
合にのみ進むことができるため、コアの動作によってはパイプラインクロックが進まない場合があ
ります(例:コアクロックからバスクロックへの同期化)。
キャッシュ搭載コアのベンチマーク
Application Note 93 Copyright © 2002 ARM Limited. All rights reserved. 17ARM DAI 0093AJ-00
高速コアクロック
低速バスクロック
パイプラインクロック
ARMulator には、ベンチマークとコア同士の性能比較を容易にするため、ARM キャッシュ搭載コアのモデルが含まれています。
キャッシュ搭載コアや TCM を使用するコアなど、複数のクロックドメインを使用するコアの場合には、ARMulatorはその両方のドメインに関する統計データを生成します。
• Fクロックサイクル - コアパイプラインクロックを形成する高速クロックパルスです。• 合計サイクル - 合計コアサイクル数です。コア自身へのクロックパルス数、つまりコアのパイプラインクロックを表します。
• バスサイクル
注:注:注:注: ARMulator では、高速コアクロックとバスクロックの比率が、以下で説明するコンフィギュレーション変数 MCCFGに保持されます。このことは、同期動作のみをシミュレートできることを意味します。
5.1.1 不確定不確定不確定不確定な動作な動作な動作な動作
次の命令について考えてみます:LDR r0, [r1]
理想的なメモリから動作する非キャッシュ搭載プロセッサ(ARM7TDMI 等)の場合、特定の命令の実行サイクル数は予測可能です。しかし、キャッシュ搭載コアの場合はそのようにいかず、命令
の実行時間に影響を及ぼす多くの要因が考えられます。例えば:
• 実行される命令はキャッシュされているか?
• r1に保持されているアドレスはキャッシュされるか?• ライトバッファはドレインされるか?
• プロセッサにMMUが組み込まれている場合、命令フェッチによって TLBミスが発生するか?このデータアクセスによって TLBミスが発生するか?
• キャッシュラインが追い出されるとき、その古いキャッシュラインにはダーティデータが保持されていたか?
ARM のキャッシュ搭載コアは、キャッシュラインフィルの発生時に、情報がキャッシュに書き込まれると同時にコアにも使用可能になる「ストリーミング」もサポートしているため、状況は一層
複雑になります。特定の命令アクセスまたはデータアクセスにストリーミングの利点を活かせるか
どうかは、実際の命令アクセスやデータアクセスとは無関係の要因に左右されます。
ARM1020E などの最先端コアは、非ブロッキングキャッシュや、ヒットアンダーミスのサポートといった、新しい機能をサポートしています。
以上のことから、キャッシュ搭載コアについては、個々の命令またはコードの一部分を有効な方法
で分離してベンチマークできないことは明らかです。
5.2 ARMulatorキャッシュモデルキャッシュモデルキャッシュモデルキャッシュモデル
実シリコンとは異なり、キャッシュ搭載プロセッサの ARMulator モデルでは、ベンチマークを簡潔にするため、キャッシュがデフォルトでイネーブルされます。メモリ保護ユニット(MPU)またはメモリ管理ユニット(MMU)を使用するキャッシュ搭載コアの場合には、ページテーブルモジュールによって初期コンフィギュレーションがセットアップされ、メモリの下位 128MB がキャッシュ可能としてマークされます。
キャッシュのデフォルト設定は、ARMulator 設定ファイル peripherals.ami 内のページテーブルセクションを編集して変更できます。
キャッシュ搭載コアのベンチマーク
18 Copyright © 2002 ARM Limited. All rights reserved. Application Note 93ARM DAI 0093AJ-00
ページテーブルモデルを含めるかどうかを制御するには、ARMulator 設定ファイル default.ami内で Pagetablesタグを探し、必要に応じてこれを変更して下さい。
{Pagetables=Default_Pagetables}
or
{Pagetables=No_Pagetables}
AXDを使用する ADS 1.2の場合には、ページテーブルモジュールの選択を以下のように制御することもできます。メニューから[Options]->[Configure Target]を選択し、ターゲットに「ARMUL」を指定して、[Configure]ボタンをクリックします。このダイアログボックスからMMU/PUの初期化を選択することができます。ドロップダウンメニューから DEFAULT_PAGETABLESまたはNO_PAGETABLESのどちらかを選択して下さい。
キャッシュまたは TCM を使用するコアの場合には、バスメモリクロックがコアクロック速度から導出されます。ARMulator定数 MCCFGは、このバスメモリクロックの計算に使用されます。この定数は、ARMulator設定ファイル default.ami 内の値を編集することによって変更できます。
ARMulatorの起動バナーには、以下のようなクロックの関係が表示されます。
ARMulator ADS1.2 [Build 805]
ARM940T, 4KB I-cache, 4KB D-cache, 200.00MHz FCLK, (Physical memory, BIU), Littleendian, Semihosting, Debug Comms Channel, 66.7MHz, 4GB, Mapfile, Timer,
Profiler, Tube, Millisecond [66666.7 cycles_per_millisecond], Pagetables, IntCtrl,
Tracer, RDI Codesequences
ARM RDI 1.5.1 -> ASYNC RDI Protocol Converter ADS v1.2 [Build number 805]. Copyright(c) ARM Limited 2001
この例では、コアクロックが 200MHz であり、バスメモリクロックが 66.7MHz です。コアクロック対メモリバスクロックの比率から、MCCFGが 3であることが分かります。この値がデフォルトです。
5.3 キャッシュ搭載コアの統計データキャッシュ搭載コアの統計データキャッシュ搭載コアの統計データキャッシュ搭載コアの統計データ
前述したように、複数のクロックドメインをもつコアの ARMulator モデルは、両方のドメインに関連する統計データを生成します。最近の ARM コアは、AMBA(アドバンスド・マイクロコントローラ・バスアーキテクチャ)と呼ばれる ARM オープンバス標準へのネイティブインタフェースを備えています。このようなコアのモデルでは、AMBA バスサイクルタイプに関連する、バスの静的情報が生成されます。AMBA には、旧 ASB(AMBA システムバス)と AHB(AHBA ハイパフォーマンスバス)の 2つのタイプがあります。
5.3.1 AMBA ASBの統計データの統計データの統計データの統計データ - ARM720T / ARM 940Tの例の例の例の例AMB ASB インタフェースを使用する ARM コアの実装では、N サイクルは生成されません。したがって、AMBA ASB インタフェースを使用するコアの ARMulator モデルでは、コードに分岐命令が含まれている場合でも、$statistics または$memstats によって返される統計データに Nサイクルは含まれません。これらのコアの ARMulatorモデルによって示されるサイクルカウントは、以下の 2つのタイプの AMBAサイクルだけです。
Aサイクルサイクルサイクルサイクル アドレスのみのサイクルです。アドレスは(投機的に)発行されますが、データは転送されません。
Sサイクルサイクルサイクルサイクル シーケンシャルサイクルです。データはカレントアドレスから転送されます。
合計合計合計合計 AMBA ASBメモリバス上の合計サイクル数を示します。
非シーケンシャルアクセスは、Aサイクルの次に Sサイクルを続けて発行することによって実行されます(「IS 併合」サイクル)。AMBA インタフェースを使用する各コアのサイクルタイプの説明については、テクニカルリファレンスマニュアルを参照して下さい。
注:注:注:注: ADS バージョン 1.1 以前のバージョンで$statistics によって返されるデータでは、ARM7TDMIの場合、サイクル名'ICycle'として A サイクルが表示されます。ADS バージョン 1.2 では、適切なAMBA ASBの名前が使用されます。
キャッシュ搭載コアのベンチマーク
Application Note 93 Copyright © 2002 ARM Limited. All rights reserved. 19ARM DAI 0093AJ-00
5.3.2
5.3.3 AMBA AHBの統計データの統計データの統計データの統計データ - ARM946E-S / ARM926E-Sの例の例の例の例AHBでは 4つのタイプの転送が可能であり、これらの転送タイプは HTRANSシグナルによって通知されます。
シーケンシャルシーケンシャルシーケンシャルシーケンシャル バーストアクセスが継続されていることを示します。転送されるアドレスは、前のアドレスにデー
タサイズを加算した値となります。
ノンノンノンノンシーケンシャルシーケンシャルシーケンシャルシーケンシャル
バーストまたは単一アクセスの開始を示します。転送されるアドレスは、前のアクセスで使用され
たアドレスとは無関係です。
アイドルアイドルアイドルアイドル バスマスタによってバスが使用されないことを示します。スレーブは、HRESP により、0 ウェイトステートの OK応答で応答する必要があります。
ビジービジービジービジー バスマスタがバーストの実行中であり、次のシーケンシャルアクセスに進めないことを意味します。
スレーブは、HRESPにより、0ウェイトステートの OKAY応答で応答する必要があります。
合計合計合計合計 AMBA AHBメモリバス上の合計サイクル数を示します。
注:注:注:注: ADSバージョン 1.1以前のバージョンで$statisticsによって返されるデータの中では、ARM7TDMI の場合、サイクル名'C-Cycle'としてビジーサイクルが表示されます。ADS バージョン1.2では、適切な AMBA ASBの名前が使用されます。
5.4 キャッシュの初期化キャッシュの初期化キャッシュの初期化キャッシュの初期化
デフォルトのキャッシュ初期化モデルが使用されない場合は、実シリコンと同じ方法でキャッシュ
モデルを初期化することができます。
ADS 1.2 には、各種 ARM コアのキャッシュの初期化を実行するサンプルコードが標準で付属しています。
5.5 キャッシュ非搭載コアのキャッシュ非搭載コアのキャッシュ非搭載コアのキャッシュ非搭載コアの性能性能性能性能が低くなる理由が低くなる理由が低くなる理由が低くなる理由
キャッシュが空もしくはディセーブルされている場合、連続する小さなコードでは、キャッシュ搭
載プロセッサのパフォーマンスがキャッシュ非搭載コアよりも低くなることに注意する必要があり
ます。キャッシュ搭載プロセッサがキャッシュ非搭載プロセッサよりも高いパフォーマンスを示す
のは、ループを含んだコードを実行する場合と、ウェイトステートを必要とするメモリを使用する
場合、もしくはそのどちらかの場合のみです。
例えば、ARM940T は、キャッシュがイネーブルされていない場合に、命令フェッチに対して以下の動作を示します。ワーストケースでは、以下のすべてのステップが必要となります。
キャッシュミスキャッシュミスキャッシュミスキャッシュミス((((1サイクルサイクルサイクルサイクル))))
高速バスモードの場合は BCLK、それ以外の場合は FCLKが使用されます。
内部サイクル内部サイクル内部サイクル内部サイクル((((1サイクルサイクルサイクルサイクル))))
特定の内部デコードで、高速バスモードの場合は BCLK が、それ以外の場合は FCLK が使用されます。
同期化同期化同期化同期化 高速バスモードでは行われず、同期で最大 1/2 BCLKが、非同期で最大 1 BCLKとなります。
ライトバッファのドレインライトバッファのドレインライトバッファのドレインライトバッファのドレイン
BCLKサイクル数は、AMBAインタフェースとシステムに依存します。
アドレスのみアドレスのみアドレスのみアドレスのみ((((1サイクルサイクルサイクルサイクル))))
サイクルは 1サイクルを超えますが、同期化の周期またはライトバッファのドレインに組み込まれます。
ワードフェッチワードフェッチワードフェッチワードフェッチ((((1サイクルサイクルサイクルサイクル))))
BCLKサイクルでワードのフェッチが実行されます。
したがって、キャッシュがディセーブルされている場合の 1ワードのフェッチは、一般的に 4つの内部サイクル(クロックモードに依存)と、それに続く S サイクルで実行されます。このペナルティは、キャッシュラインフィルにおける最初のワードのフェッチにおいても見られます。
キャッシュ搭載コアのベンチマーク
20 Copyright © 2002 ARM Limited. All rights reserved. Application Note 93ARM DAI 0093AJ-00
5.6 キャッシュ搭載コアのその他の統計データキャッシュ搭載コアのその他の統計データキャッシュ搭載コアのその他の統計データキャッシュ搭載コアのその他の統計データ
ADS に付属する ARMulator を使用することにより、コアとバスの基本的な静的情報に加え、トランスレーション・ルックアサイドバッファ(TLB)やライトバッファなどの処理を含む、キャッシュに関連した情報を表示させることができます。
すべてのモデルに関する詳細な統計データを得るには、ARMulator設定ファイル default.ami 内で「Counters」タグを探します。このタグにはデフォルトで false が設定されていますが、この行を以下のように変更します。
Counters=True
旧バージョンの ADS ではこの行が存在しませんが、この行を追加することによって詳細な統計をイネーブルできます。この行は、MCCFGを設定する行の直後に追加して下さい。
以下は、キャッシュ搭載コアを使用した場合に追加で得られる統計データの例を示しています。こ
れらのデータには、[Debugger Internals]統計タブからアクセスすることができます。または、[System Views]->[Command Line Interface]を選択し、以下を入力して下さい。
Debug >print $statistics$statistics structure
.Instructions unsigned 0x000000000007E19B
.Core_Cycles unsigned 0x00000000000C6249
.Instr TLB_Hits unsigned 0x00000000000A8577
.Instr TLB_Misses unsigned 0x0000000000000001
.Instr Cache_Hits unsigned 0x00000000000A83C0
.Instr Cache_Misses unsigned 0x0000000000000192
.Instr Cache_Fills unsigned 0x0000000000000192
.Instr Cache_Stalls unsigned 0x0000000000000025
.Data TLB_Hits unsigned 0x0000000000024CA0
.Data TLB_Misses unsigned 0x0000000000000002
.Data Cache_Read_Hits unsigned 0x000000000001DA74
.Data Cache_Read_Misses unsigned 0x0000000000000067
.Data Cache_Write_Hits unsigned 0x00000000000140BD
.Data Cache_Write_Misses unsigned 0x0000000000002029
.Data Cache_Fills unsigned 0x0000000000000067
.Data Cache_Stalls unsigned 0x0000000000000006
.WB_Stalls unsigned 0x0000000000000A3C
.Number of Core Clocks unsigned 0x00000000000CACA6
.S_Cycles unsigned 0x00000000000025C4
.N_Cycles unsigned 0x0000000000000000
.A_Cycles unsigned 0x00000000000413C9
.C_Cycles unsigned 0x0000000000000000
.Total unsigned 0x000000000004398D
上記は、ARM920Tコア上で Dhrystoneを実行した回数を表しています。
基本統計データの S-Cycles、N-Cycles、A-Cycles、C-Cycles、Total は、すべて表示させることができます。
• Instructions - 実行された命令の数を示します。• Core-Cycles - コアのクロックパルス数(パイプラインクロック)を示します。• Total - バスサイクル数を示します。
以下の統計データは、命令イベントとデータイベントに分割されます。
• TLB_Hits – トランスレーション・ルックアサイドバッファ(TLB)のヒット数を示します。• TLB_Misses - トランスレーション・ルックアサイドバッファ(TLB)のミス数を示します。• Cache_Hits - 特定のキャッシュにおけるヒット数を示します(ヒットが可能であった場合にのみ、つまりメモリアドレスにキャッシュ可能属性が設定されている場合にのみ、この値がインクリメントされます)。
• Cache_Misses - 特定のキャッシュにおけるミス数を示します(キャッシュラインフィルが発生します)。
キャッシュ搭載コアのベンチマーク
Application Note 93 Copyright © 2002 ARM Limited. All rights reserved. 21ARM DAI 0093AJ-00
5.7 キャッシュ効率のキャッシュ効率のキャッシュ効率のキャッシュ効率の評価評価評価評価
キャッシュ効率は、以下の計算式を使用して評価することができます。
Cache Efficiency = Core-Cycles / Total Bus Cycles
すべてのメモリアクセスでキャッシュヒットが発生する場合には、パイプラインクロックはすべて
高速クロックパルスを使用します。したがって、この計算によって得られる最大値は、MCCFG(コアクロック対バスクロックの比率)と等しくなります。つまり、この結果が MCCFGの値に近づくほど、キャッシュ効率が 100%に近づくことを意味します。
結果がほぼ 1になる場合には、キャッシュ搭載コアのパフォーマンスが、同じ外部メモリに接続されたキャッシュ非搭載コアのパフォーマンスとほぼ同じであることを示しています。同様に、1 に満たない結果であれば、キャッシュ搭載コアのパフォーマンスがキャッシュ非搭載コアよりも低い
ことを示しています。
このような低い結果が得られた場合には、以下の点について見直す必要があります。
• コアが正しく初期化されていることを確認して下さい。
- 適切なメモリ領域がキャッシュ可能領域としてマークされていることを確認して下さい。
- 適切なクロックが適用されていることを確認して下さい。
• 設計の修正を考慮してみて下さい。
- TCMを使用してみて下さい。
- 適切な ARMコアを使用して下さい。
キャッシュ効率は以下の計算式から求めることができます。
Cache Efficiency % = 100 x (Core-Cycles / (Total Bus Cycles x MCCFG))
キャッシュ搭載コアのベンチマーク
22 Copyright © 2002 ARM Limited. All rights reserved. Application Note 93ARM DAI 0093AJ-00
5.8 キャッシュ搭載コアの統計データの解釈キャッシュ搭載コアの統計データの解釈キャッシュ搭載コアの統計データの解釈キャッシュ搭載コアの統計データの解釈
これまでは、キャッシュ非搭載コア上で Dhrystoneループを 1回実行した場合に生成される統計データについて見てきました。以下では、キャッシュ非搭載ハーバード型コア(ARM9TDMI)を使用してもう一度このループを実行し、その後でキャッシュ搭載コアの ARM940Tを使用して同じように実行してみます。
注:注:注:注: この例では故意に低いクロック速度を設定しています。低いクロック速度を設定することで、必要となる Dhrystoneの繰り返し回数が減り、ARMulatorが Dhrystoneを最後まで実行するのに要する時間を短縮できるためです。
5.8.1 ARM9TDMI((((ハーバード型ハーバード型ハーバード型ハーバード型 arm9、デュアルポート、、デュアルポート、、デュアルポート、、デュアルポート、10.0MHz))))
以下は、Dhrystone ループを 1 回実行したときに生成される統計データを示しています。ループ 1回ごとに同じ統計結果が生成されます。
Instructions((((命令命令命令命令))))
Core Cycles((((コアサイクルコアサイクルコアサイクルコアサイクル))))
ID-cycles((((IDサイクルサイクルサイクルサイクル))))
I-cycles((((Iサイクルサイクルサイクルサイクル))))
Idle-cycles((((アイドルサイクルアイドルサイクルアイドルサイクルアイドルサイクル))))
D-cycles((((Dサイクルサイクルサイクルサイクル))))
Total((((合計合計合計合計))))
306 446 71 305 12 58 446
前述の手順で、1回のループの繰り返しに要する実行時間を計算することができます。
ループ 1回にかかる総実行時間:446 x 1 / 10,000,000 = 44.6uS
Dhrystone の実行が(エミュレートされるクロック速度を 10MHz として)完了したときに返される結果から、この計算が正しいことを確認できます。
Microseconds for one run through Dhrystone: 44.6
Dhrystones per Second: 22421.5
この場合は、コアサイクル数=総バスサイクル数となっています。これは、モデリングしているシ
ステムは、データを遅延なくコアに返すことができるためです。
ここで得られた結果は、ARM9TDMI のキャッシュ搭載バリアント(同じコアクロック速度で動作)において期待できる最高の結果を示しています。
5.8.2 ARM940T(命令キャッシュ(命令キャッシュ(命令キャッシュ(命令キャッシュ 4KB、データキャッシュ、データキャッシュ、データキャッシュ、データキャッシュ 4KB、コアクロック、コアクロック、コアクロック、コアクロック 10.00MHz(物理メモリ(物理メモリ(物理メモリ(物理メモリ 3.3MHz))で))で))で))で
キャッシュを有効にした場合キャッシュを有効にした場合キャッシュを有効にした場合キャッシュを有効にした場合
この例では、コアは同じ速度のクロックが入力されますが、物理メモリの速度が 3分の 1に低下します。
ここでは、ループの実行 1回目における結果と、その後の繰り返しにおける結果を見ることができます。
Instructions((((命令命令命令命令))))
Core Cycles((((コアサイクルコアサイクルコアサイクルコアサイクル))))
S-cycles((((Sサイクルサイクルサイクルサイクル))))
N-cycles((((Nサイクルサイクルサイクルサイクル))))
I-cycles((((Iサイクルサイクルサイクルサイクル))))
C-cycles((((Cサイクルサイクルサイクルサイクル))))
Total((((合計合計合計合計))))
ループ 1回目 306 446 377 0 345 0 722
ループ n回目 306 446 7 0 142 0 149
前述の計算式を使用して、ループ 1回目とループ n回目の実行時間を計算できます。
注:注:注:注: バスクロック周波数は元の周波数の 3分の 1となるため、各バスサイクルには 3倍の時間がかかります。
ループ 1回目にかかる実行時間:673 x 1 / 3,333,333 = 216.6uS
ループ n回目にかかる実行時間:149 x 1 / 3,333,333 = 44.7us
キャッシュ搭載コアのベンチマーク
Application Note 93 Copyright © 2002 ARM Limited. All rights reserved. 23ARM DAI 0093AJ-00
以下は、Dhrystone を(エミュレートするクロック速度を 10MHz として)複数回実行した場合に返される結果を示しています。
Microseconds for one run through Dhrystone: 44.8Dhrystones per Second: 22321.0
ループ 1回目では、ループに含まれる命令およびデータがキャッシュメモリに保持されていないため、パイプラインクロックは高速クロックパルスをほとんど使用せず、何度も停止します。
注:注:注:注: ワーストケースに関しては、ブレークポイントの位置が重要になります。この例では、ブレークポイントが Proc_6 ではなく Dhrystone ループの最初の命令に設定されています。これは、キャッシュ内に保持されるループの量を最小限に抑えるためです。
n 回の繰り返しの間に、小さな Dhrystone ループが何度も実行され、キャッシュメモリ内に保持されます。計算式で得られたループ実行時間と、Dhrystone によって返された結果とのわずかな差異は、計算式で使用した低速バスサイクルの精度が低いためです。
注:注:注:注: 各ループにおける命令とコアサイクル数は一定であり、それらの命令の実行に要するサイクル数はキャッシュの状態とは無関係です。
注:注:注:注: ループを繰り返し実行する Dhrystoneベンチマークにおいても、キャッシュ効率を計算することができます。
Total Core Cycles: 27074407
Total Bus Cycles : 9034428
Cache Efficiency : 2.9979 (MCCFG=3)
Cache Efficiency % : 100 x (27084407/(9034428 x MCCFG) = 99.93%
ARM9TDMI にキャッシュを追加することにより、少なくとも Dhrystone 実行に関しては、遅いメモリを使用した場合のパフォーマンスと、ARM9TDMI が理想的なメモリから処理しているときのパフォーマンスがほぼ同じになることが分かります。
5.8.3 ARM940T(命令キャッシュ(命令キャッシュ(命令キャッシュ(命令キャッシュ 4KB、データキャッシュ、データキャッシュ、データキャッシュ、データキャッシュ 4KB、コアクロック、コアクロック、コアクロック、コアクロック 10.00MHz(物理メモリ(物理メモリ(物理メモリ(物理メモリ 3.3MHz))で))で))で))で
キャッシュを無効にした場合キャッシュを無効にした場合キャッシュを無効にした場合キャッシュを無効にした場合
ここでは、ページテーブルモジュールをディセーブル(pagetables=no_pagetables)することによってキャッシュをディセーブルし、上記と同じ評価を行います。
Instructions((((命令命令命令命令))))
Core Cycles((((コアサイクルコアサイクルコアサイクルコアサイクル))))
S-cycles((((Sサイクルサイクルサイクルサイクル))))
N-cycles((((Nサイクルサイクルサイクルサイクル))))
I-cycles((((Iサイクルサイクルサイクルサイクル))))
C-cycles((((Cサイクルサイクルサイクルサイクル))))
Total((((合計合計合計合計))))
306 446 505 0 1864 0 2369
ループ 1回にかかる実行時間:2369 x 1 / 3,333,333 = 710.7uS
以下は、Dhrystone を(エミュレートするクロック速度を 10MHz として)複数回実行した場合に返される結果を示しています。
Microseconds for one run through Dhrystone: 710.6
Dhrystones per Second: 1407.3
注:注:注:注: 各ループにおける命令とコアサイクル数は一定であり、それらの命令の実行に要するサイクル数はキャッシュの状態とは無関係です。
注:注:注:注: キャッシュがディセーブルされている場合でも、Dhrystone ベンチマークによるキャッシュ効率の計算では以下のような興味深い結果が返されます。
Total Core Cycles: 22508588
Total Bus Cycles : 119583853
キャッシュ搭載コアのベンチマーク
24 Copyright © 2002 ARM Limited. All rights reserved. Application Note 93ARM DAI 0093AJ-00
Efficiency : 0.188
Efficiency % : 100 x (22508588/(119583853 x MCCFG) = 5.64%
上記から、キャッシュがディセーブルされた場合のキャッシュ搭載コアのパフォーマンスは、同様
のメモリを使用して処理を行うキャッシュ非搭載コアよりもはるかに低くなることが分かります。
5.8.4 キャッシュ搭載コアのパフォーマンスのまとめキャッシュ搭載コアのパフォーマンスのまとめキャッシュ搭載コアのパフォーマンスのまとめキャッシュ搭載コアのパフォーマンスのまとめ
以下のグラフは、上記で得られた結果をまとめたものです。
5.9 密結合メモリ密結合メモリ密結合メモリ密結合メモリ
密結合メモリ(TCM)は、キャッシュに代わるソリューションです。TCM がイネーブルされている場合は、システムメモリマップ内の特定の位置が TCMに占有されます。
キャッシュとは異なり、TCM を利用する場合には、システムソフトウェアが、TCM を有効利用するように記述する必要があります。典型的なシステムでは、割り込みハンドラなどの処理速度の速
さが要求されるコードを TCM にコピーすることがあります。同様に頻繁に変更されるデータもTCMから参照されるようにします。例えば、スタックへのアクセスも TCMに割りあてることが考えられます。
TCMには主に以下の 2つの利点があります。
• キャッシュ搭載コアは、特定のシステムでは問題となり得る不確定なパフォーマンスを見せがちですが、TCMを使用したときのパフォーマンスは正確に予測することができます。
• 同じサイズを指定した場合に、TCMは約半分のシリコンエリアしか必要としません。
����������������������������������������������������������������������������������������������������������������
������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
������������������������ ����������������������������������������������������������������������������������������������������������������
������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
������������������������
��������������
������������������������������������������������������������
������������������������������������������
������������������������������������������������������������������������������������������������������������������
������������������������������������������������
0
20
40
60
80
100
キャッシュ使用時のキャッシュ使用時のキャッシュ使用時のキャッシュ使用時のDhrystoneによる分析による分析による分析による分析
ARM9TDMIコア 10MHzメモリ 10MHz
ARM940Tコア 10MHzメモリ 3.3MHzキャッシュ有効
ARM940Tコア 10MHzメモリ 3.3MHzキャッシュ無効
ARM9TDMIコア 3.3MHzメモリ 3.3MHz
■%パフォーマンス 100 100 5.64 33.3
キャッシュ搭載コアのベンチマーク
Application Note 93 Copyright © 2002 ARM Limited. All rights reserved. 25ARM DAI 0093AJ-00
5.9.1 密結合メモリと密結合メモリと密結合メモリと密結合メモリと ARM966E-S
ARM966E-S などの一部のコアには TCM が搭載されています。ARM966E-S では、I-TCM 領域とD-TCM 領域が、それぞれ最初の 64MB のアドレス範囲と次の 64MB のアドレス範囲にマップされます。TCMメモリは、その範囲内で複数のエイリアスを持ちます。
ARM966E-S モデルで TCM をイネーブルするには、peripherals.ami 内で以下のエントリを探します。
IRAM=NoDRAM=No
上記の設定を Yesに変更して下さい。
この方法で TCM をイネーブルした場合には、イメージをデバッガから TCM メモリに直接ロードできます。この方法ではコードとデータを再配置する必要がないため、ベンチマークを簡略化する
ことができます。
注:注:注:注: ARMulatorでのスタックのデフォルト位置は 0x0800000番地から、つまりデータ TCMの最上位となります。
注:注:注:注: ARM コアのコードには、コードセクション内にいくつかのリテラル定数が含まれるため、データインタフェースは命令 TCM にアクセスできなければなりません。しかし、これらのデータアクセスではペナルティサイクルが発生するため、読み書き可能データが命令 TCM のアドレス空間に誤って配置されないように注意する必要があります。
あるいは、以下のコードシーケンスを使用して TCM をイネーブルしてから、コードおよびデータセクションを必要に応じてコピーすることもできます。
MRC p15, 0, r0, c1, c0, 0 ; read CP15 register 1 into r0
ORR r0, r0, #(0x1 <<12) ; enable I-TCM
ORR r0, r0, #(0x1 <<2) ; enable D-TCM
MCR p15, 0, r0, c1, c0, 0 ; write cp15 register 1
キャッシュ搭載コアのベンチマーク
26 Copyright © 2002 ARM Limited. All rights reserved. Application Note 93ARM DAI 0093AJ-00
5.9.2 ARM966E-Sのののの TCMを使用したを使用したを使用したを使用した Dhrystoneの分析の分析の分析の分析
ARM966E-S には、ハーバードアーキテクチャの ARM9E-S コアと TCM メモリが実装されています。以下は、ARM966E-S で実行された Dhrystone ベンチマークと、ARM9E-S ハーバードコアにデュアルポート RAM を使用してモデリングした場合の、理論上達成可能な最大パフォーマンスとの比較の概要を示しています。
この例では、外部メモリはコア速度の 3 分の 1 のクロックが入力されます。したがって、MCCFG=3となります。
�������������������������������������������������������������������������������������
��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
������������������������������������ �����
���������������������������������������������������������������������������
��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
������������������
�������������������������������������������������������
����������������������������������������������������������������������������������������������������������������������������������������������������������
������������������
���������������������������������������������
���������������������������������������������������������������������������������������������������������������������
����������������� ���������������������������������������������
��������������������������������������������������������������������������������������������������������
����������������������������������
��������������������
����������������������������������������������������
�����������������
0
20
40
60
80
100
ARM966E-SののののTCMを使用したを使用したを使用したを使用したDhrystoneの分析の分析の分析の分析
������ %パフォーマンス 100 94.4 62.8 50.3 47.2 16.1
ARM9E-S コードとデータをTCM内に配置
スタックを外部メモリに配置
スタック /ヒープを外部メモリに配置
ライブラリコードを外部メモリに配置
コード /データを外部メモリに配置
注:注:注:注: すべてのコードとデータを TCM メモリ内に配置しても、理想的なパフォーマンスはなかなか達成できません。これは、TCM メモリからの特定のアクセスに見られるペナルティサイクルによるものです。例えば、命令 TCMへのデータアクセスによって、1サイクルペナルティが発生します。
実システムでは、TCM メモリは有限リソースであるため、TCM 内に配置することによってシステムパフォーマンスに大きな影響を与える主要なデータセクションとコードセクションを、注意して
見極める必要があります。
参考文献
Application Note 93 Copyright © 2002 ARM Limited. All rights reserved. 27ARM DAI 0093AJ-00
6 参考文献参考文献参考文献参考文献
ADSバージョン 1.2「デバッグターゲットガイド」:
• 第 2章「ARMulatorに関する基本事項」
• 第 4章「ARMulatorに関する参考情報」
付録
28 Copyright © 2002 ARM Limited. All rights reserved. Application Note 93ARM DAI 0093AJ-00
7 付録付録付録付録
7.1 ARMulatorで判明している問題で判明している問題で判明している問題で判明している問題
7.1.1 ARM920Tモデルモデルモデルモデル::::ADS 1.1における動作における動作における動作における動作
ADS 1.1に含まれる ARM920Tモデルでは、デフォルトで高速バスモードでの動作となり、バスクロックに基づいてコアクロックのタイミングが取られます。したがって、このモデルに対して指定
されるデフォルトのコアクロック周波数はバスクロックとなります。
2つのクロックドメインで動作させるには、このモデルを同期モードに切り替える必要があります。モードを切り替えるには、デバッガから、もしくは以下のコードシーケンスをアプリケーションに
組み込んで、コプロセッサ 15レジスタ 1内のビット 30をセットして下さい。
MRC p15, 0, r0, c1, c0, 0
BIC r0, r0, #0xc0000000
ORR r0, r0, #0x40000000
MCR p15, 0, r0, c1, c0, 0
注:注:注:注: コアモデルに同期モードが設定されていると、モデルに対して指定されるクロック周波数は依然としてバスクロックに使用されます。コアクロックは、このバスクロックに ARMulator定数MCCFGを掛けることによって導出されます。
したがって、ARM920Tが 100MHzクロックでモデリングされる場合には、バスクロックは100MHzとなります。その後、モデルを同期モードに変更すると、コアクロックは 100MHz xMCCFGとなります。
この動作は ADS 1.2では修正されています。
7.1.2 ADS 1.1でスタックトラッキングモデルでスタックトラッキングモデルでスタックトラッキングモデルでスタックトラッキングモデルををををイネーブルイネーブルイネーブルイネーブルするするするする
ARMulatorは、ADS 1.1でスタック使用モデルをサポートしていますが、設定ファイル内に誤りがあると、このモデルが動作しなくなります。
いくつかの設定ファイルを修正する必要があります。これらのファイルは binディレクトリ内にあり、このディレクトリは以下の場所で見つけることができます。<ADS_Installation_Directory>/bin
ここで default.ami という名前のファイルを探し、開きます(修正を加える前に、このファイルのバックアップコピーを作成しておくとよいでしょう)。
以下のエントリを追加します。
{ StackUse=Default_StackUse}
追加する場所は、Tracerエントリの次が適しています。スタックのトラッキングをディセーブルするには、以下のようにエントリを修正します。
{ StackUse=No_StackUse}
付録
Application Note 93 Copyright © 2002 ARM Limited. All rights reserved. 29ARM DAI 0093AJ-00
以上の修正を行ったら、このファイルを保存します。
次に、peripheral.amiという名前のファイルを探し、開きます。このファイルには、ファイルの最後に以下のようなエントリが含まれています。
{ Default_StackUse=StackuseStackBase=0x80000000StackLimit=0x70000000}
このエントリは、このファイルのセミホスト設定に記述されたスタックベースとスタックリミット
のエントリに合わせて修正する必要があります。さもないとスタックのトラッキングは正常に動作
しません。セミホストエントリをまだ修正していない場合には、以下のように変更することによっ
てスタックのトラッキングを有効にできます。
{ Default_StackUse=StackuseStackBase=0x08000000StackLimit=0x07000000}
このファイルを保存します。
ARMulatorを再起動すると、ARMulator起動時のバナーテキスト内に「Stack Tracker」モデルが表示されます。これで、[Debugger internals] ->[Statistics view]を選択することにより、スタック情報を表示させることができます。
注:注:注:注: この動作は ADS 1.2では修正されています。
注:注:注:注: ARMulatorのスタックトラッキング機能を使用すると、実行速度が大幅に低下します。