Różne programy na zajęcia laboratoryjne z AK2
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. // Dlugosc tablic (powinna byc podzielna przez 4)
  5. #define tab_length 60
  6. unsigned long rdtsc();
  7. void suma_c(int tab1[], int tab2[], int wynik[], long int length);
  8. void suma_sse(int tab1[], int tab2[], int wynik[], long int length);
  9. int main()
  10. {
  11. int tab1[tab_length], tab2[tab_length];
  12. int wynik_c[tab_length], wynik_sse[tab_length];
  13. int i;
  14. unsigned long time_start, time_stop;
  15. unsigned long time_c, time_sse;
  16. double acc;
  17. printf("Liczba elementow w tablicach: %d\n", tab_length);
  18. // Losowanie danych
  19. srand(time(NULL));
  20. for(i = 0; i < tab_length; i++)
  21. {
  22. tab1[i] = rand() % 101;
  23. tab2[i] = rand() % 101;
  24. }
  25. // Suma - C
  26. printf("Sumowanie - C...\t");
  27. time_start = rdtsc();
  28. suma_c(tab1, tab2, wynik_c, tab_length);
  29. time_stop = rdtsc();
  30. time_c = time_stop - time_start;
  31. printf("OK\n");
  32. // Suma - SSE (asembler)
  33. printf("Sumowanie - SSE...\t");
  34. time_start = rdtsc();
  35. suma_sse(tab1, tab2, wynik_sse, tab_length);
  36. time_stop = rdtsc();
  37. time_sse = time_stop - time_start;
  38. printf("OK\n");
  39. acc = (double)time_c / (double)time_sse;
  40. // Wyswietlenie wynikow
  41. if(tab_length <= 60)
  42. {
  43. // Zawartosc tablic - do kontroli, jezeli sa krotkie
  44. printf("\n\t\tC\tSSE\n");
  45. for(i = 0; i < tab_length; i++)
  46. {
  47. printf("%d+%d\t=\t%d\t%d\n", tab1[i], tab2[i], wynik_c[i], wynik_sse[i]);
  48. }
  49. }
  50. printf("\nCzas sumowania (TSC) - C:\t%lu\n", time_c);
  51. printf("Czas sumowania (TSC) - SSE:\t%lu\n", time_sse);
  52. printf("%fx szybciej\n", acc);
  53. return 0;
  54. }
  55. void suma_c(int tab1[], int tab2[], int wynik[], long int length)
  56. {
  57. int i;
  58. for(i = 0; i < length; i++)
  59. {
  60. wynik[i] = tab1[i] + tab2[i];
  61. }
  62. }