Меню Закрыть

Руководство пользователя вычислительного кластера ДВФУ

image_pdfimage_print

Внимание! Данный раздел в процессе актуализации и переноса на новый адрес: Работа на кластере ДВФУ

Данное руководство предназначено для работы на вычислительном кластере Дальневосточного Федерального университета. Руководство содержит минимально необходимый объем информации для работы: описание процесса регистрации, сведения по работе в ОС Linux (вход в систему, работа с каталогами и файлами, мониторинг) и работе с MPI программами и непараллельными программами на кластере (компиляция, запуск, остановка, работа с очередями). В тексте под термином параллельная программа подразумеваются только MPI программы.

Архитектура вычислительного кластера

Суперкомпьютерный кластер ДВФУ состоит из 6 модулей Sun Blade 6000 Chassis в каждом модуле 10 лезвий Sun Blade X6250 Server Module

Конфигурация каждого лезвия:

  • Оперативная память — 8 Гб
  • Процессоры — 2 x Intel(R) Xeon(R) CPU E5345  @ 2.33GHz
  • Лезвия соединены гигабитной сетью Ethernet, также имеется соединение Infiniband
  • Операционная система: CentOS release 6.7
  • Очереди: SLURM
  • Библиотеки: OpenMPI
  • Компиляторы: GCC
  • Дополнительные модули:
  • openmpi-2.0.0
  • gcc-5.3.0
  • boost-1.60.0
Рисунок 1. Вычислительная архитектура San Blade кластера ДВФУ используемая в настоящее время.

Ныне существующая топология сети — fat tree — является одной из наиболее распространённых топологий для сетей Infiniband. Конфигурация допускает передачу данных со скоростью не более чем 20 Gbps на канал, т.е. ~2.5 Гбайт/с. Общая память на один узел в текущей конфигурации — 8 Гб, т.е. на полную запись оперативной памяти узла потребуется более 3 с.

Первые шаги к использованию кластера ДВФУ

Шаг 1. Создание учетной записи на кластере.

Внимание! Сотрудники техподдерки ДВФУ с 01.01.2018 не занимаются регистрацией пользователей на кластере.

Для создания учетной записи отправьте заявку на специальной странице.

Шаг 2. Подключение к кластеру.

Пользователь имеет возможность работать на вычислительном кластере с любого компьютера, находящегося в локальной вычислительной сети Дальневосточного Федерального университета. При необходимости возможен доступ к кластеру через Интернет.

Работа с системой осуществляется по защищенному протоколу SSH версии 2 (SSH1 пока также поддерживается). Для этого необходимо иметь соответствующее клиентское программное обеспечение, различающееся для разных операционных систем.

