Multiplicação de matrizes usando thread
#include
#include
#include
#include
//QUANTIDADE DE THREADS int pthreads_count;
//QUANTIDADE DE LINHAS CALCULADAS POR CADA THREAD int * lines_per_thread;
//TAMANHO N DA MATRIZ N x N int matrix_size;
//MATRIZES
int ** matrix_a, ** matrix_b, ** matrix_c;
//ESTRUTURA PARA sER MANDADA PARA A FUNCAO 'pthread_create' struct ARGUMENT
{
int turn;
};
/* FUNCAO QUE CRIA, PREENCHE E RETORNA ESTRUTURA INT_MATRIX, DADOS LINHAS, COLUNAS, VALOR MAXIMO E VALOR MINIMO - ALOCA A MATRIZ DINAMICA - DEFINE O NUMERO DE LINHAS E COLUNAS - PREENCHE COM VALORES ALEATORIOS NO INTERVALO ( minimum, maximum ) */ int ** buildMatrix( int minimum, int maximum )
{
int ** matrix = ( int ** ) malloc( matrix_size * sizeof( int* ) ); // int i, j; for ( i = 0; i < matrix_size; i++ ) { matrix[ i ] = ( int * ) malloc( matrix_size * sizeof( int ) ); for ( j = 0; j < matrix_size; j++ ) matrix[ i ][ j ] = rand() % ( maximum - minimum + 1 ) + minimum; } return matrix;
}
/* FUNCAO QUE CRIA E RETORNA UMA ESTRUTURA INT_MATRIX PARA GUARDAR O RESULTADO DA MULTIPLICACAO a x b - ALOCA A MATRIZ DINAMICA ( ZERADA ) - MULTIPLICA AS MATRIZES a e b */
//MOSTRA O CONTEUDO DE UMA ESTRUTURA INT_MATRIX void show( int ** target )
{
int i, j; for ( i = 0; i < matrix_size; i++ ){ for ( j = 0; j < matrix_size; j++ ) printf("%d\t", target[ i ][ j ] ); printf("\n"); } printf("\n");
}
void multMatrices( void )
{
int mult_i, mult_j, pointer; for ( mult_i = 0; mult_i < matrix_size; mult_i++ ) for ( mult_j = 0; mult_j < matrix_size; mult_j++ ) { for ( pointer = 0; pointer < matrix_size; pointer++ ) { matrix_c[ mult_i ][ mult_j ] += matrix_a[ mult_i ][ pointer ] * matrix_b[ pointer ][ mult_j ]; } }
}
//FUNCAO PARA SER USADA NA 'pthread_create' void * multPthread( void * t )
{
int start_row = 0, final_row, i, turn = ( ( struct ARGUMENT * ) t )->turn; // for ( i = 0; i < turn; i++) {