#include #include #include #define NELEMENTS 1024 #define THREADS 4 // deklariram strukturo za prenaĊĦanje argumentov v niti struct argumenti { int myID; // ID posamezne niti }; pthread_t thread[THREADS]; float vecA[NELEMENTS]; float vecB[NELEMENTS]; float vecC[NELEMENTS]; float dotProd; // instance struktur - vsak anit dobi svojo struct argumenti args[THREADS]; void *funkcijaNiti (void* arg){ int mojID; struct argumenti *args ; args = (struct argumenti *) arg; mojID = args->myID; for (int i = 0; i < NELEMENTS/THREADS; i++) { vecC[mojID*(NELEMENTS/THREADS)+i] = vecA[mojID*(NELEMENTS/THREADS)+i] * vecB[mojID*(NELEMENTS/THREADS)+i]; } } int main () { // init vhodnih vektorjev: for (int i = 0; i < NELEMENTS; i++) { vecA[i] = 1.0; //*(vecA + i) = 1.0; vecB[i] = 1.0; } // ustvarimo THREADS niti: for (int i = 0; i < THREADS; i++) { // inicializiraj IDje: args[i].myID = i; // ustvari niti: pthread_create( &thread[i], NULL, funkcijaNiti, (void *) &args[i]); } for (int i = 0; i < THREADS; i++) { pthread_join(thread[i], NULL); } dotProd = 0.0; for (int i = 0; i < NELEMENTS; i++) { dotProd += vecC[i]; } printf("Skalarni produkt = %f \n", dotProd); return 0; }