私のハードウェアでは time.h Clock() が壊れていますか?
質問
OMAP ZOOM 3430 MDK に付属の TMS32064x+ DSP でコードを実行するのに必要なクロック サイクルを測定してみます。DSP チップの「プログラマーズ ガイド」を見ると、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() がうまく機能していないようですが、これが私が何か間違ったことをしたためなのか、それともこのタイプのことが私が持っているハードウェアでサポートされていないためなのかはわかりません。なぜこれが起こっているのか考えられますか?
解決
これまでの質問を読んでから、私はオリジナルポスターは、これまでの貢献者よりも、この問題の実質的により多くの知識を持っている、と疑いがクロック()が壊れて(またはサポートされていない、と未定義を返していることをことを言うと思いますDSP上の結果は)非常に可能性が高いようです。
他のヒント
不思議なことに、なぜあなたは、の以前に割り当てられたの共有メモリを必要としないの。なぜあなたは、通常のスタック変数としてみてくださいませんか?私が行方不明です何がありますか?
たぶん、あなたは最初のクロックを初期化する必要があります。
どのようにそれをプリントアウトしていますか?多分問題は、結果を表示すると、実際のですか?
は、ほとんどのプラットフォーム上でclock_tは長い長いです。あなたは%dのprintf関数を使用している場合は、あなたが見ているものである様々な結果を得る可能性があります。
「clock_t」タイプのものであり、開始と終了の変数を仮定し、共有メモリは、渡された番号のもう一方の端の解釈に同じことを前提とし、その後、あなたの問題は、クロックへの呼び出しではなく、違いのごhandleingスタートの間終了時刻を終了します。
私はあなたの問題は二つの間の共有メモリであると考えています。あなたは二つの別々のプロセッサ間でメモリを共有しているかを示すためにコードを投稿してくださいことはできますか?
おそらく、インライン アセンブリを使用して CPU のカウンター レジスタに直接アクセスできるでしょう。
TMS320C64x+ は、TSCL、TSCH に 64 ビットのタイムスタンプ レジスタを備えています。 カウンタはリセット時に有効になりません。 カウンタを開始するには、まずレジスタに書き込む必要があります (おそらくこれが問題です) clock
?)。レジスタからの読み取りは、それぞれの半分を個別の命令で読み取る必要があるため、まったく簡単ではありません (割り込みも発生する可能性があります)。