diff --git a/DergunPiotr-WaskoDominik/zad3/Makefile b/DergunPiotr-WaskoDominik/zad3/Makefile new file mode 100644 index 0000000..e64f683 --- /dev/null +++ b/DergunPiotr-WaskoDominik/zad3/Makefile @@ -0,0 +1,5 @@ +macierz_gpu: macierz_gpu.cu + nvcc macierz_gpu.cu -o macierz_gpu + +clean: + rm -rf macierz_gpu diff --git a/DergunPiotr-WaskoDominik/zad3/Ttiming.h b/DergunPiotr-WaskoDominik/zad3/Ttiming.h new file mode 100644 index 0000000..93d6e19 --- /dev/null +++ b/DergunPiotr-WaskoDominik/zad3/Ttiming.h @@ -0,0 +1,40 @@ +#if !defined(DEF_TTIMING) +#define DEF_TTIMING +#include + +class TTiming +{ +protected: + struct timeval start; + struct timeval stop; + void getTime(timeval &tv); + +public: + TTiming(void); + + void Begin(void); + long End(void); +}; + +inline TTiming::TTiming(void) +{ + +} + +inline void TTiming::Begin(void) +{ + getTime(start); +} + +inline long TTiming::End(void) +{ + getTime(stop); + return ((stop.tv_sec-start.tv_sec) * 1000 + (stop.tv_usec-start.tv_usec)/1000.0) + 0.5; +} + +inline void TTiming::getTime(timeval &tv) +{ + gettimeofday(&tv,NULL); +} + +#endif diff --git a/DergunPiotr-WaskoDominik/zad3/macierz_gpu b/DergunPiotr-WaskoDominik/zad3/macierz_gpu new file mode 100755 index 0000000..96aa776 Binary files /dev/null and b/DergunPiotr-WaskoDominik/zad3/macierz_gpu differ diff --git a/DergunPiotr-WaskoDominik/zad3/macierz_gpu.cu b/DergunPiotr-WaskoDominik/zad3/macierz_gpu.cu new file mode 100644 index 0000000..9a8136c --- /dev/null +++ b/DergunPiotr-WaskoDominik/zad3/macierz_gpu.cu @@ -0,0 +1,105 @@ +#include +#include "Ttiming.h" + + + + +__global__ void set(int *a,int *b, int N){ + int i =blockIdx.x * blockDim.x + threadIdx.x; //patrz w niej w 'multiply' + while(i>>(dev_a,dev_b,N); //wypełaianie tablic a i b 'losowymi' wartościami + cudaDeviceSynchronize(); //synchronizacja, bo inaczej pomar czasu nie ma sensu + + //czas start + tt.Begin(); + + //mnożenie a i b; c to wynik + multiply<<<10,384>>>(dev_a,dev_b,dev_c,size); //takie wartosći <<<10,384>>> bo jest dla nich najszybsze, ale jeszcze zrobie dokładne testy i ewentualnie je poprawie + + //czas stop + cudaDeviceSynchronize();//synchronizacja, bo inaczej pomar czasu nie ma sensu + time = tt.End(); + + + if(false){ + //kopiowanie tablicy 'c' z pamieci urządzenia do hosta co by można było to odczytać, wyswietlić itp. + cudaMemcpy(c,dev_c,N*sizeof(long),cudaMemcpyDeviceToHost); + for(int i=0;i