7

OMAP ZOOM 3430 MDK に付属の TMS32064x+ DSP でコードを実行するために必要なクロック サイクルを測定しようとしました。DSP チップの「Programmer's Guide」を見ると、DSP が clock() 関数をサポートしていると書かれています。

私がやっていることはとてもシンプルです。

start = clock();
for (i=0;i<100;i++){
    /* do something here */
}
stop = clock();
total = stop - start;

次に、「start」、「stop」、および「total」の値を、ARM プロセッサで以前に割り当てられた共有メモリに配置します。次に、それを ARM 側の画面に表示するだけです。

問題は、最初の実行では常に同じ「合計」値を取得し、次の実行では常に 0 を取得することです! 「開始」値と「停止」値は「合計」値と一緒です。

最も奇妙なことは、ビットパターンに従っているように見えることです! 出力を以下に示します。

# ./sampleapp
Total = 63744
Start clock() value = 0x000000f9
Stop  clock() value = 0x0000f9f9
# ./sampleapp 
Total = 4177526784
Start clock() value = 0x00f9f9f9
Stop  clock() value = 0xf9f9f9f9
# ./sampleapp
Total clock cyles = 0
Start clock() value = 0xf9f9f9f9
Stop  clock() value = 0xf9f9f9f9

明らかに、clock() はうまく機能していませんが、これが何か間違っているためなのか、それともこのタイプのものが私のハードウェアでサポートされていないためなのかはわかりません。なぜこれが起こっているのでしょうか?

4

6 に答える 6

2

これまでの質問を読んだことから、元のポスターはこれまでの寄稿者よりもこの問題についてかなり多くの知識を持っており、clock()が壊れている(またはサポートされておらず、未定義の結果を返す)という疑いがありますDSPはかなり可能性が高いようです。

于 2009-07-14T07:30:25.610 に答える
0

おそらく、インライン アセンブリを使用して、CPU のカウンタ レジスタに直接アクセスできます。

TMS320C64x+ には、TSCL、TSCH に 64 ビットのタイムスタンプ レジスタがあります。 カウンターはリセット時に有効化されません。最初にレジスターに書き込み、カウンターを開始する必要があります (おそらくこれはclock? の問題です)。レジスタからの読み取りは、各半分を個別の命令で読み取る必要があるため、それほど簡単ではありません (そして、割り込みを取得できます...)。

于 2011-08-22T21:27:31.690 に答える
0

どうやって印刷していますか?多分問題は実際に結果を表示することですか?

ほとんどのプラットフォームで、clock_t は long long です。%d で printf を使用している場合、表示されている可変の結果が得られる可能性があります。

于 2009-07-09T00:12:21.650 に答える
0

開始変数と終了変数が「clock_t」型であり、共有メモリが渡された数値の相手側の解釈で同じであると想定すると、問題はクロックの呼び出しではなく、開始の違いの処理にある終了時間。

あなたの問題は、2つの間の共有メモリにあると思います。2 つの別々のプロセッサ間でメモリを共有する方法を示すコードを投稿していただけますか?

于 2009-07-10T12:53:48.273 に答える
0

最初に時計を初期化する必要があるかもしれません。

于 2009-07-08T13:46:38.777 に答える
0

不思議なことに、以前に割り当てられた共有メモリが必要なのはなぜですか。通常のスタック変数で試してみませんか?不足しているものはありますか?

于 2009-07-08T08:13:12.560 に答える