Для подключения из ОС windows рекомендуем использовать ssh-клиент PuTTY (http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html), для передачи файлов sftp-менеджер, например, WinSCP (https://winscp.net/eng/docs/lang:ru).

При подключении используем следующие настройки:

  • Адрес кластера (Host Name): cluster.dvfu.ru
  • Порт: 22
  • Протокол: SSH

В случае успешного подключения к серверу будет предложено ввести имя (логин), а затем и пароль, полученные в службе техподдержки ДВФУ.

ПРИ ВВОДЕ ПАРОЛЯ СИМВОЛЫ НА ЭКРАНЕ НЕ ОТОБРАЖАЮТСЯ.

Если все введено правильно, то пользователь автоматически окажется в своей домашней директории. Этот каталог доступен пользователю с любого узла вычислительного кластера.

На кластере существует единое дисковое пространство. Все узлы используют дисковый массив сервера посредством сетевой файловой системы NFS (Network File System). Файл, записанный в домашней директории пользователя на одном из узлов кластера, автоматически становится доступен на любом другом. Поскольку размер жесткого диска сервера ограничен, пользовательские программы не должны создавать временные файлы в домашней директории.

Работа в ssh-сессии происходит в терминальном (текстовом, консольном) режиме. Необходимо помнить, что консоль Linux, в отличие от Windows, различает регистр вводимых символов, т.е. mydoc.txt и mydoc.TXT не одно и то же.

Важно!

При первом входе на кластер необходимо сменить пароль командой “passwd”

Вход с Unix/Linux машины

Как правило, в любой дистрибутив Unix/Linux входит терминальный ssh-клиент. Минимальный формат команды для перехода с Unix машины на кластер:

ssh имя_пользователя@cluster.dvfu.ru

Большинство пользователей UNIX-подобных систем знакомо с протоколом SSH, поэтому трудностей с подключением у них возникнуть не должно. Неискушенным пользователям рекомендуется воспользоваться дополнительной литературой для получения сведений о UNIX-подобных системах в целом, и о протоколе SSH в частности, см. ссылки в конце мануала.

Шаг 3. Активация MPI

На суперкомпьютере используется пакет modules для управления окружением компиляции и запуска. Перед компиляцией Вам необходимо загрузить модули для компилятора, реализации MPI, и, возможно, другие, нужные для вашей программы.

MPI-реализация на кластере реализована в виде дополнительного модуля openmpi 1.8.8.

Для подключения модуля выполните следующую команду:

module load openmpi

Версию указывать не обязательно, по умолчанию загружается самая актуальная.

Загруженные модули не сохраняются между сессиями, если вам нужно всегда использовать один набор модулей, допишите нужные команды в файл ~/.bashrc.

Для автоматического подключения модуля следует прописать один раз команду в консоли:

echo "module load openmpi" >> ~/.bashrc && module load openmpi

Команда записывает в файл .bashrc строку module load openmpi для дальнейшей работы с OpenMPI. Теперь команды mpiexec, mpirun, mpicc, mpic++ будут доступны из консоли.

Таким же образом при необходимости можно подключить дополнительные модули, такие как: gcc-5.3.0, boost-1.60.0

echo "module load gcc" >> ~/.bashrc && module load gcc
echo "module load boost" >> ~/.bashrc && module load boost

Обратите внимание, точные имена модулей могут отличаться.

Список команд для работы с модулями:

module availпросмотреть список активных модулей
module add [ИМЯ_МОДУЛЯ]

 

module load [ИМЯ_МОДУЛЯ]

добавить модуль в список подключенных
module listпросмотреть список подключенных модулей
module rm [ИМЯ_МОДУЛЯ]выгрузить модуль из списка подключенных
module show [ИМЯ_МОДУЛЯ]описание изменений, вносимых модулем
module purgeвыгрузить все загруженные модули
module switch [ИМЯ_МОДУЛЯ]Выгрузить текущую загруженную и загрузить другую версию модуля
module unload [ИМЯ_МОДУЛЯ]Выгрузить модуль
module help [ИМЯ_МОДУЛЯ]Получить краткую справку по модулю
module initrm 
module whatis 
module apropos 
module initadd 
module initswitch 
module refresh 
module initclear 
module keyword 
module unuse 
module clear 
module initlist 
module update 
module display 
module initprepend 
module swap 
module use 

Компиляция программы

Напишем по традиции программу Hello World!

Для создания файла исходного кода программы воспользуемся одним из множества текстовых редакторов, например, vi, итак применяем команду:

vi hw.cpp

Сочетания клавиш для работы с редактором vi:

<Shift + I> — переход в режим ввода

<Esc> — выход из режима ввода, переход в командный режим

<Shift + ZZ> — выход из редактора, с сохранением файла

#include
#include
using namespace std;
int main (int argc, char *argv[])
{
int rank, size;
MPI_Init (&amp;amp;amp;amp;amp;amp;argc, &amp;amp;amp;amp;amp;amp;argv); /* запуск MPI */
MPI_Comm_rank (MPI_COMM_WORLD, &amp;amp;amp;amp;amp;amp;rank); /* получить идентификатор текущего процесса */
MPI_Comm_size (MPI_COMM_WORLD, &amp;amp;amp;amp;amp;amp;size); /* получить число процессов */
cout &amp;amp;amp;amp;amp;lt;&amp;amp;amp;amp;amp;lt; &amp;amp;amp;amp;amp;quot;Hello world! from process&amp;amp;amp;amp;amp;quot; &amp;amp;amp;amp;amp;lt;&amp;amp;amp;amp;amp;lt; rank &amp;amp;amp;amp;amp;lt;&amp;amp;amp;amp;amp;lt; &amp;amp;amp;amp;amp;quot;\n&amp;amp;amp;amp;amp;quot;;
MPI_Finalize(); /* завершение MPI */
return 0;
}

Компиляция программ осуществляется на узле n1. Вы входите на этот узел сразу, указав в ssh-клиенте адрес cluster.dvfu.ru.

Для компиляции MPI-программ рекомендуется пользоваться командами mpic++, mpicc, mpicxx, mpiCC.

mpic++ -o hw.o hw.cpp

Работа с системой управления очередями Slurm

На вычислительном кластере используется система управления очередями Slurm, информацию об основных командах смотрите ниже. Узлы суперкомпьютера разделены на несколько разделов (очередей):

  • students — основная очередь (установлена по умолчанию), предназначенная для отладки приложений и практических занятий.
  • main — раздел, предназначенный для научных вычислений занятий.
  • ddr – узел с объемом оперативной памяти 32Гб.

Описание очередей:

Название очередиМаксимальное время выполнения задачи, чМаксимальное число узлов
students242
main12054
ddr3601

Команда sinfo позволяет посмотреть состояние вычислительных узлов и очередей.

Вычислительные узлы могут быть в одном из следующих состояний:

СостояниеОписание
idleузел свободен
allocузел используется процессом
mixузел частично занят, частично свободен
down, drain, drngузел заблокирован

Запуск программы так же осуществляется на узле n1 командой srun, в результате чего система очередей автоматически распределяет запущенные задачи на свободные узлы.

Для srun можно использовать следующие параметры:

srun -n &amp;amp;amp;amp;amp;lt;число процессов&amp;amp;amp;amp;amp;gt; -t &amp;amp;amp;amp;amp;lt;время&amp;amp;amp;amp;amp;gt; &amp;amp;amp;amp;amp;lt;имя программы&amp;amp;amp;amp;amp;gt; [&amp;amp;amp;amp;amp;lt;параметры программы&amp;amp;amp;amp;amp;gt;] [&amp;amp;amp;amp;amp;amp;]

Параметры:

  • -n — задаёт число процессов (tasks); если не задано, то по умолчанию n=1;
  • -t — заказывает время для решения задачи; при отсутствии t выделяется 30 минут (по умолчанию);
  • & — позволяет запустить интерактивную задачу в фоновом режиме, при котором пользователю доступна работа в командной строке и одновременно выдача результатов работы интерактивной задачи идет на экран.
  • -N <кол-во узлов> — позволяет задать число узлов (nodes) для задачи, если пользователю это важно.

Пример запуска программы hw.o без дополнительных параметров:

srun -n 16 ./hw.o

Запуск (точнее, постановка в очередь) в не интерактивном режиме осуществляется командой sbatch. Команда sbatch ставит в очередь только скрипты, и запуск MPI-приложений должен осуществляться особым образом (sbatch не «знает» как их правильно запускать).

Для запуска приложения с помощью команды sbatch требуется использовать script-файл, включающий в себя специальные команды и директивы для очереди задач. В общем случае, script-файл – это обычный bash файл, удовлетворяющий следующим правилам:

  • Первая строка содержит #!/bin/sh (или #!/bin/bash), что позволяет скрипту быть запущенным как bash-script;
  • Строки, начинающиеся с # – это комментарии;
  • Строки, начинающиеся с #SBATCH, устанавливают параметры для планировщика SLURM;
  • Все параметры планировщика SLURM должны быть установлены до непосредственного запуска приложения;
  • Script-файл содержит команду для запуска приложений.
#!/bin/sh
#
# Имя задачи, необязательное поле
#SBATCH --job-name=&amp;amp;amp;amp;amp;quot;mytask&amp;amp;amp;amp;amp;quot;

#Задаём максимальное время для задачи часы:минуты:секунды
#SBATCH --time=00:05:00

#Запрашиваем 1 узел
#SBATCH --nodes=1

#Запрашиваем разрешение на использование 1 ядра на узле (максимум 8 на узле)
#SBATCH --ntasks-per-node=1

#Переходим в каталог запуска задачи
cd $SLURM_SUBMIT_DIR

Для запуска программы hw.o будем использовать следующий скрипт script.sh:

#!/bin/sh
#SBATCH –t 5
mpirun ./hw.o

Часто используемые ключи команды sbatch

-n NNNЧисло требуемых ядер
-N NNNЧисло требуемых узлов. Этот параметр следует устанавливать только в том случае, если количество ресурсов на 1 узле недостаточно для выполнения вашего расчета
-p NAMEИмя используемого раздела (очереди). В случае отсутствия данного параметра задача будет поставлена в очередь students
-t MINSЛимит времени работы задачи в минутах. Доступны следующие форматы: minutes, minutes:seconds, hours:minutes:seconds, days-hours, days-hours:minutes, days-hours:minutes:seconds.
-i/-e/-o NAMEПеренаправление ввода/ошибок/вывода в файл

Например, если вам необходимо запустить задачу в очереди main используйте ключ -p main.

После запуска приложению присваивается персональный номер jobid, по которому его можно найти в списке запущенных приложений (squeue). Результат записывается в файл с именем slurm-jobid.out.

squeue – команда для просмотра списка запущенных приложений в очереди.

Одним из основных параметров списка является состояние приложений. Запущенное приложение может иметь одно из следующих состояний:

RUNNING (R)выполняется
PENDING (PD)в очереди
COMPLETING (CG)завершается. (в этом состоянии, возможно, может понадобиться помощь системного администратора для удаления приложения из очереди)

scancel – команда для удаления приложения из очереди.

Пример использования scancel для удаления из очереди приложения с jobid 123456:

scancel 123456

scontrol – используется для просмотра или изменения состояния SLURM, включающего: задачи, узла и очереди. Многие из управляющих команд могут выполняться только суперпользователем.

Пример использования scontrol для просмотра характеристик запущенного приложения:

scontrol show job 123456

где 123456 персональный номер вашего приложения.

Список характеристик содержит такие параметры, как:

Параметр         Описание
UserIdимя пользователя
JobStateсостояние приложения
RunTimeтекущее время расчетов
Partitionиспользуемая очередь
NodeListиспользуемые узлы
NumNodesчисло используемых узлов
NumCPUsчисло используемых ядер процессора
Gresчисло используемых графических ускорителей или сопроцессоров
MinMemoryCPUколичество используемой оперативной памяти
Commandрасположение файла для запуска приложения
StdErrрасположение файла с ошибками
StdOutрасположение файла с выходными данными

Пример использования scontrol для просмотра характеристик узлов:

scontrol show nodes
scontrol show node n2

Список характеристик содержит такие параметры, как:

NodeNamehostname вычислительного узла
CPUAllocколичество загруженных вычислительных ядер
CPUTotобщее число вычислительных ядер на узле
CPULoadзагрузка вычислительных ядер
Gresчисло доступных для расчетов графических укорителей и сопроцессоров
RealMemoryобщее количество оперативной памяти на узле
AllocMemколичество загруженной оперативной памяти
Stateсостояние узла

Список основные команды для работы с системой управления очередями:

  • squeue — просмотр задач в очереди.
  • sinfo — краткая информацию об очереди (без списка задач).
  • scancel — снять задачу со счёта или из очереди.
  • smap — предоставляет графическую информацию о состоянии задач, разделов, и узлов, управляемых SLURM.
  • scontrol – просмотр или изменение состояния SLURM.

Подробнее о командах можно узнать в документации командой

man имя_команды

Стандарт MPI

В вычислительных системах с распределенной памятью параллельная программа —  совокупность параллельно выполняющихся процессов.

Для организации параллельных вычислений необходимо уметь:

— равномерно распределять вычислительную нагрузку по процессам,

— организовать их информационное взаимодействие.

Решение перечисленных вопросов обеспечивает MPI (message passing interface) — интерфейс передачи сообщений.

MPI — message passing interface — библиотека функций, предназначенная для поддержки работы параллельных процессов в терминах передачи сообщений.

MPI – это стандарт, которому должны удовлетворять средства организации передачи сообщений.

MPI – программные средства, которые обеспечивают организацию вычислений с помощью обмена сообщениями и соответствуют требованиям стандарта:

— организованы в библиотеки программных модулей (библиотеки MPI),

— доступны для широко используемых алгоритмических языков C и Fortran.

Преимущества:

1) MPI помогает решить проблему переносимости параллельных программ между разными компьютерными системами.

