質問

最近、私たちが開発したアルゴリズムの MIPS (1 秒あたり 100 万命令) を作成するよう依頼されました。このアルゴリズムは、C スタイルの関数のセットによって公開されます。Dell Axim でコードを実行して、さまざまな入力下でのパフォーマンスのベンチマークを行いました。

この質問はハードウェア ベンダーからのものですが、私は主に HL ソフトウェア開発者であるため、この要求にどう答えるべきかわかりません。同じようなハードウェア/ソフトウェアの背景を持つ人が役立つかもしれません...

  1. 私たちのアルゴリズムはリアルタイムではないので、MIPS として定量化する必要はないと思います。組立説明書の総数を単純に見積もることはできますか?

  2. 1 が true の場合、どうやってこれを行いますか (つまり、アセンブリ命令の数を測定する方法) 一般的に、または ARM/XScale に特化して?

  3. 2 は WM デバイス上で、または VS2005 で提供されるデバイス エミュレータ経由で実行できますか?

  4. 3は自動化できるのでしょうか?

ご協力ありがとうございました。チャールズ


あなたのすべての協力に感謝します。S.ロットは的を射ていたと思います。そして、フォローアップとして、さらに質問があります。

5 MIPS の測定方法について何か提案はありますか?私たちのアルゴリズムを実行し、それを Dhrystone/Whetstone ベンチマークと比較して MIS を計算することを提案している人がいると聞きました。

6 アルゴリズムはリアルタイムで実行する必要がないため、MIPS は本当に有用な手段ですか?(例えば。階乗(N)) 処理要件を定量化する他の方法にはどのようなものがありますか?(実行時のパフォーマンスはすでに測定しましたが、満足のいく結果ではありませんでした。)

7 最後に、MIPS は大まかな推定値であり、dep. であると仮定します。コンパイラ、最適化設定などについて?

役に立ちましたか?

解決

ハードウェア ベンダーは、必要な MIPS 数を尋ねると思います。

「1,000 MIPS プロセッサが必要ですか? それとも 2,000 MIPS プロセッサが必要ですか?」

経営陣はどちらを「MIPS は何ですか?」と翻訳します。

ハードウェアは MIPS を提供します。ソフトウェアは MIPS を消費します。

2 つの自由度があります。

  • プロセッサー固有の MIPS 機能。

  • その数の MIPS を消費する秒数。

プロセッサーに十分な MIPS がない場合、アルゴリズムは「遅く」なります。

プロセッサーに十分な MIPS がある場合、アルゴリズムは「高速」になります。

「高速」と「低速」を引用符で囲んだのは、「パフォーマンス要件を満たすのに十分な速さ」または「パフォーマンス要件を満たすのに遅すぎる」を判断するにはパフォーマンス要件が必要であるためです。

2,000 MIPS プロセッサでは、許容範囲内の 2 秒かかる可能性があります。しかし、1,000 MIPS プロセッサでは、これは許容できない 4 秒にまで爆発します。


どれくらいの MIPS が必要ですか?

  1. プロセッサーの公式 MIPS を入手してください。見る http://en.wikipedia.org/wiki/命令ごとの秒数

  2. いくつかのデータに対してアルゴリズムを実行します。

  3. 正確な実行時間を測定します。不確実性を減らすために、多数のサンプルを平均します。

  4. 報告。750 MIPS プロセッサーでの 3 秒は、750 MIPS では 3 秒です。MIPS はレートです。時間は時間です。距離は速度と時間の積です。750 MIPS での 3 秒は、750*300 万命令に相当します。

記憶率 (1 秒あたりの指示数) * 時間 (秒) で指示が得られます。

3*750 MIPS とは言わないでください。そうではありません。それは 22 億 5000 万命令です。

他のヒント

いくつかのメモ:

  1. MIPS は、プロセッサの一般的な「容量」の尺度としてよく使用されます。特にソフト リアルタイム/組み込み分野では、プロセッサに作業が過負荷にならないようにする必要があります。時間は非常に重要であるため、これは 1 秒あたりの命令数であることに注意してください。

  2. このような方法で使用される MIPS は非常に非科学的です。

  3. この方法で使用される MIPS は、多くの場合、システムのサイジングとプロセッサの速度の決定に最適な近似値です。25% オフになる可能性もありますが、気にしないでください...

  4. MIPS をカウントするには、使用しているプロセッサに近いプロセッサが必要です。使用中の実際のコンパイラから実際の命令ストリームをキャプチャするには、適切な命令セットが明らかに重要です。

PC ではこれを近似することはできません。これを正しく行うには、いくつかのツールのいずれかを使用する必要があります。

  1. Qemu、ARM 独自のツール、Synopsys、CoWare、Virtutech、VaST などのターゲット アーキテクチャの命令セット シミュレータを使用します。これらは高速ですが、命令をかなり正確にカウントでき、適切な命令セットをサポートします。整数除算などの高価な命令を多用しない限り (浮動小数点は使用しないでください)、これらの数値はほぼほぼ近い値になる傾向があります。

  2. ターゲット プロセッサ (またはそれに近いもの) に適したクロック サイクルの正確なシミュレータを見つけます。これにより、パイプライン効果などをかなり正確に見積もることができます。もう一度、ARM または Carbon SoCDesigner から入手してください。

  3. 対象とするプロセッサ ファミリの開発ボード、またはそれに近い設計の ARM を入手し、そこでアプリケーションのプロファイリングを行います。ARM11 のプロファイリングに ARM9 を使用することはありませんが、たとえば ARM11 は ARM Cortex-A8/A9 の適切な近似値になる可能性があります。

MIPS 通常、プロセッサの能力を測定するために使用されます。

