Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #59 da revista programar. Faz já o download aqui!

tcms

[Resolvido] Calculo de matrizes em C

Mensagens Recomendadas

tcms    1
tcms

Boas pessoa,,

Estou a tentar calcular a multiplicação de duas matrizes em C. Estou a usar MPI para paralelizar o calculo, contudo, estou a receber erros de segmentation fault, muito provavelmente por causa de ponteiros. O meu código é o seguinte:

int main(int argc, char *argv[]) {
double **A, **B, **C, *tmp1,*tmp2,*tmp3;
int N, i, j, k;
double som;

N =8;

int myrank, P, from, to;

tmp1 = (double *) malloc (sizeof(double ) * N * N);
tmp2 = (double *) malloc (sizeof(double ) * N * N);
tmp3 = (double *) malloc (sizeof(double ) * N * N);
A = (double **) malloc (sizeof(double *) * N);
B = (double **) malloc (sizeof(double *) * N);
C = (double **) malloc (sizeof(double *) * N);


MPI_Init (&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &myrank);
MPI_Comm_size(MPI_COMM_WORLD, &P);


from = myrank * N/P;
to = (myrank+1) * N/P;


if(myrank == 0){

for (i = 0; i < N; i++){
			A[i] = &tmp1[i * N];
					B[i] = &tmp2[i * N];
							C[i] = &tmp3[i * N];
}


}



printf("Rank: %d\n", myrank);

MPI_Scatter(A, N*N/P, MPI_DOUBLE,A[from], N*N/P, MPI_DOUBLE, 0, MPI_COMM_WORLD);

Recebo um segmentation fault no MPI_Scatter, e não consigo perceber o que estou a fazer mal.

Editado por tcms
GeSHi

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
HappyHippyHippo    1140
HappyHippyHippo

o problema parece estar relaciona com o uso da biblioteca MPI.

devido a tal, necessitas de esperar por alguem que tenha usado essa mesma biblitoeca e esperar que possa ter alguma ideia dos problemas normais no uso dessa biblioteca


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
tcms    1
tcms

Eu penso que o problema tem a ver com o facto como eu uso as matrizes. Ali onde coloco A[from] apenas tou a dizer as linhas (from)

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
tcms    1
tcms

Resolvi o problema. Tinha de alocar os arrays em todos os processadores! Apenas estava a alocar no processador 0 (erro tão simples...)

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.