2) MPI содействует повышению эффективности параллельных вычислений: практически для каждого типа вычислительных систем существуют реализации библиотек MPI, учитывающие возможности используемого коммуникационного оборудования.

3) MPI облегчает процесс написания параллельных программ, когда при разработке используются библиотеки программных модулей, написанных с использованием этого интерфейса.

4) MPI позволяет создавать хорошо масштабируемые параллельные программы.

Недостатки:

1) MPI является низкоуровневым инструментом программиста.

2) Не существует реализаций MPI, в полной мере обеспечивающих совмещение обменов с вычислениями.

3) MPI не предоставляет механизмов задания начального размещения процессов по процессорам.

4) Полномасштабная отладка MPI-программ затруднительна вследствие одновременного исполнения нескольких программных ветвей.

Под параллельной программой в рамках MPI понимается множество одновременно выполняемых процессов (ветвей):

— В общем случае процессы выполнятся на разных процессорах.

— Каждый процесс параллельной программы порождается на основе копии одного и того же программного кода (модель SPMP).

Число используемых процессоров n определяется в момент запуска параллельной программы средствами системы запуска заданий. Все процессы программы нумеруются от 0 до n-1. Номер процесса (уникальный идентификатор) называют рангом процесса.

Номер процесса — целое неотрицательное число, являющееся уникальным атрибутом каждого процесса.

Сообщение в MPI — это набор данных некоторого типа. Каждое сообщение имеет несколько атрибутов, в частности, номер процесса-отправителя, номер процесса-получателя, идентификатор сообщения (тэг).

Атрибуты сообщения — номер процесса-отправителя, номер процесса-получателя и идентификатор сообщения. Для них заведена структура MPI_Status, содержащая три поля: MPI_Source (номер процесса отправителя), MPI_Tag (идентификатор сообщения), MPI_Error (код ошибки); могут быть и добавочные поля.

Идентификатор сообщения (msgtag) — атрибут сообщения, являющийся целым неотрицательным числом, лежащим в диапазоне от 0 до 32767.

Процессы объединяются в группы, могут быть вложенные группы. Внутри группы все процессы перенумерованы. С каждой группой ассоциирован свой коммуникатор. Поэтому при осуществлении пересылки необходимо указать идентификатор группы, внутри которой производится эта пересылка. Все процессы содержатся в группе с предопределенным идентификатором MPI_COMM_WORLD.

Коммуникатор в MPI — специально создаваемый служебный объект, объединяющий в своем составе группу процессов, внутри которой выполняются коммуникационные операции («контекст”).

Виды операций:

1) Парные (‘точка-точка’) операции предполагают участие двух процессов, один из которых является отправителем сообщения, другой — получателем.

Коллективные операции обеспечивают одновременное взаимодействие всех процессов одной группы.

2) Блокирующие (синхронные) функции приостанавливают выполнение процесса до тех пор, пока производимая ими операция не будет выполнена.

Неблокирующие (асинхронные) функции возвращают управление вызвавшей их программе немедленно, выполнение операции продолжается в фоновом режиме.

3) Локальные функции не выполняют операций, которые требуют явного взаимодействия с другими процессами (большинство информационных функций MPI).

Глобальные предполагают обязательное выполнение каких-либо согласованных действий сразу в нескольких процессах.

Базовые типы данных:

При выполнении операций передачи сообщений для указания передаваемых или получаемых данных в функциях MPI необходимо указывать тип пересылаемых данных.

MPI содержит большой набор базовых типов данных, во многом совпадающих с типами данных в алгоритмических языках C и Fortran.

В MPI имеются возможности для создания новых производных типов данных для более точного и краткого описания содержимого пересылаемых сообщений.

Тип данных MPIТип данных СиТип данныхС++
MPI_CHARcharchar
MPI_WCHARwchar_twchar_t
MPI_SHORTsigned shortsigned short
MPI_INTsigned intsigned int
MPI_LONGsigned longsigned long
MPI_SIGNED_CHARsigned charsigned char
MPI_UNSIGNED_CHARunsigned charunsigned char
MPI_UNSIGNED_SHORTunsigned shortunsigned short
MPI_UNSIGNEDunsigned intunsigned int
MPI_UNSIGNED_LONGunsigned longunsigned long int
MPI_FLOATfloatfloat
MPI_DOUBLEdoubledouble
MPI_LONG_DOUBLElong doublelong double
MPI_BOOL bool
MPI_COMPLEX Complex<float>
MPI_DOUBLE_COMPLEX Complex<double>
MPI_LONG_DOUBLE_COMPLEX Complex<long double>
MPI_BYTE  
MPI_PACKED  

Первая вызываемая MPI-функция в программе:

MPI_Init(int* argc, char*** argv) — инициализация параллельной части приложения. Служит для инициализации среды выполнения MPI-программы; параметрами функции являются указатель на количество аргументов в командной строке и адрес указателя на массив символов текста самой командной строки. Все оставшиеся MPI-процедуры могут быть вызваны только после вызова MPI_Init. Возвращает: в случае успешного выполнения — MPI_SUCCESS, иначе — код ошибки. (То же самое возвращают и все остальные функции.)

Последняя вызываемая MPI-функция в программе:

int MPI_Finalize (void) — завершение параллельной части приложения. Все последующие обращения к любым MPI-процедурам, в том числе к MPI_Init, запрещены. К моменту вызова MPI_Finalize некоторым процессом все действия, требующие его участия в обмене сообщениями, должны быть завершены.

Сложный тип аргументов MPI_Init предусмотрен для того, чтобы передавать всем процессам аргументы main.

