Título: Matrices con punteros Publicado por: Skali en 15 Mayo 2018, 18:48 pm Buenas! Qué tal? Les comento mi problema. Necesito enviar el offset de cada fila de una matriz cuadrada a través de la función MPI_Send(). La matriz está implementada a través de punteros, por lo cuál sus valores se almacenan en la heap y no en el stack como ocurre con las matrices comunes de la forma: matriz[fila][columna]. Les muestro como las estoy implementando. Imaginemos que en éste caso tenemos una matriz de 4x4 y la inicializamos con 1 en todos sus campos.
Código
La matriz resultante en éste caso sería una matriz asi: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 Ahora lo que necesito es enviar la dirección de cada fila a través de la función MPI_Send(), la cuál en su primer parámetro recibe un puntero a buffer. Aca les dejo una parte del manual de Mpi_Send: Citar #include <mpi.h> int MPI_Send(const void *buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm) Input Parameters buf Initial address of send buffer (choice). count Number of elements send (nonnegative integer). datatype Datatype of each send buffer element (handle). dest Rank of destination (integer). tag Message tag (integer). comm Communicator (handle). Lo que no se es cómo enviar el primer parámetro, me estoy volviendo loco con los tipos de datos y los punteros. Espero que me puedan dar una mano. Las matrices si o si deben utilizarse con memoria dinámica como mencioné en el código de arriba. Muchas gracias desde ya. Saludos Título: Re: Matrices con punteros Publicado por: MAFUS en 15 Mayo 2018, 20:14 pm La dirección será &A[fina*N]
Si hubieras hecho una verdadera matriz cuadrada la fila sería A[fila], más intuitivo. Título: Re: Matrices con punteros Publicado por: Skali en 15 Mayo 2018, 20:34 pm Hola MAFUS! Muchisimas gracias por la respuesta y por la velocidad en responder! :D. Resulta que estaba usando bien la dirección, pero el problema me surgía al estar usando mal el segundo parámetro:
Citar count Number of elements send (nonnegative integer). Más detalladamente, estaba paralelizando a través de MPI una multiplicación de matrices. A cada proceso worker le divido una parte del for que hace referencia a la fila, y para ello estaba usando las variables base y tope. Al segundo parámetro estaba enviando: Código
cuando lo correcto sería: Código
Un error muy tonto... En fin, gracias nuevamente por la respuesta. Me fue de mucha ayuda. Saludos! |