compilación y ejecuciónacarus.uson.mx/car2018/dia3/dia3.pdf · [dmendoza@ibnodo26 dia3]$ mpif90...
Post on 08-Jun-2020
2 Views
Preview:
TRANSCRIPT
ACARUS
Responsable :
María del Carmen Heras Sánchez
Asesores Técnicos :
Daniel Mendoza Camacho
Yessica Vidal Quintanar
2
Día 3 Compilacion y Ejecución
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
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;
}
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
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
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
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
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
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
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
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
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
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();
}
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
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
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
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
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
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
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
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
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
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
top related