- •Оглавление
- •Краткое описаниеVisual Studio
- •Типы ресурсов
- •Конфигурации
- •ИспользованиеOpenMp
- •ОтладкаOpenMp
- •Подключение ms-mpi к Visual Studio 2008
- •ЗапускMpi-программы в различных режимах
- •Ручной запуск параллельной задачи на кластере
- •Запуск задач с помощьюJobManager
- •Интеграция Visual Studio и mpiexec.
- •ОтладкаMpi-программ
Оглавление
Оглавление 1
Краткое описание Visual Studio 2
Типы ресурсов 2
Конфигурации 5
Опции 5
Использование OpenMP 6
Отладка OpenMP 7
Подключение MS-MPI к Visual Studio 2008 8
Запуск MPI-программы в различных режимах 16
Ручной запуск параллельной задачи на кластере 17
Запуск задач с помощью Job Manager 18
Интеграция Visual Studio и mpiexec. 22
Отладка MPI-программ 24
Краткое описаниеVisual Studio
При запуске появится основное рабочее пространство VS (рис. 1).
Типы ресурсов
Всё, что относится к ресурсам в VS, обозначается словом Solution (решение). Solution – контейнер для всех ресурсов, включая проекты и прочее.
Проект – непосредственно программный код и все зависимости. Так называемая Compiler target.
Для создания нового проекта достаточно вызвать меню File=>New=>Project.
Если в наличии есть исходные файлы, то при создании проекта необходимо выбрать Empty Project.
Создать новый элемент в проекте (исходные коды и прочее) можно так: нажать на Project (не на Solution), затем Add=>New Item. Папки, такие как Source Files и прочее, особого смысла не имеют, кроме того, что помогают структурировать проект. К физическим папкам не привязаны.
В Visual Studio 2010 есть дополнительные возможности для анализа производительности приложения. Чтобы их посмотреть, нужно обратиться к Analyze->Profiler->New Performance Session, затем Analyze->Launch Performance Wizard (рис. 2).
Всё возможно замерять как на локальном компьютере, так и на кластере.
CPU Sampling:
Конфигурации
Изначально определены две конфигурации:
Debug: типичные для отладки опции, без оптимизации
Release: отладка возможна, некоторая оптимизация.
Собрать проект можно с помощью меню Build->Build [projectname] или из меню свойств проекта.
Опции
Раздел Properties:
Важные настройки в General Settings:
-C/C++ -> General – директории доп. зависимостей (Includes)
-Linker -> General – директории библиотек
-Linker -> Input – дополнительные зависимости,библиотеки
Важные настройки в Optimization:
- C/C++ -> Optimization – уровень оптимизации
- C/C++ -> Code Generation – векторизация
ИспользованиеOpenMp
Зададим количество потоков (OMP_NUM_THREADS):
ОтладкаOpenMp
Для отладки необходимо отметить breakpoint. Отмечается он слева от строки кода.
Щелкнув по breakpoint, можно получить меню, в котором можно выбрать следующие пункты:
- Временно отключить breakpoint
- установить условия, при которых включится breakpoint
- Установить действия, которые будут произведены при активации breakpoint
-Запустить, пауза, остановить, перезапустить
-Перейти к следующему, Step Into, Step over, Step out
Все потоки останавливаются, когда достигают breakpoint. Можно открыть дополнительные сведения через Debug->Windows->Threads.
Из новых функций VS 2010 для отладки есть Debug->Windows->Parallel Stacks:
Подключение ms-mpi к Visual Studio 2008
Для того, чтобы компилировать свои программы, написанные на C/C++/C# с использованием MPI и Visual Studio 2008, необходимо сначала скачать дистрибутив HPC Pack SDK 2008, содержащий все необходимые библиотеки: - HPC Pack SDK 2008
Аналогично нижеописанному алгоритму производится настройка проекта для MPICH2, за исключением других путей к библиотекам и mpiexec. Настройка проекта и запуск параллельных программ ничем не отличается и в 10-й версии Visual Studio.
Необходимо отметить, что все настройки, описанные ниже, можно не делать, если создать проект с шаблоном MPI Project, доступный в Visual Studio 2010. Тогда достаточно при создании проекта с данным шаблоном снять галочку с “Precompiled Header”.
Для того, чтобы не таскать за собой библиотеки по всем узлам в сбилденной в Visual Studio 2010 программе необходимо:
Вызвать Properties проекта
Сменить Конфигурацию на Release
Configuration properties => C/C++ => Code Generation
Runtime Library поменять значение на Multi-threaded (/MT)
Rebuild
В данной инструкции компьютер, на котором осуществляется компиляция и запуск программы, имеет доменное имя dc.
1 – Создать проект C++ (В русской версии Visual C++=>Общие, «Пустой проект»)
Открыть свойства проекта.
2 – Поменять значение поля Subsystem в Linker=>System на CONSOLE(/SUBSYSTEM:CONSOLE) (для русской версии VS: Компоновщик=>Система=>Подсистема) 3 – Добавить к компоновщику (Linker) путь к дополнительным библиотекам (в русской версии VS необходимо зайти на вкладку Общие) 4 – Добавить к компоновщику (Linker) дополнительные зависимости . Вписать msmpi.lib Ws2_32.lib. В данной программе используется дополнительная зависимость Ws2_32.lib, данная библиотека используется для сетевого взаимодействия, в других проектах может быть и не задействована. 5 – добавить файл C++ к проекту (в данной инструкции мы будем использовать программу Hello World), нажать правой кнопкой мыши на названии проекта, Add=>Add an element (для русской версии Добавить=>Создать элемент), где выбрать C++ File:
#include <iostream>
#include <iomanip>
#include <fstream>
#include <cstdlib>
#include <ctime>
#include <cassert>
#include <math.h>
#include <windows.h>
#include <mpi.h>
using namespace::std;
int myRank;
int numProcs;
char host[256];
int main(int argc, char* argv[])
{
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &numProcs); // number of processes involved in run
MPI_Comm_rank(MPI_COMM_WORLD, &myRank); // my process id: 0 <= myRank < numProcs
gethostname(host, sizeof(host)/sizeof(host[0])); // machine we are running on
cout << "Process " << myRank << " of " << numProcs << " is running on '" << host << "'." << endl;
MPI_Finalize();
return 0;
}
6 – Вызвать свойства проекта, появится новая вкладка C/C++. Добавить к путям компилятора (Compiler) пути для дополнительных файлов (для русской версии: дополнительные каталоги включения):
7 – Для того, чтобы узлы успешно запустили программу, необходимо скомпилировать нашу программу со всеми зависимостями. Для этого необходимо:
8 – Скомпилировать программу. Build project (в русской версии Построить <имя проекта>).
Бинарный файл, необходимый для запуска, расположен в Start=>Documents=>Documents=>Visual Studio 2008=>Projects=><имя проекта>=>Debug=><имя С++-файла>.exe
Необходимо также отметить, что, если необходимы многопроцессорные расчёты, то «собирать» MFC в статическом виде не требуется – все необходимые библиотеки есть на том компьютере, на котором происходит разработка. В случае же запуска на кластере MFC в статическом виде просто необходимо, так как на узлах могут отсутствовать необходимые библиотеки.
Необходимо отметить, что для Visual Studio 2010 указанная последовательность не работает. Для того, чтобы слинковать все библиотеки с вашей программой, необходимо:
Вызвать Properties проекта
Сменить Конфигурацию на Release
Configuration properties => C/C++ => Code Generation
Runtime Library поменять значение на Multi-threaded (/MT)
Rebuild
Для того, чтобы программа была доступна всем узлам, необходимо поместить бинарный файл в каталог \\dc\Temporary_Data\[каталог_пользователя], доступный по сети всем узлам кластера.