#include &amp;amp;amp;amp;amp;quot;mpi.h&amp;amp;amp;amp;amp;quot;
int main (int argc, char *argv[])
{
&amp;amp;amp;amp;amp;lt;программный код без использования MPI-функций&amp;amp;amp;amp;amp;gt;

MPI_Init (&amp;amp;amp;amp;amp;amp;agrc, &amp;amp;amp;amp;amp;amp;argv);
&amp;amp;amp;amp;amp;lt;программный код с использованием MPI-функций&amp;amp;amp;amp;amp;gt;
MPI_Finalize();

&amp;amp;amp;amp;amp;lt;программный код без использования MPI-функций&amp;amp;amp;amp;amp;gt;
return 0;
}

Общие процедуры MPI

При описании процедур MPI используется слово OUT для обозначения «выходных» параметров, т.е. таких параметров, через которые процедура возвращает результаты.

int MPI_Comm_size (MPI_Comm comm, int *size)

Функция нахождения числа процессов выполняемой параллельной программы.

int MPI_Comm_rank (MPI_Comm comm, int *rank)

Функция определения ранга процесса.

Вызов функций MPI_Comm_size, MPI_Comm_rank выполняется сразу после MPI_Init.

int MPI_Comm_size( MPI_Comm comm, int* size)

Определение общего числа параллельных процессов в группе comm.

  • comm — идентификатор группы
  • OUT size — размер группы

int MPI_Comm_rank( MPI_Comm comm, int* rank)

Определение номера процесса в группе comm. Значение, возвращаемое по адресу &rank, лежит в диапазоне от 0 до size_of_group-1.

  • comm — идентификатор группы
  • OUT rank — номер вызывающего процесса в группе comm

double MPI_Wtime(void)

Функция возвращает астрономическое время в секундах (вещественное число), прошедшее с некоторого момента в прошлом. Гарантируется, что этот момент не будет изменен за время существования процесса.

Прием/передача сообщений между отдельными процессами

Прием/передача сообщений с блокировкой

int MPI_Send(void* buf, int count, MPI_Datatype datatype, int dest, int msgtag, MPI_Comm comm)

  • buf — адрес начала буфера посылки сообщения
  • count — число передаваемых элементов в сообщении
  • datatype — тип передаваемых элементов
  • dest — номер процесса-получателя
  • msgtag — идентификатор сообщения
  • comm — идентификатор группы

Блокирующая посылка сообщения с идентификатором msgtag, состоящего из count элементов типа datatype, процессу с номером dest. Все элементы сообщения расположены подряд в буфере buf. Значение count может быть нулем. Тип передаваемых элементов datatype должен указываться с помощью предопределенных констант типа. Разрешается передавать сообщение самому себе.

Блокировка гарантирует корректность повторного использования всех параметров после возврата из подпрограммы. Выбор способа осуществления этой гарантии: копирование в промежуточный буфер или непосредственная передача процессу dest, остается за MPI. Следует специально отметить, что возврат из подпрограммы MPI_Send не означает ни того, что сообщение уже передано процессу dest, ни того, что сообщение покинуло процессорный элемент, на котором выполняется процесс, выполнивший MPI_Send.

int MPI_Recv(void* buf, int count, MPI_Datatype datatype, int source, int msgtag, MPI_Comm comm, MPI_Status *status)

  • OUT buf — адрес начала буфера приема сообщения
  • count — максимальное число элементов в принимаемом сообщении
  • datatype — тип элементов принимаемого сообщения
  • source — номер процесса-отправителя
  • msgtag — идентификатор принимаемого сообщения
  • comm — идентификатор группы
  • OUT status — параметры принятого сообщения

Прием сообщения с идентификатором msgtag от процесса source с блокировкой. Число элементов в принимаемом сообщении не должно превосходить значения count. Если число принятых элементов меньше значения count, то гарантируется, что в буфере buf изменятся только элементы, соответствующие элементам принятого сообщения. Если нужно узнать точное число элементов в сообщении, то можно воспользоваться подпрограммой MPI_Probe.

Блокировка гарантирует, что после возврата из подпрограммы все элементы сообщения приняты и расположены в буфере buf.

В качестве номера процесса-отправителя можно указать предопределенную константу MPI_ANY_SOURCE — признак того, что подходит сообщение от любого процесса. В качестве идентификатора принимаемого сообщения можно указать константу MPI_ANY_TAG — признак того, что подходит сообщение с любым идентификатором.

Если процесс посылает два сообщения другому процессу и оба эти сообщения соответствуют одному и тому же вызову MPI_Recv, то первым будет принято то сообщение, которое было отправлено раньше.

int MPI_Get_count( MPI_Status *status, MPI_Datatype datatype, int *count)

  • status — параметры принятого сообщения
  • datatype — тип элементов принятого сообщения
  • OUT count — число элементов сообщения

По значению параметра status данная подпрограмма определяет число уже принятых (после обращения к MPI_Recv) или принимаемых (после обращения к MPI_Probe или MPI_Iprobe) элементов сообщения типа datatype.

int MPI_Probe( int source, int msgtag, MPI_Comm comm, MPI_Status *status)

  • source — номер процесса-отправителя или MPI_ANY_SOURCE
  • msgtag — идентификатор ожидаемого сообщения или MPI_ANY_TAG
  • comm — идентификатор группы
  • OUT status — параметры обнаруженного сообщения

Получение информации о структуре ожидаемого сообщения с блокировкой. Возврата из подпрограммы не произойдет до тех пор, пока сообщение с подходящим идентификатором и номером процесса-отправителя не будет доступно для получения. Атрибуты доступного сообщения можно определить обычным образом с помощью параметра status. Следует обратить внимание, что подпрограмма определяет только факт прихода сообщения, но реально его не принимает.

Прием/передача сообщений без блокировки

int MPI_Isend(void *buf, int count, MPI_Datatype datatype, int dest, int msgtag, MPI_Comm comm, MPI_Request *request)

  • buf — адрес начала буфера посылки сообщения
  • count — число передаваемых элементов в сообщении
  • datatype — тип передаваемых элементов
  • dest — номер процесса-получателя
  • msgtag — идентификатор сообщения
  • comm — идентификатор группы
  • OUT request — идентификатор асинхронной передачи

Передача сообщения, аналогичная MPI_Send, однако возврат из подпрограммы происходит сразу после инициализации процесса передачи без ожидания обработки всего сообщения, находящегося в буфере buf. Это означает, что нельзя повторно использовать данный буфер для других целей без получения дополнительной информации о завершении данной посылки. Окончание процесса передачи (т.е. того момента, когда можно переиспользовать буфер buf без опасения испортить передаваемое сообщение) можно определить с помощью параметра request и процедур MPI_Wait и MPI_Test.
Сообщение, отправленное любой из процедур MPI_Send и MPI_Isend, может быть принято любой из процедур MPI_Recv и MPI_Irecv.

int MPI_Irecv(void *buf, int count, MPI_Datatype datatype, int source, int msgtag, MPI_Comm comm, MPI_Request *request)

  • OUT buf — адрес начала буфера приема сообщения
  • count — максимальное число элементов в принимаемом сообщении
  • datatype — тип элементов принимаемого сообщения
  • source — номер процесса-отправителя
  • msgtag — идентификатор принимаемого сообщения
  • comm — идентификатор группы
  • OUT request — идентификатор асинхронного приема сообщения

Прием сообщения, аналогичный MPI_Recv, однако возврат из подпрограммы происходит сразу после инициализации процесса приема без ожидания получения сообщения в буфере buf. Окончание процесса приема можно определить с помощью параметра request и процедур MPI_Wait и MPI_Test.

int MPI_Wait( MPI_Request *request, MPI_Status *status)

  • request — идентификатор асинхронного приема или передачи
  • OUT status — параметры сообщения

