24
ACARUS Responsable : María del Carmen Heras Sánchez Asesores Técnicos : Daniel Mendoza Camacho Yessica Vidal Quintanar

Compilación y ejecuciónacarus.uson.mx/car2018/dia3/dia3.pdf · [dmendoza@ibnodo26 dia3]$ mpif90 hola_mundo_mpi.f90 -o hm_mpi-intel-f Ejecutar utilizando 5 procesos [dmendoza@ibnodo26

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Compilación y ejecuciónacarus.uson.mx/car2018/dia3/dia3.pdf · [dmendoza@ibnodo26 dia3]$ mpif90 hola_mundo_mpi.f90 -o hm_mpi-intel-f Ejecutar utilizando 5 procesos [dmendoza@ibnodo26

ACARUS

Responsable :

María del Carmen Heras Sánchez

Asesores Técnicos :

Daniel Mendoza Camacho

Yessica Vidal Quintanar

Page 2: Compilación y ejecuciónacarus.uson.mx/car2018/dia3/dia3.pdf · [dmendoza@ibnodo26 dia3]$ mpif90 hola_mundo_mpi.f90 -o hm_mpi-intel-f Ejecutar utilizando 5 procesos [dmendoza@ibnodo26

2

Día 3 Compilacion y Ejecución

Page 3: Compilación y ejecuciónacarus.uson.mx/car2018/dia3/dia3.pdf · [dmendoza@ibnodo26 dia3]$ mpif90 hola_mundo_mpi.f90 -o hm_mpi-intel-f Ejecutar utilizando 5 procesos [dmendoza@ibnodo26

Código Serial

Compilador Lenguaje Comando Banderas Modulo

GCC C

Fortran

gcc

gfortran

-march=native (Auto)

-march=bdver1 (AMD)

-march=core-avx2

(Intel)

N/A

Intel C

Fortran

icc

ifort

-mtune=broadwell

(Intel) module load intel/2017_update1

PGI C

Fortran

pgcc

pgfortran

-tp=bulldozer-64 (AMD)

-tp=hashwell-64 (Intel) module load pgi/17.4

Page 4: Compilación y ejecuciónacarus.uson.mx/car2018/dia3/dia3.pdf · [dmendoza@ibnodo26 dia3]$ mpif90 hola_mundo_mpi.f90 -o hm_mpi-intel-f Ejecutar utilizando 5 procesos [dmendoza@ibnodo26

Código Serial – GCC - C 4

» Solicitar nodo para compilar

[dmendoza@ocotillo ~]$ srun --partition=serial --pty bash

» Crear el archivo hola_mundo.c

[dmendoza@ibnodo26 dia3]$ vim hola_mundo.c

#include<stdio.h>

int main(){

printf("Hola Mundo\n");

return 0;

}

Page 5: Compilación y ejecuciónacarus.uson.mx/car2018/dia3/dia3.pdf · [dmendoza@ibnodo26 dia3]$ mpif90 hola_mundo_mpi.f90 -o hm_mpi-intel-f Ejecutar utilizando 5 procesos [dmendoza@ibnodo26

Código Serial – GCC - C 5

» Compilar con gcc

[dmendoza@ibnodo26 dia3]$ gcc hola_mundo.c -o hm_gcc

» Ejecutar

[dmendoza@ibnodo26 dia3]$ ./hm_gcc

Hola Mundo

Page 6: Compilación y ejecuciónacarus.uson.mx/car2018/dia3/dia3.pdf · [dmendoza@ibnodo26 dia3]$ mpif90 hola_mundo_mpi.f90 -o hm_mpi-intel-f Ejecutar utilizando 5 procesos [dmendoza@ibnodo26

Código Serial – GCC - Fortran 6

» Crear el archivo hola_mundo.f90

[dmendoza@ibnodo26 dia3]$ vim hola_mundo.f90

PROGRAM hola_mundo

PRINT *, "Hola mundo"

END PROGRAM hola_mundo

Page 7: Compilación y ejecuciónacarus.uson.mx/car2018/dia3/dia3.pdf · [dmendoza@ibnodo26 dia3]$ mpif90 hola_mundo_mpi.f90 -o hm_mpi-intel-f Ejecutar utilizando 5 procesos [dmendoza@ibnodo26

Código Serial – GCC – Fortran 7

» Compilar con gfortran

[dmendoza@ibnodo26 dia3]$ gfortran hola_mundo.f90 –o hm_gfortran

» Ejecutar

[dmendoza@ibnodo26 dia3]$ ./hm_gfortran

Hola mundo

Page 8: Compilación y ejecuciónacarus.uson.mx/car2018/dia3/dia3.pdf · [dmendoza@ibnodo26 dia3]$ mpif90 hola_mundo_mpi.f90 -o hm_mpi-intel-f Ejecutar utilizando 5 procesos [dmendoza@ibnodo26

Código Serial – Intel - C 8

» Compilar con icc

[dmendoza@ibnodo26 dia3]$ icc hola_mundo.c -o hm_icc

» Ejecutar

[dmendoza@ibnodo26 dia3]$ ./hm_icc

Hola Mundo

Page 9: Compilación y ejecuciónacarus.uson.mx/car2018/dia3/dia3.pdf · [dmendoza@ibnodo26 dia3]$ mpif90 hola_mundo_mpi.f90 -o hm_mpi-intel-f Ejecutar utilizando 5 procesos [dmendoza@ibnodo26

Código Serial – Intel – Fortran 9

» Compilar con ifort

[dmendoza@ibnodo26 dia3]$ ifort hola_mundo.f90 –o hm_ifort

» Ejecutar

[dmendoza@ibnodo26 dia3]$ ./hm_ifort

Hola mundo

Page 10: Compilación y ejecuciónacarus.uson.mx/car2018/dia3/dia3.pdf · [dmendoza@ibnodo26 dia3]$ mpif90 hola_mundo_mpi.f90 -o hm_mpi-intel-f Ejecutar utilizando 5 procesos [dmendoza@ibnodo26

Código Serial – Variables de ambiente 10

» Intel

[dmendoza@ibnodo26 dia3]$ export PATH=$PATH:/opt/intel/2017_update1/bin

» PGI

[dmendoza@ibnodo26 dia3]$ export PATH=$PATH:/opt/pgi/linux86-64/2017/bin

Page 11: Compilación y ejecuciónacarus.uson.mx/car2018/dia3/dia3.pdf · [dmendoza@ibnodo26 dia3]$ mpif90 hola_mundo_mpi.f90 -o hm_mpi-intel-f Ejecutar utilizando 5 procesos [dmendoza@ibnodo26

Código Serial – PGI - C 11

» Compilar con pgcc

[dmendoza@ocotillo dia3]$ pgcc hola_mundo.c -o hm_pgcc

» Ejecutar

[dmendoza@ocotillo dia3]$ ./hm_pgcc

Hola Mundo

Page 12: Compilación y ejecuciónacarus.uson.mx/car2018/dia3/dia3.pdf · [dmendoza@ibnodo26 dia3]$ mpif90 hola_mundo_mpi.f90 -o hm_mpi-intel-f Ejecutar utilizando 5 procesos [dmendoza@ibnodo26

Código Serial – PGI - Fortran 12

» Compilar con pgfortran

[dmendoza@ocotillo dia3]$ pgfortran hola_mundo.f90 -o hm_pgfortran

» Ejecutar

[dmendoza@ocotillo dia3]$ ./hm_pgfortran

Hola Mundo

Page 13: Compilación y ejecuciónacarus.uson.mx/car2018/dia3/dia3.pdf · [dmendoza@ibnodo26 dia3]$ mpif90 hola_mundo_mpi.f90 -o hm_mpi-intel-f Ejecutar utilizando 5 procesos [dmendoza@ibnodo26

Código Paralelo

Compilador Lenguaje Comando Modulo

OpenMPI C

Fortran

mpicc

mpif90 module load openmpi/1.10.7

Intel MPI

C

Fortran

mpicc

mpif90 module load intel/2017_update1

OpenMP C

Fortran

gcc –fopenmp

gfortran –fopenmp N/A

Intel OpenMP C

Fortran

icc –qopenmp

ifort – qopenmp

module load intel/2017_update1

CUDA cuda nvcc module load cuda/8.0

Page 14: Compilación y ejecuciónacarus.uson.mx/car2018/dia3/dia3.pdf · [dmendoza@ibnodo26 dia3]$ mpif90 hola_mundo_mpi.f90 -o hm_mpi-intel-f Ejecutar utilizando 5 procesos [dmendoza@ibnodo26

Código Paralelo – Intel MPI - C 14

» Crear el archivo hola_mundo_mpi.c

[dmendoza@ocotillo dia3]$ vim hola_mundo_mpi.c

#include <stdio.h>

#include <mpi.h>

int main (int argc, char* argv[]){

int rank, size;

MPI_Init (&argc, &argv);

MPI_Comm_rank (MPI_COMM_WORLD, &rank);

MPI_Comm_size (MPI_COMM_WORLD, &size);

printf( "Hola Mundo, soy el proceso %d de %d\n", rank, size );

MPI_Finalize();

}

Page 15: Compilación y ejecuciónacarus.uson.mx/car2018/dia3/dia3.pdf · [dmendoza@ibnodo26 dia3]$ mpif90 hola_mundo_mpi.f90 -o hm_mpi-intel-f Ejecutar utilizando 5 procesos [dmendoza@ibnodo26

Código Paralelo – Intel MPI - C 15

» Compilar con mpicc de Intel

[dmendoza@ibnodo26 dia3]$ export PATH=/opt/intel/2017_update1/impi/2017.1.132/bin64:$PATH

[dmendoza@ibnodo26 dia3]$ mpicc hola_mundo_mpi.c –o hm_mpi-Intel

» Ejecutar utilizando 5 procesos

[dmendoza@ibnodo26 dia3]$ mpirun -np 5 ./hm_mpi-intel

Hola Mundo, soy el proceso 1 de 5

Hola Mundo, soy el proceso 2 de 5

Hola Mundo, soy el proceso 3 de 5

Hola Mundo, soy el proceso 4 de 5

Hola Mundo, soy el proceso 0 de 5

Page 16: Compilación y ejecuciónacarus.uson.mx/car2018/dia3/dia3.pdf · [dmendoza@ibnodo26 dia3]$ mpif90 hola_mundo_mpi.f90 -o hm_mpi-intel-f Ejecutar utilizando 5 procesos [dmendoza@ibnodo26

Código Paralelo – Intel MPI - Fortran 16

» Crear el archivo hola_mundo_mpi.f90

[dmendoza@ocotillo dia3]$ vim hola_mundo_mpi.f90

program hola_mundo_mpi

include 'mpif.h'

integer rank, size, ierror, tag, status(MPI_STATUS_SIZE)

call MPI_INIT(ierror)

call MPI_COMM_SIZE(MPI_COMM_WORLD, size, ierror)

call MPI_COMM_RANK(MPI_COMM_WORLD, rank, ierror)

print*, 'Proceso', rank, ': Hola Mundo'

call MPI_FINALIZE(ierror)

end

Page 17: Compilación y ejecuciónacarus.uson.mx/car2018/dia3/dia3.pdf · [dmendoza@ibnodo26 dia3]$ mpif90 hola_mundo_mpi.f90 -o hm_mpi-intel-f Ejecutar utilizando 5 procesos [dmendoza@ibnodo26

Código Paralelo – Intel MPI - Fortran 17

»Compilar con mpif90 de Intel

[dmendoza@ibnodo26 dia3]$ mpif90 hola_mundo_mpi.f90 -o hm_mpi-intel-f

Ejecutar utilizando 5 procesos

[dmendoza@ibnodo26 dia3]$ mpirun -np 5 ./hm_mpi-intel-f

Proceso 0 : Hola Mundo

Proceso 1 : Hola Mundo

Proceso 2 : Hola Mundo

Proceso 3 : Hola Mundo

Proceso 4 : Hola Mundo

Page 18: Compilación y ejecuciónacarus.uson.mx/car2018/dia3/dia3.pdf · [dmendoza@ibnodo26 dia3]$ mpif90 hola_mundo_mpi.f90 -o hm_mpi-intel-f Ejecutar utilizando 5 procesos [dmendoza@ibnodo26

Código Paralelo – OpenMPI - C 18

» Compilar con mpicc de OpenMPI

[dmendoza@ibnodo26 dia3]$ export PATH=/usr/local/intel/openmpi/1.10.7/bin:$PATH

[dmendoza@ibnodo26 dia3]$ mpicc hola_mundo_mpi.c -o hm_openmpi

» Ejecutar utilizando 5 procesos

[dmendoza@ibnodo26 dia3]$ mpirun -np 5 --oversubscribe ./hm_openmpi

Hola Mundo, soy el proceso 3 de 5

Hola Mundo, soy el proceso 4 de 5

Hola Mundo, soy el proceso 0 de 5

Hola Mundo, soy el proceso 1 de 5

Hola Mundo, soy el proceso 2 de 5

Page 19: Compilación y ejecuciónacarus.uson.mx/car2018/dia3/dia3.pdf · [dmendoza@ibnodo26 dia3]$ mpif90 hola_mundo_mpi.f90 -o hm_mpi-intel-f Ejecutar utilizando 5 procesos [dmendoza@ibnodo26

Código Paralelo – OpenMPI - Fortran 19

» Compilar con mpif90 de OpenMPI

[dmendoza@ibnodo26 dia3]$ mpif90 hola_mundo_mpi.f90 -o hm_mpi-openmpi

» Ejecutar utilizando 5 procesos

[dmendoza@ibnodo26 dia3]$ mpirun -np 5 --oversubscribe hm_mpi-openmpi

Proceso 0 : Hola Mundo

Proceso 1 : Hola Mundo

Proceso 3 : Hola Mundo

Proceso 4 : Hola Mundo

Proceso 2 : Hola Mundo

Page 20: Compilación y ejecuciónacarus.uson.mx/car2018/dia3/dia3.pdf · [dmendoza@ibnodo26 dia3]$ mpif90 hola_mundo_mpi.f90 -o hm_mpi-intel-f Ejecutar utilizando 5 procesos [dmendoza@ibnodo26

Código Paralelo – OpenMP - C 20

#include <omp.h>

#include <stdio.h>

#include <stdlib.h>

int main (int argc, char *argv[]) {

int nthreads, tid;

#pragma omp parallel private(nthreads, tid){

tid = omp_get_thread_num();

printf("Hello World from thread = %d\n", tid);

if (tid == 0){

nthreads = omp_get_num_threads();

printf("Number of threads = %d\n", nthreads);

}

}

}

»Crear el archivo hola_mundo_omp.c

[dmendoza@ibnodo26 dia3]$ vim hola_mundo_omp.c

Page 21: Compilación y ejecuciónacarus.uson.mx/car2018/dia3/dia3.pdf · [dmendoza@ibnodo26 dia3]$ mpif90 hola_mundo_mpi.f90 -o hm_mpi-intel-f Ejecutar utilizando 5 procesos [dmendoza@ibnodo26

Código Paralelo – OpenMP - C 21

» Compilar con gcc

[dmendoza@ibnodo26 dia3]$ gcc -fopenmp hola_mundo_omp.c -o hm_omp-gcc

» Ejecutar utilizando 5 Hilos

[dmendoza@ibnodo26 dia3]$ export OMP_NUM_THREADS=5

[dmendoza@ibnodo26 dia3]$ ./hm_omp-gcc

Hello World from thread = 4

Hello World from thread = 3

Hello World from thread = 1

Hello World from thread = 0

Number of threads = 5

Hello World from thread = 2

Page 22: Compilación y ejecuciónacarus.uson.mx/car2018/dia3/dia3.pdf · [dmendoza@ibnodo26 dia3]$ mpif90 hola_mundo_mpi.f90 -o hm_mpi-intel-f Ejecutar utilizando 5 procesos [dmendoza@ibnodo26

Código Paralelo – OpenMP - C 22

» Compilar con icc

[dmendoza@ibnodo26 dia3]$ icc -qopenmp hola_mundo_omp.c -o hm_omp-icc

» Ejecutar utilizando 5 hilos

[dmendoza@ibnodo26 dia3]$ ./hm_omp-icc

Hello World from thread = 1

Hello World from thread = 2

Hello World from thread = 4

Hello World from thread = 3

Hello World from thread = 0

Number of threads = 5

Page 23: Compilación y ejecuciónacarus.uson.mx/car2018/dia3/dia3.pdf · [dmendoza@ibnodo26 dia3]$ mpif90 hola_mundo_mpi.f90 -o hm_mpi-intel-f Ejecutar utilizando 5 procesos [dmendoza@ibnodo26

CUDA 23

» Copiar el archivo multmat.cu a su directorio home

[dmendoza@visualizacion1 dia3]$ cp /LUSTRE/scratch/car/multmat.cu .

» Cargar los modulos de cuda-8.0

[dmendoza@visualizacion1 dia3]$ module load cuda/8.0

CUDA Toolkit 8.0

Page 24: Compilación y ejecuciónacarus.uson.mx/car2018/dia3/dia3.pdf · [dmendoza@ibnodo26 dia3]$ mpif90 hola_mundo_mpi.f90 -o hm_mpi-intel-f Ejecutar utilizando 5 procesos [dmendoza@ibnodo26

CUDA 24

» Compilar

[dmendoza@visualizacion1 dia3]$ nvcc multmat.cu -o multmat

nvcc warning : The 'compute_20', 'sm_20', and 'sm_21' architectures are deprecated, and may be

removed in a future release (Use -Wno-deprecated-gpu-targets to suppress warning).

» Ejecutar

[dmendoza@visualizacion1 dia3]$ ./multmat

834.519409