lab1 33B Skrzypek Mateusz LAB 1 Przetwarzanie współbieżne 1 Temat: Makefile i pomiar czasu Grupa: Data lab: Autor: Mateusz...

Jak cię złapią, to znaczy, że oszukiwałeś. Jak nie, to znaczy, że posłużyłeś się odpowiednią taktyką.

Wszystkie kroki zostały wykonane. Kod źródłowy w C oraz dwie wersje pliku Makefile zostały załączone poniżej.

Główna część zadania sprowadzała się do napisania, skompilowania oraz uruchomienia programu realizującego operację iloczynu skalarnego dwóch wektorów wraz z pomiarem czasu tej operacji.

Do kompilacji użyto polecenia: gcc –o mój_program mój_program.c pomiar_czasu.c W celu uruchomienia użyto polecenia: ./mój_program – powyżej wynik tej operacji.

Program został także uruchomiony przy pomocy polecenia make. Uzupełniona struktura pliku Makefile została przedstawiona poniżej.

Struktura pliku Makefile po uzupełnieniu (dopisaniu procedury dla mój_program.o):

# kompilator c
CCOMP = gcc

# konsolidator
LOADER = gcc

# opcje optymalizacji:
# wersja do debugowania
OPT = -g -DDEBUG
# wersja zoptymalizowana do mierzenia czasu
# OPT = -O3

# pliki naglowkowe
#INC = -I../pomiar_czasu

# biblioteki
#LIB = -L../pomiar_czasu -lm

# zaleznosci i komendy
moj_program: moj_program.o pomiar_czasu.o

$(LOADER) $(OPT) moj_program.o pomiar_czasu.o -o moj_program $(LIB)

# Dopisana procedura
# jak uzyskac plik moj_program.o ?
moj_program.o: moj_program.c pomiar_czasu.h

$(CCOMP) -c $(OPT) moj_program.c


pomiar_czasu.o: pomiar_czasu.c pomiar_czasu.h

$(CCOMP) -c $(OPT) pomiar_czasu.c

Zadania dodatkowe:

Zawartość archiwum pomiar_czasu.tgz została wypakowana do nowego katalogu: pomiar_czasu.
Kompilujemy plik pomiar_czasu.c poleceniem: gcc –c pomiar_czasu.c w celu otrzymania pliku pomiar_czasu.o.
Za pomocą polecenia ar rs libpomiar.a pomiar_czasu.o został utworzony plik biblioteczny libpomiar.a.

Modyfikujemy Makefile oraz uruchamiamy program poleceniem make.


Struktura pliku Makefile po modyfikacji (załączenie utworzonej biblioteki, procedura clean):
# kompilator c
CCOMP = gcc

# konsolidator
LOADER = gcc

# opcje optymalizacji:
# wersja do debugowania
OPT = -g -DDEBUG
# wersja zoptymalizowana do mierzenia czasu
# OPT = -O3

# pliki naglowkowe


INC = -I../pomiar_czasu

# biblioteki
LIB = -L../pomiar_czasu –lpomiar

# zaleznosci i komendy
moj_program: moj_program.o

$(LOADER) $(OPT) moj_program.o -o moj_program $(LIB)

# jak uzyskac plik moj_program.o ?
moj_program.o: moj_program.c

$(CCOMP) $(INC) -c $(OPT) moj_program.c

clean:

rm -f *.o


Kod źródłowy w C:

#include<stdlib.h>
#include<stdio.h>
#include<time.h>
#include "pomiar_czasu.h"
int main()
{
srand(time(NULL));
inicjuj_czas();

//Otwarcie pliku do zapisu:
FILE *fp;

if ((fp=fopen("wynik.txt", "w"))==NULL) // otwarcie pliku do zapisu
{

printf ("Nie mogę otworzyć pliku wynik.txt do zapisu! \n"); exit(1);
}






// Dynamiczna alokacja pamięci:
double *tab1, *tab2, tCPU, tClock, tCPUZapis, tClockZapis; size_t size = 1000000;




tab1 = (double *)malloc(sizeof(double) * size);



tab2 = (double *)malloc(sizeof(double) * size);




if (!tab1 | !tab2)


{



perror("malloc");



return EXIT_FAILURE;



}

//Wypełnienie tablic:


int i=0;


for(i=0; i< (int)size; i++)


{



tab1[i] = rand()/(RAND_MAX + 1.0);

tab2[i] = rand()/(RAND_MAX + 1.0);
}



// Mnożenie elementów tablic oraz pomiar czasu tej operacji:


tCPU = czas_CPU();


tClock = czas_zegara();





double suma =0;




for(i=0; i< (int)size; i++)

{


suma += tab1[i]*tab2[i];

}
tCPU = czas_CPU()

- tCPU;
tClock = czas_zegara()

- tClock;




// Zapis do pliku oraz pomiar czasu tej operacji: tCPUZapis = czas_CPU();


tClockZapis = czas_zegara();




for(i=0; i< (int)size; i++)


{



fprintf (fp, "%lf", tab1[i]);


fprintf (fp, "%s", "\t");

fprintf (fp, "%lf", tab2[i]);

fprintf (fp, "%s", "\n");
}




tCPUZapis = czas_CPU()

- tCPUZapis;
tClockZapis = czas_zegara()

- tClockZapis;

//Wyświetlenie wyników:


printf("\t*** WYNIKI ***");


printf("Mnozenie");


printf("czas CPU = %lf\n",tCPU); printf("czas zegarowy = %lf\n",tClock); printf("\nZapis danych do pliku");


printf("czas CPU = %lf\n",tCPUZapis); printf("czas zegarowy = %lf\n",tClockZapis); return 0;
}

Powered by wordpress | Theme: simpletex | © Jak ciÄ™ zÅ‚apiÄ…, to znaczy, że oszukiwaÅ‚eÅ›. Jak nie, to znaczy, że posÅ‚użyÅ‚eÅ› siÄ™ odpowiedniÄ… taktykÄ….