Exercício MPI ------------- O objectivo deste exercício é aprender a utilizar a primitiva MPI_Reduce que permite agregar colctivamente os resultados parciais de vários nós e concentrá-los no nó de comando, realizando simultâneamente uma operação sobre os dados recolhidos. Para uma descrição detalhada do MPI_Reduce consultar: https://computing.llnl.gov/tutorials/mpi/#Collective_Communication_Routines Este mesmo tutorial é também útil para obter a sintaxe e descrição de todas as outras primiticas utilizadas. https://computing.llnl.gov/tutorials/mpi O exercício consite em realizar, por exemplo, a soma de N números inteiros (com N grande) distribuída por 4 nós, em que cada um realiza a soma parcial de N/4 valores, sendo o resultado final agregado através da primitiva MPI_Reduce. O resultado final deverá ser validado, realizando previamente por exemplo a mesma operação em série no nó de controlo. O algoritmo é o seguinte: Todos os nós: Inicializar o runtime (MPI_Init) Detectar o número de nós activos (MPI_Comm_size) Conhecer o seu número de ordem myrank (MPI_Comm_rank) Nó zero: Calcular a soma total dos N valores de forma sequêncial serialSum Calcular o número de valores que cada nó deve tratar (slotsize = N/4) Enviar para todos os outros nós esse valor (MPI_Send) Outros nós: Receber o número de valores que deve tratar (slotsize) Todos os nós: Determinar o indíce do início do intervalo que deve tratar (mybegin = myrank*sloztsize) Realizar a soma parcial que lhe cabe (de mybegin a mybegin + slotsize) Agregar as somas parciais numa soma total totalSum usando o MPI_Reduce Nó zero: Imprimir o valor da soma total (totalSum) Se os valores de serialSum e totalSum forem idênticos, o programa está correcto.