Cuaderno de prácticas de Arquitectura de Computadores, Grado en Ingeniería Informática
Enviado por Nicolas Roberto Cepeda Inzunza • 5 de Mayo de 2021 • Apuntes • 2.988 Palabras (12 Páginas) • 210 Visitas
Cuaderno de prácticas de Arquitectura de Computadores, Grado en Ingeniería Informática
2º curso / 2º cuatr. Grado Ingeniería Informática | Arquitectura de Computadores (AC) Cuaderno de prácticas. Bloque Práctico 0. Entorno de programación Estudiante (nombre y apellidos): Nicolás Roberto Cepeda Inzunza Grupo de prácticas y profesor de prácticas: Grupo C3 Gustavo Romero Fecha de entrega: 16/03/2020 Fecha evaluación en clase: |
Antes de comenzar a realizar el trabajo de este cuaderno consultar el fichero con los normas de prácticas que se encuentra en SWAD
Parte I. Ejercicios basados en los ejemplos del seminario práctico
Crear el directorio con nombre bp0 en atcgrid y en el PC (PC = PC del aula de prácticas o su computador personal).
NOTA: En las prácticas se usa slurm como gestor de colas. Consideraciones a tener en cuenta:
- Slurm está configurado para asignar recursos a los procesos (llamados tasks en slurm) a nivel de core físico. Esto significa que por defecto slurm asigna un core a un proceso, para asignar x se debe usar con sbatch/srun la opción --cpus-per-task=x (-cx).
- En slurm, por defecto, cpu se refiere a cores lógicos (ej. en la opción -c), si no se quieren usar cores lógicos hay que añadir la opción --hint=nomultithread a sbatch/srun.
- Para asegurar que solo se crea un proceso hay que incluir --ntasks=1 (-n1) en sbatch/srun.
- Para que no se ejecute más de un proceso en un nodo de cómputo de atcgrid hay que usar --exclusive con sbatch/srun (se recomienda no utilizarlo en los srun dentro de un script).
- Los srun dentro de un script heredan las opciones fijadas en el sbatch que se usa para enviar el script a la cola (partición slurm).
- Las opciones de sbatch se pueden especificar también dentro del script (usando #SBATCH, ver ejemplos en el script del seminario)
- Ejecutar lscpu en el PC, en atcgrid4 (usar -p ac4) y en uno de los restantes nodos de cómputo (atcgrid1, atcgrid2 o atcgrid3, están en la cola ac). (Crear directorio ejer1)
(a) Mostrar con capturas de pantalla el resultado de estas ejecuciones.
RESPUESTA:
[pic 1]
[pic 2]
(b) ¿Cuántos cores físicos y cuántos cores lógicos tiene atcgrid4?, ¿cuántos tienen atcgrid1, atcgrid2 y atcgrid3? y ¿cuántos tiene el PC? Razonar las respuestas
RESPUESTA: En el PC son 4 cores físicos ya que tenemos 4 cores per socket y solo tenemos 1 socket, por lo tanto 4 cores físicos, por otro lado como tenemos 2 thread per socket 4*2 = 8, tenemos 8 cores lógicos.. En ATCGRID son 32 cores físicos ya que tenemos 16 cores per socket y tenemos 2 sockets 2*16 = 32, y por ultimo tenemos 32 cores lógicos siguiendo la regla de antes.
- Compilar y ejecutar en el PC el código HelloOMP.c del seminario (recordar que, como se indica en las normas de prácticas, se debe usar un directorio independiente para cada ejercicio dentro de bp0 que contenga todo lo utilizado, implementado o generado durante el desarrollo del mismo, para el presente ejercicio el directorio sería ejer2).
(a) Adjuntar capturas de pantalla que muestren la compilación y ejecución en el PC.
[pic 3]
RESPUESTA:
(b) Justificar el número de “Hello world” que se imprimen en pantalla teniendo en cuenta la salida que devuelve lscpu en el PC.
RESPUESTA: Cada “Hello Word” que aparece representa cada core lógico de nuestro PC, es decir lanza del 0 al 7, es decir 8 hebras porque es el numero máximo que puede el PC, anteriormente lo vimos con lscpu.
- Copiar el ejecutable de HelloOMP.c que ha generado anteriormente y que se encuentra en el directorio ejer2 del PC al directorio ejer2 de su home en el front-end de atcgrid. Ejecutar este código en un nodo de cómputo de atcgrid (de 1 a 3) a través de cola ac del gestor de colas utilizando directamente en línea de comandos (no use ningún script):
(a) srun --partition=ac --account=ac --ntasks=1 --cpus-per-task=12 --hint=nomultithread HelloOMP
(Alternativa: srun -pac -Aac -n1 -c12 --hint=nomultithread HelloOMP )
Adjuntar capturas de pantalla que muestren el envío a la cola de la ejecución y el resultado de esta ejecución tal y como la devuelve el gestor de colas.
RESPUESTA:
[pic 4]
(b) srun -pac –Aac -n1 -c24 HelloOMP
Adjuntar capturas de pantalla que muestren el envío a la cola de la ejecución y el resultado de esta ejecución tal y como la devuelve el gestor de colas.
RESPUESTA:
[pic 5]
(c) srun -n1 HelloOMP
Adjuntar capturas de pantalla que muestren el envío a la cola de la ejecución y el resultado de esta ejecución tal y como la devuelve el gestor de colas. ¿Qué partición se está usando?
RESPUESTA:
Estamos usando la partición por defecto de atcgrid[1-3]
[pic 6]
(d)¿Qué orden srun usaría para que HelloOMP utilice todos los cores físicos de atcgrid4 (se debe imprimir un único mensaje desde cada uno de ellos)?
Con la –cpus-per-task=32 lo que hacemos es decirle a srun que utilice todos los cores físicos del computo, después con la opción –hint=nomultithread, especificamos que no queremos utilizar cores lógicos.
- Modificar en su PC HelloOMP.c para que se imprima “world” en un printf distinto al usado para “Hello”. En ambos printf se debe imprimir el identificador del thread que escribe en pantalla. Nombrar al código resultante HelloOMP2.c. Compilar este nuevo código en el PC y ejecutarlo. Copiar el fichero ejecutable resultante al front-end de atcgrid (directorio ejer4). Ejecutar el código en un nodo de cómputo de atcgrid usando el script script_helloomp.sh del seminario (el nombre del ejecutable en el script debe ser HelloOMP2).
(a) Utilizar: sbatch -pac –n1 -c12 --hint=nomultithread script_helloomp.sh. Adjuntar capturas de pantalla que muestren el nuevo código, la compilación, el envío a la cola de la ejecución y el resultado de esta ejecución tal y como la devuelve el gestor de colas.
...