アルゴリズムは通常、次のいずれかを使用します。

  1. 一定の時間 (特定のプロセッサで実行している場合)
  2. 一定数の命令 (アーキテクチャに応じて)

アルゴリズムを 1 秒あたりの命令数で説明するのは奇妙な尺度のように思えますが、もちろん、アルゴリズムが何をするのかはわかりません。

有意義な尺度を見つけるには、アルゴリズムが完了するまでにかかる平均時間を測定できるテストを設定することをお勧めします。組み立て説明書の数は妥当な目安ですが、数えるのは難しい場合があります。最善の策は次のようなものです (疑似コード)。

const num_trials = 1000000
start_time = timer()
for (i = 1 to num_trials)
{
    runAlgorithm(randomData)
}
time_taken = timer() - start_time
average_time = time_taken / num_trials

MIPSは、CPU速度の尺度ではなく、アルゴリズムの性能です。私は誰かが少し混乱している、線に沿ってどこかを取ることができます。彼らは何を見つけるためにしようとしていますか?私は考えることができる唯一の可能性の高いシナリオは、彼らはあなたが彼らが十分にあなたのプログラムを実行するためにあなたを与える必要がどのように高速なプロセッサを決定するのを助けるためにしようとしているです。

あなたは(入力データに依存するつもりは間違いありませんので、これは非自明である)命令の数にアルゴリズムを測定することができますので、

、あなたはその後、MIPSを得るために時間のいくつかの措置を必要とする - 例えば、「私はそれを毎秒1000回を起動する必要があります」と言います。あなたのアルゴリズムは、その特定のケースのための1000の指示をされた場合は、あなたがになってしまいます。

1000 instructions / (1/1000) seconds = 1000000 instructions per second = 1 MIPS.

私はまだそれが物事をしようとする本当に奇妙な方法だと思うので、あなたは明確化をお願いしたいことがあります。あなたの具体的な質問については、私は、Visual Studioに慣れて誰かにそれを残しておきます。

また異なるコンパイラとコンパイラオプションは、大きな違いを生むことに注意してください。同じソースコードは、多くの異なる速度で実行することができます。だからではなく、2MIPSプロセッサを購入するあなたは、1 / 2MIPSプロセッサを使用すると、コンパイラオプションを使用することができます。または、より良いコンパイラにお金を使うとより安いプロセッサを使用します。

ベンチマークはせいぜい欠陥があります。趣味として、私は、同じハードウェアのための様々なベンダーからの様々なコンパイラで同じドライストーン(及び砥石)コードをコンパイルするために使用され、数字は、すべての場所で数桁でした。同じソースコードと同じプロセッサ、ドライストーンのdidntは、ベースラインとして有用ではない事を意味します。 YOURアルゴリズムの実行を行い、良いそれが必要以上に早くまたは速くなりましたどのくらいの速ベンチマークではどのような事柄です。あなたはスロップの多くを可能にする方法フィニッシュラインの近くによります。初期の段階では、おそらくあなたが必要とするよりも早く5または10または100回を実行していることがしたい上にそのプロジェクトの終了によって、あなたがあることを少なくともわずかに速くあなたが必要以上ます。

私はS.ロットが言っている何を考えに同意し、これはすべての販売およびマーケティングと経営の話です。経営陣はロックやハードの場所の間で入れたものであることは、あなたが何をする必要があるか彼らは最速のプロセッサを購入してもらうと、彼らはあなたがしようとしているカラフルな円グラフやグラフをもとに費やすことをいとわない最高のツールです正当化のような薄い空気から生成します。道の終わり近くに、それはかなりの性能を満たしているdoesntの場合は、StackOverflowのために返すことができますが、同時に管理は、ほぼすべての価格またはスワッププロセッサで異なるツールチェーンを購入し、ボードをRESPINことを余儀なくされます。それまでにあなたはどのようにターゲットの近くに知っておくべき、我々は1.0を必要とし、我々は、我々はそれをしなければなら買って1の2倍の速さであるプロセッサを購入した場合、我々は1.25であります。

あなたは、物事のこれらの種類を自動化したり、ツールに依存してシミュレートすることができますかどうかは、時々はい、時にはなし。私はそれらに直接話すカントあなたがそう話しているツールに精通していないです。

この応答は直接質問に答えるために、この質問が取得し、なぜ周りに追加のコンテキストを提供するものではありません。

アルゴリズムのMIPSは、必要な時間内にイベントに応答する必要があるアルゴリズムにのみ関連しています。

は、例えば、風速を検出する風速25マイル/時間にわたって横切るときに、第2の内のアクチュエータを移動させるように設計されたコントローラを考えます。私たちはそれを計算し、しきい値に対して風速を比較するために、1000の指示を取りましょう。このアルゴリズムのMIPS要件は、毎秒1キロの取扱説明書(KIPS)です。コントローラは1つのMIPSプロセッサに基づいている場合、我々は快適に他の機能を追加するためのコントローラでより多くのジュースがあると言うことができます。

他にどのような機能は、コントローラに追加されるだろうか?それは追加される機能/アルゴリズムのMIPSに依存します。秒以内に実行することが100,000命令(すなわち100 KIPS)を必要とする別の関数がある場合、我々はまだこの新しい機能に対応し、さらに他の機能を追加するためのいくつかの部屋を持つことができます。

第1の推定値についてはPC上のベンチマークは、有用であり得る。

あなたが特定のデバイスとのクロック周波数にコミットする前に、

ただし、開発ボードを取得する必要(またはいくつかのPDAを?)ARMターゲットアーキテクチャとそこにベンチマークそれをためています。

今日のマシンの速度に影響を与える要因(キャッシング、パイプライン、異なる命令セット、...)がたくさんありますので、PC上のあなたのベンチマークは、道オフw.r.t.かもしれARMます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top