Frage

Ich versuche, die Uhr cyles zu messen benötigt ein Stück Code auf dem TMS32064x + DSP ausführen, die mit dem OMAP ZOOM 3430 MDK kommt. Ich schaue auf dem „Programmierhandbuch“ des DSP-Chips und es sagt, dass der DSP die Uhr () Funktion unterstützt.

Was ich tue, ist ganz einfach, ich nur tun

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

und dann die Werte setzen von „Start“, „Stop“ und „total“ auf einen zuvor zugewiesene gemeinsam genutzten Speicher mit dem ARM-Prozessor. Dann einfach ich es den Bildschirm auf der ARM-Seite drucken.

Das Problem ist, in meinem ersten ausführt, hat ich immer den gleichen „total“ Wert erhalten, und dann in meinem nächsten Laufe ich immer 0 bekommen! Die „Start“ und „Stop“ Werte gehen zusammen mit dem „total“ Wert.

Das Merkwürdigste ist, dass sie zu sein scheinen ein Bitmuster zu folgen! Ich habe die Ausgabe unter:

# ./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

Apparantly, Uhr () funktioniert nicht gut, aber ich bin nicht sicher, ob dies wegen etwas, was ich falsch machen oder weil diese Art der Sache nicht mit der Hardware unterstützt wird ich habe. Irgendwelche Ideen, warum dies passiert sein könnte?

War es hilfreich?

Lösung

Von den Fragen so weit zu lesen, würde ich das Originalposter sagen hat wesentlich mehr Wissen über diese Angelegenheit als die Mitwirkenden so weit, und dass der Verdacht, dass die Uhr () unterbrochen ist (oder nicht unterstützt wird, und gibt eine undefinierte Ergebnis) auf dem DSP scheint sehr wahrscheinlich.

Andere Tipps

Merkwürdigerweise Warum benötigen Sie einen vorher zugewiesen Shared Memory . Warum versuchen Sie nicht mit einem normalen Stapel Variable? Gibt es etwas, dass ich fehle?

Vielleicht müssen Sie die Uhr initialisieren zuerst.

Wie drucken Sie es aus? vielleicht das Problem ist eigentlich mit dem Ergebnis angezeigt wird?

auf den meisten Plattformen ist clock_t eine lange lange. Wenn Sie printf mit% d verwenden sind können Sie unterschiedliche Ergebnisse erhalten, was ist das, was Sie sehen.

die Start- und Zielvariable Unter der Annahme, ist vom Typ ‚clock_t‘ und gemeinsam genutzten Speicher übernimmt das gleiche auf die Interpretation der anderen Endes der Zahlen bestehen, dann ist das Problem nicht mit dem Anruf zu takten, und Ihr handleing der Differenz zwischen dem Start Endzeit beenden.

Ich glaube, Ihr Problem in dem gemeinsam genutzten Speicher ist zwischen den beiden. Können Sie dir bitte Code schreiben zu zeigen, wie Sie Speicher zwischen zwei getrennten Prozessoren teilen?

Vielleicht könnten Sie einige Inline-Assembly verwenden, um die direkt Zählerregister der CPU zugreifen zu können.

Die TMS320C64x + verfügt über ein 64-Bit-Zeitstempel-Register in TSCL, TSCH. Der Zähler wird nicht auf Reset aktiviert, Sie müssen zuerst in das Register schreiben, den Zähler zu starten (vielleicht ist das Problem mit clock?). aus dem Register zu lesen, ist nicht ganz trivial, da jede Hälfte mit einer separaten Anweisung gelesen werden muß (und Sie können Interrupts bekommen ...).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top