|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Junior Member
Iscritto dal: Feb 2018
Messaggi: 2
|
[C] valutazione performance su scheda Zybo
Salve a tutti!
mi chiamo Andrea e anche se sono nuovo vi seguo da una vita! vi scrivo perchè sto riscontrano un grosso problema nella valutazione delle prestazioni di una parte di codice C. Aggiungo che sto utilizzando l'SDK della Xilinx basato su eclipse, in quanto sto valutando le prestazioni del SoC della scheda Zybo. purtroppo mi trovo davanti a delle domande a cui davvero non trovo risposta, e sono davvero di fretta. questo è il codice: 1 #define CLOCKS_PER_SECO TIMER_FREQ_HZ 2 volatile int *COUNTER_ADDR = (int *) 0xF8F00200; 3 uint64_t end, begin; 4 double myTotalTime; 5 .... 6 7 begin = *COUNTER_ADDR; 8 9 --BLOCK_CODE---- 10 11 end = *COUNTER_ADDR; 12 13 myTotalTime = ((double)(end-begin))/CLOCKS_PER_SECO; 14 15 xil_printf("\r\nCucles: %llu \n\r", 2*(end - begin)); 16 xil_printf("\rTotal Time: %llu sec\n\r", myTotalTime); 17 xil_printf("\rNumber of cycles in %f sec: %llu\n\r", myTotalTime, 2*(end - begin)); innanzitutto non capisco perchè in base a quale schermo io usi l'applicazione funzioni correttamente o meno in base al fatto che io usi o meno variabili di tipo uint64_t. in laboratorio funziona perfettamente, a casa mi creano dei problemi. comunque questo è il meno! allego l'output di questo codice. è nel file output1.txt è ovviamente sbagliato! sapete dirmi cosa sbaglio nel codice?? secondariamente ho altri problemi: se tolgo \n dalle righe 15 16 17 l'output è doppiamente sbagliato, e lo riporto nel file output2.txt non riesco a capire perchè! ultimo: io ho dichiarato la variabile nella riga 16 come double, ma se sostituisco %llu con %f l'output risulta senza numeri. per intenderci: stampa solo le parole ho debuggato l'applicazione e ho fatto i calcoli con la calcolatrice. il processore lavora a 670 MHz (non capisco perchè la frequenza definita dalla libreria creata in base all'hardware segna 650MHz) con la calcolatrice ho fatto i seguenti calcoli: clock cycles: 52409775*2 moltiplico per 2 perchè il contatore avanza di 1 ogni ciclo di entrambi i processori, e ho visto che è prassi comune farlo total time:52409775*2/670000000= 0.15715074962518740629685157421289 sec sono corretti giusto? non vorrei sbagliare! spero che riusciate a correggere il codice perchè ci sono una settimana e ho una scadenza. vi ringrazio davvero per l'attenzione e per tutto i consigli che mi avete permesso di acquisire negli anni! A presto! Andrea |
![]() |
![]() |
![]() |
#2 |
Junior Member
Iscritto dal: Feb 2018
Messaggi: 2
|
salve, ho risolto da me sostituendo il codice con il seguente:
xil_printf("cycles : %d .\n", (int) (2*(myend - mybegin))); myTotalTime = (myend - mybegin) / (XPAR_CPU_CORTEXA9_0_CPU_CLK_FREQ_HZ); printf("%f\n", myTotalTime); con la funzione xil_printf non funzionava più nulla. spero possa essere utile a qualcuno. Saluti |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Apr 2010
Città: Leuven
Messaggi: 667
|
Ma stai usando il core ARM dentro alla Zynq o stai facendo high level sysnthesis?
__________________
L'elettronica digitale non esiste, è solo elettrotecnica con interruttori piccoli! ![]() |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 13:36.