Отчет по дисциплине Вычислительные системы Лабораторная Работа 6
Скачать 116.01 Kb.
|
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ «НОВОСИБИРСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ» Кафедра вычислительной техники Отчет по дисциплине: «Вычислительные системы» Лабораторная Работа №6
Новосибирск, 2022 Цель работы: научиться реализовывать программы при помощи многопоточного программирования. Задание: В среде контейнерной виртуализации настроить окружение для исполнения параллельных mpi программ: диспетчер ресурсов Slurm + библиотека параллельного программирования OpenMPI. Использовать готовые контейнеры и скрипты. 1. Разработать программу, возвращающую в терминал приветствие от каждого процесса mpi-программы(«Hello,World!») со всех контейнеров образующих кластер. 2. Составить отчет с результатами выполнения работы. В качестве среды за основу взят контейнер: https://github.com/giovtorres/slurm-docker-cluster Однако в контейнере отсутствует поддержка компилятора mpicc, поэтому в dockerfile необходимо добавить следующее: RUN wget https://download.open-mpi.org/release/open-mpi/v3.1/openmpi-3.1.0.tar.gz RUN tar -zxvf openmpi-3.1.0.tar.gz RUN cd openmpi-3.1.0/ && ./configure && make && make install Перейдем в PowerShell и соберем контейнер: docker build -t scidas/slurm.base:19.05.1 . Поднимем наш контейнер как демон: docker-compose up -d Смотрим процессы: docker ps Как можно видеть поднят сам кластер и два воркера, а также субд. Запустим bash внутри контейнера командой docker exec -it slurmctld bash. Напишем простую программу с использованием OpenMPI: #include #include int main(int argc, char** argv) { MPI_Init(NULL, NULL); int world_size; MPI_Comm_size(MPI_COMM_WORLD, &world_size); int world_rank; MPI_Comm_rank(MPI_COMM_WORLD, &world_rank); char processor_name[MPI_MAX_PROCESSOR_NAME]; int name_len; MPI_Get_processor_name(processor_name, &name_len); printf("Hello world from processor %s, rank %d out of %d processors\n", processor_name, world_rank, world_size); MPI_Finalize(); } Скомпилируем: mpicc hello.c -o hello.out Создадим скрипт запуска job.sh #!/bin/bash # #SBATCH --job-name=test #SBATCH --output=hello.out # #SBATCH --ntasks=2 # srun -N 2 --mpi=openmpi hello.out |