Thread - multiplicação de matrizes
#include <unistd.h>
#include <stdio.h>
#include <pthread.h>
int tamanho = 1000, divisao = 0; int matriz1[1000][1000], matriz2[1000][1000], matriz3[1000][1000]; int a1 = 0, a2, a3, a4, a5, a6, a7, a8;
void *calcula (int *arg){ int k = 0, i = 0, j = 0; for (i=*arg;i<*arg+divisao; i++) { for (j=0; j<tamanho; j++) { for (k=0; k<tamanho; k++) { matriz3[i][j] = matriz3[i][j] + matriz1[i][k] * matriz2[k][j]; } } } pthread_exit(NULL);
}
/*exemplo de função usando thread foi a que funcionou void *vetor1 (int *arg){ int count = 0, i = 0; for(i = *arg; i < *arg+25; i++){ count += vet[i]; } printf("%d\n", count); pthread_exit(count);
}
*/
int main(int argc, char *argv[]) {
int i, j, k; int num_thread; tamanho = atoi(argv[1]); num_thread = atoi(argv[2]); matriz1[tamanho][tamanho]; matriz2[tamanho][tamanho]; matriz3[tamanho][tamanho];
divisao = tamanho / num_thread; a2 = divisao; a3 = a2 + divisao; a4 = a3 + divisao; a5 = a4 + divisao; a6 = a5 + divisao; a7 = a6 + divisao; a8 = a7 + divisao;
pthread_t t1, t2, t3, t4, t5, t6, t7, t8;
printf("\n#### MULTIPLICACAO DE MATRIZES ####\n");
//preenchimento matriz 1 for (i=0; i<tamanho; i++) { for(j=0; j<tamanho; j++) { matriz1[i][j] = 1; } }
//preenchimento matriz 2 for (i=0; i<tamanho; i++) { for(j=0; j<tamanho; j++) { matriz2[i][j] = 2; } }
//preenchimento matriz 3 for (i=0; i<tamanho; i++) { for(j=0; j<tamanho; j++) { matriz3[i][j] = 0; } }
if(num_thread == 2){ pthread_create(&t1, NULL, calcula, &a1); pthread_create(&t2, NULL, calcula, &a2); pthread_join(t1, NULL); pthread_join(t2, NULL); }else if(num_thread == 4){ pthread_create(&t1, NULL, calcula, &a1); pthread_create(&t2, NULL, calcula, &a2); pthread_create(&t3, NULL, calcula,