Ожидание завершения асинхронных процедур MPI_Isend или MPI_Irecv, ассоциированных с идентификатором request. В случае приема, атрибуты и длину полученного сообщения можно определить обычным образом с помощью параметра status.

int MPI_Waitall( int count, MPI_Request *requests, MPI_Status *statuses)

  • count — число идентификаторов
  • requests — массив идентификаторов асинхронного приема или передачи
  • OUT statuses — параметры сообщений

Выполнение процесса блокируется до тех пор, пока все операции обмена, ассоциированные с указанными идентификаторами, не будут завершены. Если во время одной или нескольких операций обмена возникли ошибки, то поле ошибки в элементах массива statuses будет установлено в соответствующее значение.

int MPI_Waitany( int count, MPI_Request *requests, int *index, MPI_Status *status)

  • count — число идентификаторов
  • requests — массив идентификаторов асинхронного приема или передачи
  • OUT index — номер завершенной операции обмена
  • OUT status — параметры сообщений

Выполнение процесса блокируется до тех пор, пока какая-либо операция обмена, ассоциированная с указанными идентификаторами, не будет завершена. Если несколько операций могут быть завершены, то случайным образом выбирается одна из них. Параметр index содержит номер элемента в массиве requests, содержащего идентификатор завершенной операции.

int MPI_Waitsome( int incount, MPI_Request *requests, int *outcount, int *indexes, MPI_Status *statuses)

  • incount — число идентификаторов
  • requests — массив идентификаторов асинхронного приема или передачи
  • OUT outcount — число идентификаторов завершившихся операций обмена
  • OUT indexes — массив номеров завершившихся операции обмена
  • OUT statuses — параметры завершившихся сообщений

Выполнение процесса блокируется до тех пор, пока по крайней мере одна из операций обмена, ассоциированных с указанными идентификаторами, не будет завершена. Параметр outcount содержит число завершенных операций, а первые outcount элементов массива indexes содержат номера элементов массива requests с их идентификаторами. Первые outcount элементов массива statuses содержат параметры завершенных операций.

int MPI_Test( MPI_Request *request, int *flag, MPI_Status *status)

  • request — идентификатор асинхронного приема или передачи
  • OUT flag — признак завершенности операции обмена
  • OUT status — параметры сообщения

Проверка завершенности асинхронных процедур MPI_Isend или MPI_Irecv, ассоциированных с идентификатором request. В параметре flag возвращает значение 1, если соответствующая операция завершена, и значение 0 в противном случае. Если завершена процедура приема, то атрибуты и длину полученного сообщения можно определить обычным образом с помощью параметра status.

int MPI_Testall( int count, MPI_Request *requests, int *flag, MPI_Status *statuses)

  • count — число идентификаторов
  • requests — массив идентификаторов асинхронного приема или передачи
  • OUT flag — признак завершенности операций обмена
  • OUT statuses — параметры сообщений

В параметре flag возвращает значение 1, если все операции, ассоциированные с указанными идентификаторами, завершены (с указанием параметров сообщений в массиве statuses). В противном случае возвращается 0, а элементы массива statuses неопределены.

int MPI_Testany(int count, MPI_Request *requests, int *index, int *flag, MPI_Status *status)

  • count — число идентификаторов
  • requests — массив идентификаторов асинхронного приема или передачи
  • OUT index — номер завершенной операции обмена
  • OUT flag — признак завершенности операции обмена
  • OUT status — параметры сообщения

Если к моменту вызова подпрограммы хотя бы одна из операций обмена завершилась, то в параметре flag возвращается значение 1index содержит номер соответствующего элемента в массиве requests, а status — параметры сообщения.

int MPI_Testsome( int incount, MPI_Request *requests, int *outcount, int *indexes, MPI_Status *statuses)

  • incount — число идентификаторов
  • requests — массив идентификаторов асинхронного приема или передачи
  • OUT outcount — число идентификаторов завершившихся операций обмена
  • OUT indexes — массив номеров завершившихся операции обмена
  • OUT statuses — параметры завершившихся операций

Данная подпрограмма работает так же, как и MPI_Waitsome, за исключением того, что возврат происходит немедленно. Если ни одна из указанных операций не завершилась, то значение outcount будет равно нулю.

int MPI_Iprobe( int source, int msgtag, MPI_Comm comm, int *flag, MPI_Status *status)

  • source — номер процесса-отправителя или MPI_ANY_SOURCE
  • msgtag — идентификатор ожидаемого сообщения или MPI_ANY_TAG
  • comm — идентификатор группы
  • OUT flag — признак завершенности операции обмена
  • OUT status — параметры обнаруженного сообщения

Получение информации о поступлении и структуре ожидаемого сообщения без блокировки. В параметре flag возвращает значение 1, если сообщение с подходящими атрибутами уже может быть принято (в этом случае ее действие полностью аналогично MPI_Probe), и значение 0, если сообщения с указанными атрибутами еще нет.

Объединение запросов на взаимодействие

Процедуры данной группы позволяют снизить накладные расходы, возникающие в рамках одного процессора при обработке приема/передачи и перемещении необходимой информации между процессом и сетевым контроллером. Несколько запросов на прием и/или передачу могут объединяться вместе для того, чтобы далее их можно было бы запустить одной командой. Способ приема сообщения никак не зависит от способа его посылки: сообщение, отправленное с помощью объединения запросов либо обычным способом, может быть принято как обычным способом, так и с помощью объединения запросов.

int MPI_Send_init( void *buf, int count, MPI_Datatype datatype, int dest, int msgtag, MPI_Comm comm, MPI_Request *request)

  • buf — адрес начала буфера посылки сообщения
  • count — число передаваемых элементов в сообщении
  • datatype — тип передаваемых элементов
  • dest — номер процесса-получателя
  • msgtag — идентификатор сообщения
  • comm — идентификатор группы
  • OUT request — идентификатор асинхронной передачи

Формирование запроса на выполнение пересылки данных. Все параметры точно такие же, как и у подпрограммы MPI_Isend, однако в отличие от нее пересылка не начинается до вызова подпрограммы MPI_Startall.

int MPI_Recv_init( void *buf, int count, MPI_Datatype datatype, int source, int msgtag, MPI_Comm comm, MPI_Request *request)

  • OUT buf — адрес начала буфера приема сообщения
  • count — число принимаемых элементов в сообщении
  • datatype — тип принимаемых элементов
  • source — номер процесса-отправителя
  • msgtag — идентификатор сообщения
  • comm — идентификатор группы
  • OUT request — идентификатор асинхронного приема

Формирование запроса на выполнение приема данных. Все параметры точно такие же, как и у подпрограммы MPI_Irecv, однако в отличие от нее реальный прием не начинается до вызова подпрограммы MPI_Startall.

MPI_Startall( int count, MPI_Request *requests)

  • count — число запросов на взаимодействие
  • OUT requests — массив идентификаторов приема/передачи

Запуск всех отложенных взаимодействий, ассоциированных вызовами подпрограмм MPI_Send_init и MPI_Recv_init с элементами массива запросов requests. Все взаимодействия запускаются в режиме без блокировки, а их завершение можно определить обычным образом с помощью процедур MPI_Wait и MPI_Test.

Совмещенные прием/передача сообщений

