Ćwiczenie nr 4. Procesor sygnałowy ADSP21161.

Przykładowe programy do ćwiczenia: Projekt: Podstawowe operacje
( Project>Open> Podstawowe operacje.dpj )

Pętle programowe i sprzętowe

1.	Napisać pętlę programową realizującą algorytm y=n! (silnia) w języku C: 
int i,n;
float y;
n=15;
y=1;
for (i=1;i<=n; i++) 
   y*=i;
a.	Przeanalizować działanie ww. procedury w pracy krokowej. Wykonać program w pracy krokowej (klawisz F11) przy otwartym oknie View>Debug Windows>Disassembly. Zapisać sposób realizacji ww. procedury przez kompilator w języku niskiego poziomu (w assemblerze).
b.	
int time_start, time_elapsed;
	....
	time_start=count_start();
	... procedura, której czas działania chcemy zmierzyć ...
	time_elapsed=count_end(time_start);
printf(“Czas obliczen %d “,time_elapsed);

Zarejestrować czas działania ww. procedury w cyklach korzystając z następującego sposobu:

2.	Przeanalizować działanie podobnej procedury silnia_ASM napisanej w języku niskiego poziomu (assembler). Opisać różnice w stosunku do procedury w języku C. Zarejestrować czas działania ww. procedury w cyklach.
3.	Sprawdzić działanie ww. procedury dla wartości n=20. Skomentować wyniki. Opisać możliwość rozwiązania zaistniałego problemu.

Macierze i wektory

4.	Przeanalizować procedurę (matrix_x_vector_1) mnożenia macierzy (matrix_A) przez wektor (vector_X) zawartą w przykładzie nr 1. Wykonać program w pracy krokowej (klawisz F11) przy otwartym oknie View>Debug Windows>Disassembly. 
a.	Zaobserwować działanie skoku opóźnionego cjump _ matrix_x_vector_1 (db) przy wejściu do procedury matrix_x_vector_1
b.	Zaobserwować działanie dwóch pętli zrealizowanych sprzętowo (loop_kolumny, loop_wiersze).
c.	Zanotować czas wykonywania się ww. procedury w cyklach
d.	Napisać zmodyfikowaną wersję ww. procedury bez wykorzystania pętli – dla ustalonego rozmiaru macierzy n=3. Zanotować czas wykonywania się ww. procedury w cyklach.
e.	Porównać działanie procedury (matrix_x_vector_2) wykorzystującą operacje wykonywane równoległe (odczyt równoczesny z obu pamięci PM i DM). Zanotować czas wykonywania się ww. procedury w cyklach. Uwzględnić (odjąć od obu czasów) czas wejścia/wyjścia do procedury (Mierząc czas wykonania pustej procedury matrix_x_vector_0).
5.	Napisać procedurę mnożenia macierz x macierz wykorzystując bufory kołowe, oraz operacje równoległe.
6.	Napisać procedurę mnożenia macierz x macierz bez wykorzystania najbardziej wewnętrznej pętli. Porównać czasy wykonywania obu procedur.