int MPI_Sendrecv( void *sbuf, int scount, MPI_Datatype stype, int dest, int stag, void *rbuf, int rcount, MPI_Datatype rtype, int source, MPI_Datatype rtag, MPI_Comm comm, MPI_Status *status)

  • sbuf — адрес начала буфера посылки сообщения
  • scount — число передаваемых элементов в сообщении
  • stype — тип передаваемых элементов
  • dest — номер процесса-получателя
  • stag — идентификатор посылаемого сообщения
  • OUT rbuf — адрес начала буфера приема сообщения
  • rcount — число принимаемых элементов сообщения
  • rtype — тип принимаемых элементов
  • source — номер процесса-отправителя
  • rtag — идентификатор принимаемого сообщения
  • comm — идентификатор группы
  • OUT status — параметры принятого сообщения

Данная операция объединяет в едином запросе посылку и прием сообщений. Принимающий и отправляющий процессы могут являться одним и тем же процессом. Сообщение, отправленное операцией MPI_Sendrecv, может быть принято обычным образом, и точно также операция MPI_Sendrecv может принять сообщение, отправленное обычной операцией MPI_Send. Буфера приема и посылки обязательно должны быть различными.

Коллективные взаимодействия процессов

В операциях коллективного взаимодействия процессов участвуют все процессы коммуникатора. Соответствующая процедура должна быть вызвана каждым процессом, быть может, со своим набором параметров. Возврат из процедуры коллективного взаимодействия может произойти в тот момент, когда участие процесса в данной операции уже закончено. Как и для блокирующих процедур, возврат означает то, что разрешен свободный доступ к буферу приема или посылки, но не означает ни того, что операция завершена другими процессами, ни даже того, что она ими начата (если это возможно по смыслу операции).

int MPI_Bcast(void *buf, int count, MPI_Datatype datatype, int source, MPI_Comm comm)

  • OUT buf — адрес начала буфера посылки сообщения
  • count — число передаваемых элементов в сообщении
  • datatype — тип передаваемых элементов
  • source — номер рассылающего процесса
  • comm — идентификатор группы

Рассылка сообщения от процесса source всем процессам, включая рассылающий процесс. При возврате из процедуры содержимое буфера buf процесса sourceбудет скопировано в локальный буфер процесса. Значения параметров countdatatype и source должны быть одинаковыми у всех процессов.

int MPI_Gather( void *sbuf, int scount, MPI_Datatype stype, void *rbuf, int rcount, MPI_Datatype rtype, int dest, MPI_Comm comm)

  • sbuf — адрес начала буфера посылки
  • scount — число элементов в посылаемом сообщении
  • stype — тип элементов отсылаемого сообщения
  • OUT rbuf — адрес начала буфера сборки данных
  • rcount — число элементов в принимаемом сообщении
  • rtype — тип элементов принимаемого сообщения
  • dest — номер процесса, на котором происходит сборка данных
  • comm — идентификатор группы
  • OUT ierror — код ошибки

Сборка данных со всех процессов в буфере rbuf процесса dest. Каждый процесс, включая dest, посылает содержимое своего буфера sbuf процессу dest. Собирающий процесс сохраняет данные в буфере rbuf, располагая их в порядке возрастания номеров процессов. Параметр rbuf имеет значение только на собирающем процессе и на остальных игнорируется, значения параметров countdatatype и dest должны быть одинаковыми у всех процессов.

int MPI_Allreduce( void *sbuf, void *rbuf, int count, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm)

  • sbuf — адрес начала буфера для аргументов
  • OUT rbuf — адрес начала буфера для результата
  • count — число аргументов у каждого процесса
  • datatype — тип аргументов
  • op — идентификатор глобальной операции
  • comm — идентификатор группы

Выполнение count глобальных операций op с возвратом count результатов во всех процессах в буфере rbuf. Операция выполняется независимо над соответствующими аргументами всех процессов. Значения параметров count и datatype у всех процессов должны быть одинаковыми. Из соображений эффективности реализации предполагается, что операция op обладает свойствами ассоциативности и коммутативности.

int MPI_Reduce( void *sbuf, void *rbuf, int count, MPI_Datatype datatype, MPI_Op op, int root, MPI_Comm comm)

  • sbuf — адрес начала буфера для аргументов
  • OUT rbuf — адрес начала буфера для результата
  • count — число аргументов у каждого процесса
  • datatype — тип аргументов
  • op — идентификатор глобальной операции
  • root — процесс-получатель результата
  • comm — идентификатор группы

Функция аналогична предыдущей, но результат будет записан в буфер rbuf только у процесса root.

Синхронизация процессов

int MPI_Barrier( MPI_Comm comm)

  • comm — идентификатор группы

Блокирует работу процессов, вызвавших данную процедуру, до тех пор, пока все оставшиеся процессы группы comm также не выполнят эту процедуру.

Работа с группами процессов

int MPI_Comm_split( MPI_Comm comm, int color, int key, MPI_Comm *newcomm)

  • comm — идентификатор группы
  • color — признак разделения на группы
  • key — параметр, определяющий нумерацию в новых группах
  • OUT newcomm — идентификатор новой группы

Данная процедура разбивает все множество процессов, входящих в группу comm, на непересекающиеся подгруппы — одну подгруппу на каждое значение параметра color (неотрицательное число). Каждая новая подгруппа содержит все процессы одного цвета. Если в качестве color указано значение MPI_UNDEFINED, то в newcomm будет возвращено значение MPI_COMM_NULL.

int MPI_Comm_free( MPI_Comm comm)

  • OUT comm — идентификатор группы

Уничтожает группу, ассоциированную с идентификатором comm, который после возвращения устанавливается в MPI_COMM_NULL.

Копирование файлов

При копировании файлов с компьютера на вычислительный кластер (программы, входные данные, различные библиотеки и т.п.) и обратно (листинги, результаты расчетов) пользователем должен использоваться протокол sftp. Этот протокол обеспечивает необходимую защиту передаваемой информации посредством шифрования всех передаваемых данных.

Копирование файлов осуществляется при помощи утилиты scp (для Windows-пользователей, использующих PuTTY – pscp). Формат этой команды эквивалентен стандартной команде копирования файлов cp. Копирование файлов в SSH Secure Shell Client реализовано через знакомый пользователям Windows интерфейс.

Многие пользователи Windows возможно предпочтут пользоваться более  привычными графическими оболочками. Существует свободно распространяемая программа WinSCP, представляющая собой клиент в стиле проводника Windows или Norton Commander по выбору пользователя. Скачать в интернете. Для любой из программ настройки минимальны: адрес сервера и порт номер 22.

Примечание: максимальный размер домашней директории пользователя может быть ограничен. Пользователям не следует хранить на сервере файлы, не относящиеся напрямую к заявленным в целях.

Работа на кластере

Для работы на вычислительном кластере удобно пользоваться файловым менеджером Midnight Commander, который включает редактор текстовых файлов. Универсальным способом работы на кластере является работа через консоль. Оба способа кратко описаны ниже.

Навигация

На кластере пользователю доступен на запись только его домашний каталог. Для работы с файлами и каталогами существует несколько полезных команд:

ls — Показать список папок и файлов в текущем каталоге

pwd — Показать имя текущего каталога

clear — Очистка экрана

ls -al – форматированный список со скрытыми каталогами и файлами

Переход по каталогам:

cd (cd ~) — переход в домашний каталог

cd dir1 — переход в каталог dir1

cd ~/dir2 — переход из любого каталога в dir2, который находится в домашней дирректории

cd .. — переход на уровень выше относительно текущего каталога

cd ../.. — переход на 2 уровня выше

Работа с файлами и каталогами:

mkdir dir1 — создание каталога dir1

rmdir -i dir1 — удаляет пустой каталог dir1, -i запрос перед удалением

rm -i -r dir1 — удалить непустой каталог dir1 со всеми входящими в него подкаталогами и файлами, -i запрос перед удалением

rm -i -r * — удаление как файлов, так и подкаталогов текущего каталога, -i запрос перед удалением

rm -rf dir – удалить форсированно каталог dir

cat file1 — просмотр файла file1

touch file1 — создание файла file1

cat file1 > file2 — копировать файл file1 в файл file2

cat file1 file2 … fileN > new-file — объединения нескольких файлов в один new-file

cat > newfile — После того, как вы напечатаете все, что хотите, нажмите комбинацию клавиш <Ctrl>+<D> или <Ctrl>+<C>, и все, что вы ввели, будет записано в newfile.

more file – вывести содержимое file

head file – вывести первые 10 строк file

tail file – вывести последние 10 строк file

tail -f file – вывести содержимое file по мере роста, начинает с последних 10 строк

Копирование файлов:

cp -i source destination — файл или каталог source копируется в файл или каталог destination

cp -i source_directory new_directory — файлы, содержащиеся в каталоге source_directory копируются в каталог new_directory

-i — перед перезаписью существующего файла будет запрашиваться подтверждение

-f — Перезаписывать файлы при копировании (если такие уже есть) без дополнительных предупреждений

cp file1 file2 – скопировать file1 в file2

cp -r dir1 dir2 – скопировать dir1 в dir2; создаст каталог dir2, если он не существует

Перемещение файлов:

mv -i source destination — файл или каталог source переместится в каталог destination

mv -i source_directory new_directory — файлы, содержащиеся в каталоге source_directory переместятся в каталог new_directory

mv oldname newname — переименование файлов и каталогов

rm file – удалить file

rm -f file – удалить форсированно file

rm -i — удаляет файлы, -i запрос перед удалением

rm -i * — удалить все файлы в текущем каталоге, подкаталоги при этом не удалятся, -i запрос перед удалением

Работа с фоновыми окнами (screen):

screen — открыть новое окно для работы в фоновом режиме

screen -ls — список запущенных окон

ctrl + A  -> D (ctrl + D) — свернуть окно

ctrl + D — закрыть текущее окно

screen -r — развернуть фоновое окно

screen -r 31058 (screen -r 31058.pts-13.n1) — развернуть терминал 31058.pts-13.n1

Примечание: подробную справку по этим командам, а также по всем другим можно получить, набрав в консоли man имя_команды. Для эффективной работы с консолью рекомендуется обратиться к руководству пользователя операционной системы Linux.

При работе в консоли удобно пользоваться клавишей автоподстановки Tab. Если, набрав несколько первых символов программы или файла пользователь нажмет на клавишу Tab, то система дополнит их до полного имени, если имеется только единственный вариант дополнения. Если вариантов несколько, то появится их список. Введение дополнительных символов, которые однозначно определяют нужное имя и нажатие клавиши Tab приводит к выбору нужного имени файла или команды.

Запустить файловый менеджер Midnight Commander можно, набрав в консоли команду mc. Интерфейс Midnight Commander внешне похож на FAR или Norton Commander. Midnight Commander позволяет пользователю работать в консольном режиме более удобным и привычным способом.

Примечание: при недостаточной пропускной способности соединения (особенно через Интернет) использование mc может сильно замедлить заботу, поскольку тратится время на прорисовку интерфейса. В этом случае рекомендуется пользоваться исключительно консольными командами.

Редактирование файлов (редактор vi)

Пользователю рекомендуется основную часть исходных файлов подготавливать на своем локальном компьютере в привычных текстовых редакторах. Для внесения небольших изменений в файлы хорошо подходит встроенный в mc редактор.

В этом редакторе присутствуют все основные средства, имеющиеся в подобных программах: копирование, вставка, поиск, замена, подсветка синтаксиса, ряд других.

Если необходимы более сложные средства редактирования, то можно использовать редактор vi. Основная функция vi — работа с исходными текстами программ. Достоинства данного редактора в большом количестве функций, быстроте работы (редактор полностью консольный). Недостаток редактора – достаточно сложное управление, которое нельзя назвать интуитивно понятным пользователям, привыкшим к работе в ОС Windows. За полным перечнем доступных команд редактора vi рекомендуется обратиться к соответствующим руководствам, поскольку описание всех его команд и функций выходит за рамки данного руководства.

Запустить vi можно командой:

vi имя_файла

Редактор vi — универсальный полноэкранный текстовый редактор в среде UNIX. Универсальность означает, что, во-первых, этот редактор есть во всех UNIX-подобных ОС и, во-вторых, этот редактор работает с практически любым видом терминала (ANSI, VT100, VT220, VT320, DEC, и т. д.). (База данных, содержащая описание известных системе терминалов находится в файле /etc/termcap.) Эта универсальность обернулась несколько непривычным (для пользователей DOS) пользовательским интерфейсом: для управления редактором используются лишь «обычные» кнопки клавиатуры (алфавитно-цифровые символы и знаки препинания). Имеющиеся на многих типах терминалов функциональные клавиши практически не используются. Если клавиатура терминала имеет стрелочные клавиши, то они используются, но, как будет видно ниже, в ограниченном контексте.

Режимы работы редактора:

Ввод текста:

В этом режиме все, что набирается на клавиатуре и отображается на экране терминала и запоминается в буфере редактора.

Командный режим:

В этом режиме символы клавиатуры выполняют специальные функции (перемещение курсора, стирание частей текста, и т. д.), то есть функции редактирования.

Набираемые команды НЕ ОТОБРАЖАЮТСЯ НА ЭКРАНЕ!

 Режим командной строки:

Режим командной строки позволяет производить более глобальные операции с текстом: записывать отредактированный текст в файл, считывать новый файл, выходить из vi, производить настройку редактора, поиск по шаблону, а также осуществлять некоторые функции редактирования.

Команды отображаются в нижней части экрана (в «командной» строке редактора).

Ввод текста:

<Ctrl -H> — уничтожает последний введенный символ.

<Ctrl -[> или клавиша <Esc> — переводят редактор в командный режим.

Команды:

i — переход в режим набора методом вставки перед текущим символом

a — переход в режим набора методом вставки за текущим символом

R — переход в режим набора текста методом набивки.

Перемещение курсора:

h,j,k,l — на один символ (одну строку), как показано стрелками

^ или 0 — в начало текущей строки

$ — в конец текущей строки

w — на слово вправо

b — на слово влево

} — на параграф вперед (параграф — это блок текста, отделенный пустой строкой)

{ — на параграф назад

[[ — в начало текста

]] — в конец текста

Кнопки стрелочной клавиатуры также позволяют перемещаться по тексту.

Редактирование:

dd — стирание текущей строки

d — движение курсора — стирание от текущего положения курсора до нового, задаваемого символом перемещения курсора. (Нажатие кнопок стрелочной клавиатуры НЕ ЯВЛЯЕТСЯ движением курсора и не может использоваться в комбинированных командах.)

J — слияние текущей строки со следующей

u — отмена последней команды

. — повтор последней команды

: — переход в режим командной строки

Командная строка:

:q или :q! — выход из редактора без сохранения изменений

:e! — отменить изменения в текущей сессии

😡 — выход из редактора с записью, если файл был модифицирован

:w или w filename или w! filename — запись файла и возвращение в командный режим

:e filename или :e! filename — загрузка файла filename

:r filename — добавить содержимое указанного файла к редактируемому сразу за текущей строкой

:set nu — включить нумерацию строк

:set nonu — отключить нумерацию строк

:!command — выполнить команду UNIX не покидая редактора

:/word — выполнить поиск слова word в тексте

:/ — повторить поиск слова word далее по тексту

Блоки, буферы, окна редактирования:

Повторители:

Командам и движениям курсора можно давать повторители (числа), например:

2w — передвинуть курсор на два слова вперед

10l — передвинуть курсор на десять символов вправо

d10l — стереть десять символов справа от курсора

2d10l — стереть двадцать символов справа от курсора

5J — слить пять последующих строк в одну

  1. — повторить последнюю введенную команду четыре раза

Буферы vi:

Редактор имеет три типа буферов: буфер стирания (0-9), неименованный буфер и именованные буферы (a-z). В буферы стирания автоматически заносятся стираемые элементы. В буфере 0 хранится последний стертый элемент, в буфере 1 — предпоследний и т. д.

Занести в буфер:

yy — занести текущую строку в неименованный буфер

y- движение курсора — занести указанный движением курсора блок текста в неименованный буфер.

«ayy — занести текущую строку в именованный буфер a

«Ayy — добавить текущую строку к содержимому именованного буфера a

«by10j — занести последующие 10 строк в именованный буфер b

Вставить из буфера:

p — вставить в текущую позицию содержимое неименованного буфера

«ap — вставить в текущую позицию содержимое именованного буфера a

«1p — вставить в текущую позицию содержимое буфера стирания 1

Многооконное редактирование:

Редактировать сразу несколько файлов можно либо пользуясь командной редактора :e filename, либо указав все необходимые файлы в командной строке при вызове редактора (например: vi file1 file2 file3). В последнем случае вы двигаетесь по списку файлов с помощью команд:

:n — переходим к следующему файлу в списке

:rew — возвращаемся к редактированию первого файла в списке

Именованные буферы сохраняют свое содержимое при переходе к редактированию другого файла.

Шпаргалка по командам Linux и Unix систем

Управление процессами|

ps – вывести ваши текущие активные процессы

top – показать все запущенные процессы

kill pid – убить процесс с id pid

killall proc – убить все процессы с именем proc

bg – список остановленных и фоновых задач; продолжить выполнение остановленной задачи в фоне

fg – выносит на передний план последние задачи

fg n – вынести задачу n на передний план

Права доступа на файлы

chmod octal file – сменить права file на octal, раздельно для пользователя, группы и для всех добавлением:

4 – чтение (r)

2 – запись (w)

1 – исполнение (x)

Примеры:

chmod 777 – чтение, запись, исполнение для всех

chmod 755 – rwx для владельца, rx для группы и остальных.

Дополнительные опции: man chmod.

SSH

ssh user@host – подключится к host как user

ssh -p port user@host – подключится к host на порт port как user

ssh-copy-id user@host – добавить ваш ключ на host для user чтобы включить логин без пароля и по ключам

Поиск

grep pattern files – искать pattern в files

grep -r pattern dir – искать рекурсивно pattern в dir

command | grep pattern – искать pattern в выводе command

locate file – найти все файлы с именем file

Системная информация

date – вывести текущую дату и время

cal – вывести календарь на текущий месяц

uptime – показать текущий аптайм

w – показать пользователей онлайн

whoami – имя, под которым вы залогинены

finger user – показать информацию о user

uname -a – показать информацию о ядре

cat /proc/cpuinfo – информация ЦПУ

cat /proc/meminfo – информация о памяти

man command – показать мануал для command

df – показать инф. о использовании дисков

du – вывести “вес” текущего каталога

free – использование памяти и swap

whereis app – возможное расположение программы app

which app – какая app будет запущена по умолчанию

Архивация

tar cf file.tar files – создать tar-архив с именем file.tar содержащий files

tar xf file.tar – распаковать file.tar

tar czf file.tar.gz files – создать архив tar с сжатием Gzip

tar xzf file.tar.gz – распаковать tar с Gzip

tar cjf file.tar.bz2 – создать архив tar с сжатием Bzip2

tar xjf file.tar.bz2 – распаковать tar с Bzip2

gzip file – сжать file и переименовать в file.gz

gzip -d file.gz – разжать file.gz в file

Сеть

ping host – пропинговать host и вывести результат

whois domain – получить информацию whois для domain

dig domain – получить DNS информацию domain

dig -x host – реверсивно искать host

wget file – скачать file

wget -c file – продолжить остановленную закачку

Установка пакетов

Установка из исходников:

./configure

make

make install

dpkg -i pkg.deb – установить пакет (Debian)

rpm -Uvh pkg.rpm – установить пакет (RPM)

Клавиатурные сочетания

Ctrl+C – завершить текущую команду

Ctrl+Z – остановить текущую команду, продолжть с fg на переднем плане или bg в фоне

Ctrl+D – разлогиниться, тоже самое, что и exit

Ctrl+W – удалить одно слово в текущей строке

Ctrl+U – удалить строку

!! — повторить последнюю команду

exit – разлогиниться

Полезные ссылки

  • http://ilya-evseev.narod.ru/articles/mpi/index.html — Илья Евсеев. MPI для начинающих.  Учебное пособие + примеры.
  • http://www.parallel.ru – Сайт лаборатории Параллельных информационных технологий Научно-исследовательского вычислительного центра МГУ. Большое количество информации о параллельных вычислениях. Новости, технологии, компиляторы и многое другое.
  • https://parallel.ru/vvv/mpi.html — Лекция 5. Технологии параллельного программирования. Message Passing Interface (MPI)
  • http://www.open-mpi.org  — Сайт разработчиков MPI-дистрибутива OpenMPI. FAQ по использованию OpenMPI.
  • http://mvapich.cse.ohio-state.edu — Сайт разработчиков MPI-дистрибутивов MVAPICH и MVAPICH2. Документация по использованию MVAPICH и MVAPICH2.
  • http://classic.chem.msu.su/gran/gamess — Сайт разработчика программы расчетов химии PCGAMESS.
  • http://www.fftw.org – Сайт разработчиков библиотеки быстрый преобразований Фурье FFTW.
  • http://www.clusterresources.com/pages/products/torque-resource-manager.php — Страница разработчиков менеджера ресурсов Torque. Большое количество документации по настройке и использованию Torque.
  • http://math-atlas.sourceforge.net — Страница разработчиков библиотеки ATLAS (Automatically Tuned Linear Algebra Software).
  • http://www.tacc.utexas.edu/resources/software/#blas — Страница разработчиков библиотеки GotoBLAS.
  • http://www.intel.com — Официальный сайт корпорации Intel, производителя микропроцессоров и комплектующих, компиляторов языков программирования СИ++ и Фортран-90, библиотеки MKL и др. программного обеспечения для проведения параллельных вычислений.
  • http://www.gromacs.org — Официальный сайт программной системы проведения расчетов молекулярной динамики GROMACS.
  • http://www.ansys.com – Официальный сайт компании ANSYS Inc, производителя программного пакета ANSYS.
  • http://top500.org – Сайт, публикующий список 500 самых производительных суперкомпьютеров в мире.
  • http://cb.vu/unixtoolbox.xhtml — Сайт, с огромным количеством всевозможных команд.
  • https://slurm.schedmd.com – Документация по Slurm.
  • http://hybrilit.jinr.ru — Гетерогенный кластер “HybriLIT”.
  • https://computing.llnl.gov/tutorials/linux_clusters — Обзор кластеров Linux.
  • https://wiki.fysik.dtu.dk/niflheim/SLURM — Установка и настройка Slurm.
  • http://www.ssd.sscc.ru/old/old/kraeva/MPI.html — MPI. Вводный курс

Связанные записи