Партнерка на США и Канаду по недвижимости, выплаты в крипто

  • 30% recurring commission
  • Выплаты в USDT
  • Вывод каждую неделю
  • Комиссия до 5 лет за каждого referral

Volatile

·  У процессора есть кэш, ускоряющий работу с памятью

o  Данные читаются в кэш из памяти

o  Данные модифицируются в кэше

·  При совместном использовании памяти несколькими ядрами каждое ядро имеет свой кэш

·  Операции volatile делают кэш недействительным

·  Доступные возможности по использованию volatile

o  Операции VolatileRead, VolatileWrite

o  Объявление переменных volatile

Singleton

·  Ограничение использования единственного объекта множеством потоков

o  Паттерн Singleton или Lazy Initialization

·  Дополнительная информация http://msdn. /en-us/library/ff650316.aspx

ReaderWriterLock

·  Обеспечивает синхронизацию при обращении к переменной, если

o  Одни потоки только пишут в неё

o  Другие потоки только читают из неё

Апартаменты (COM)

·  Апартамент – модель создания и использования объектов

·  STA – Single Thread Apartment реентерабельность не обеспечивается – каждый объект создаётся в отдельном потоке

·  MTA – Multiple Thread Apartment реентерабельность обеспечена – один объект может использоваться повторно и одновременно в каждом потоке приложения

·  Дополнительная информация http://msdn. /en-us/library/ms809971.aspx

4.4  Java

Работа с процессами и потоками

·  Создание процессов

o  Класс java. lang. ProcessBuilder

o  После создания потока его можно принудительно завершить или послать ему данные

·  Создание потоков

o  Наследование от класса java. lang. Thread – основной

НЕ нашли? Не то? Что вы ищете?

o  Реализация интерфейса java. *****nnable

Пример создания процесса в Java находится в приложении 2.

Способы синхронизации потоков

·  Ключевое слово synchronized – критическая секция, основной

o  Объявление метода, целиком являющегося критической секцией

o  Выделение критической секции в теле метода

·  Использование типов пакета java. util. concurrent

o  CyclicBarrier

o  CountDownLatch

§  ConcurrentMap<K, V>

§  BlockingQueue<E>

Модель работы с потоками

·  В JRE до версии 1.2 использовалась модель Green Threads

o  Green Threads – имитация потоков операционной системы

o  JVM берёт на себя заботу о переключении между разными Green Threads

o  Для ОС все Green Threads управляемого процесса являются единственным потоком

o  Даже при использовании Green Threads для ОС JVM представляется в виде нескольких потоков, например, потока, в котором запускается сборщик мусора

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

o  Теоретически выше скорость переключения между Green Threads (реально работает очень медленно)

o  Требуется меньше ресурсов

o  Возможность создания большего количества Green Threads, по сравнению с потоками

·  Недостатки

o  Невозможно выполнить Green Threads на разных процессорах

o  В единицу времени выполняется только один Green Thread

·  Начиная с версии 1.2 в JRE по умолчанию используется модель потоков ОС, но модель Green Threads также поддерживается

Особенности работы с потоками Java в ОС Solaris

·  В ОС Solaris для Java начиная с версии 1.2 возможна использование модели MхN для работы с потоками

Description: http://java.sun.com/docs/hotspot/threads/threadModel.gif

Рисунок 19. Java Solaris M:N модель

Управление задачами

·  java. util. concurrent. ThreadPoolExecutor – реализация пула потоков

·  java. util. concurrent. ScheduledThreadPoolExecutor – дополнительная возможность выполнять задания по расписанию или периодически

5  Управление и синхронизация процессов и потоков

5.1  Функции создания процессов и управления ими

Функция fork

·  pid_t fork(void);

·  Вызов функции приводит к созданию почти полной копии текущего процесса, запущенного с момента вызова функции fork

·  Возвращаемое значение – идентификатор потока, позволяющий определить, является ли выполняющийся процесс исходным или порождённым

o  В исходном процессе возвращается идентификатор порождённого процесса

o  В порождённом процессе возвращается 0

o  Возвращает -1 в случае, если создать дополнительный процесс не удалось (код ошибки заносится в errno)

·  Отличия порождённого процесса от исходного

o  идентификатор процесса (PID, PPID)

o  израсходованное время ЦП (оно обнуляется в момент создания)

o  сигналы процесса-родителя, требующие ответа

o  заблокированные файлы (record locking)

·  Прототип функции описан в файле unistd. h

·  Тип возвращаемого значения описан в файле sys/types. h

·  Дополнительная информация http://www. opengroup. org/onlinepubs//functions/fork. html

Семейство функций exec и переменная environ

·  int execl(const char *path, const char *arg0, ... /*, (char *)0 */);

·  int execv(const char *path, char *const argv[]);

·  Запуск нового процесса и завершение выполнения текущего процесса: замена текущего процесса новым

·  Возвращаемое значение

o  В случае ошибки -1 (код ошибки заносится в errno)

o  В случае успеха возвращаемое значение отсутствует, поскольку текущий процесс успешно завершается

·  Отличия между вариантами функции в её семействе определяются набором параметров

·  Прототипы функций описаны в файле unistd. h

·  extern char **environ; – дополнительно используемая глобальная переменная

o  Инициализируется как указатель на массив указателей на строки переменных среды (environment strings)

·  Дополнительная информация http://www. opengroup. org/onlinepubs//functions/exec. html

Семейство функций waitpid

·  pid_t wait(int *stat_loc);

·  pid_t waitpid(pid_t pid, int *stat_loc, int options);

·  Ожидание завершения одного или нескольких дочерних процессов

·  Функция позволяет получить информацию только об одном завершённом процессе, для получения информации о нескольких процессах функцию нужно вызвать несколько раз

·  Варианты работы в зависимости от значения параметра pid

o  pid = -1: выполняется ожидание завершения любого дочернего процесса (вызов waitpid эквивалентен вызову wait)

o  pid > 0: выполняется ожидание завершения дочернего процесса с указанным идентификатором

o  pid = 0: выполняется ожидание завершения дочернего процесса с идентификатором группы процесса, равным идентификатору группы текущего процесса

o  pid < -1: выполняется ожидание завершения дочернего процесса с идентификатором группы процесса, равным идентификатору группы, заданному абсолютным значением pid

·  Параметр stat_loc содержит указатель на информацию о причине завершения дочернего процесса, извлекаемую с помощью макросов

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

·  Возвращаемое значение

o  В случае успеха – идентификатор завершившегося процесса

o  В случае ошибки -1 (код ошибки заносится в errno)

·  Прототип функции описан в файле sys/wait. h

·  Тип возвращаемого значения описан в файле sys/types. h

·  Дополнительная информация http://www. opengroup. org/onlinepubs//functions/waitpid. html

Функция kill

·  int kill(pid_t pid, int sig);

·  Посылает сигнал процессу или группе процессов

·  Варианты работы в зависимости от значения параметра pid

o  pid = -1: выполняется отправка сигнала всем процессам (за исключением системных процессов), к которым допустимо отправлять сигналы текущему процессу

o  pid > 0: выполняется отправка сигнала процессу с указанным идентификатором

o  pid = 0: выполняется отправка сигнала процессам с идентификатором группы процесса, равным идентификатору группы текущего процесса

o  pid < -1: выполняется отправка сигнала процессам с идентификатором группы процесса, равным идентификатору группы, заданному абсолютным значением pid

·  Прототип функции описан в файле signal. h

·  Дополнительная информация http://www. opengroup. org/onlinepubs//functions/kill. html

Функция signal

·  void (*signal(int sig, void (*func)(int)))(int);

·  Задаёт функцию обратного вызова для обработки поступившего сигнала текущему процессу

·  Параметр sig определяет значение сигнала, для которого назначается обработчик

·  Варианты работы в зависимости от значения параметра func

o  SIG_DFL – к указанному сигналу подключается обработчик по умолчанию

o  SIG_IGN – процесс не обрабатывает поступление указанного сигнала

o  Указатель на функцию – к указанному сигналу подключается обработчик в виде заданной указателем функции

·  Возвращаемое значение – указатель на функцию обратного вызова, являющуюся старым обработчиком сигнала

·  Прототип функции описан в файле signal. h

·  Дополнительная информация http://www. opengroup. org/onlinepubs//functions/signal. html

5.2  Функции создания потоков и управления ими

Функция pthread_create

·  int pthread_create(
pthread_t *restrict thread,
const pthread_attr_t *restrict attr,
void *(*start_routine)(void*),
void *restrict arg);

·  Функция создания потока

·  Параметры

o  thread – идентификатор созданного потока (выходной параметр)

o  attr – указатель на структуру с атрибутами создаваемого потока

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

o  arg – аргумент, передаваемый в функцию обратного выхова

·  Прототип функции описан в файле pthread. h

·  Дополнительная информация http://www. opengroup. org/onlinepubs//functions/pthread_create. html

Функция pthread_exit

·  void pthread_exit(void *value_ptr);

·  Завершает выполнение потока, в контексте которого она вызвана

·  Параметр value_ptr передаётся в функцию int pthread_join(pthread_t thread, void **value_ptr), вызываемую для ожидания завершения потока в другом потоке

·  Прототип функции описан в файле pthread. h

·  Дополнительная информация http://www. opengroup. org/onlinepubs//functions/pthread_exit. html

Функция pthread_join

·  int pthread_join(pthread_t thread,
void **value_ptr);

·  Функция ожидания завершения потока

·  Не определено поведение системы в случае, если поток завершён, но для него не вызвана функция pthread_join – количество потоков ограничено

·  Параметр возвращает значение, переданное в функцию void pthread_exit(void *value_ptr), вызываемую в контексте завершающегося потока для его завершения

·  Прототип функции описан в файле pthread. h

·  Дополнительная информация http://www. opengroup. org/onlinepubs//functions/pthread_join. html

Функция pthread_detach

·  int pthread_detach(
pthread_t thread);

·  Вызов этой функции для потока с указанным идентификатором thread означает, что после его завершения его данные будут автоматически уничтожены и ожидать его завершения вызовом функции pthread_join будет нельзя

·  Прототип функции описан в файле pthread. h

·  Дополнительная информация http://www. opengroup. org/onlinepubs//functions/pthread_detach. html

Функция sched_yeld

·  int sched_yield(void);

·  Вызов этой функции приводит к освобождению текущим потоком процессора и постановкой этого потока в конец очереди потоков с тем же приоритетом

·  Прототип функции описан в файле sched. h

·  Дополнительная информация http://www. opengroup. org/onlinepubs//functions/sched_yield. html

5.3  Функции работы со средствами синхронизации

Функция shmget

·  int shmget(key_t key, size_t size,
int shmflg);

·  Функция предназначена для создания или открытия области разделяемой памяти

·  Параметр shmflg содержит атрибуты

·  Возвращаемое значение

o  Идентификатор области разделяемой памяти, ассоциированный с ключом key

o  В случае ошибки -1 (код ошибки заносится в errno)

·  Прототип функции описан в файле sys/shm. h

·  Тип key_t описан в файле sys/ipc. h

·  Дополнительная информация http://www. opengroup. org/onlinepubs//functions/shmget. html

Функция shmat

·  void *shmat(int shmid, const void *shmaddr,
int shmflg);

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

·  Варианты работы в зависимости от значения параметров shmaddr и shmflg

o  shmaddr == null, начальный адрес выделенной памяти определяется ОС

o  shmaddr!= null && shmflg &SHM_RND!= 0 начальный адрес выделенной памяти определяется адресом, полученным в результате вычисления выражения:
shmaddr - ((uintptr_t)shmaddr %SHMLBA))

o  shmaddr!= null && shmflg &SHM_RND == 0 начальный адрес выделенной памяти определяется адресом, указанным в shmaddr

o  Выделенная память доступна только для чтения если shmflg &SHM_RDONLY!= 0 и текущий процесс имеет права на чтение, в остальных случаях выделенная память доступна для чтения и записи

·  Прототип функции описан в файле sys/shm. h

·  Дополнительная информация http://www. opengroup. org/onlinepubs//functions/shmat. html

Функция shmctl

·  int shmctl(int shmid, int cmd,
struct shmid_ds *buf);

·  Обеспечивает управление областью разделяемой памяти, включая её удаление

·  Варианты работы в зависимости от значения параметра cmd

o  IPC_STAT в структуру buf заносится информация, актуальная для области разделяемой памяти

o  IPC_SET производится управление областью разделяемой памяти в соответствии со значением структуры buf

o  IPC_RMID область разделяемой памяти освобождается

·  Возвращаемое значение

o  В случае успеха 0

o  В случае ошибки -1 (код ошибки заносится в errno)

·  Прототип функции описан в файле sys/shm. h

·  Дополнительная информация http://www. opengroup. org/onlinepubs//functions/shmctl. html

Функция semget

·  int semget(key_t key, int nsems, int semflg);

·  Функция создаёт или открывает существующий семафор (группу семафоров)

·  Параметры

o  nsems – количество создаваемых/открываемых семафоров

o  semflg – флаги, права доступа

·  Возвращаемое значение

o  Неотрицательное целое число – идентификатор семафора, ассоциированный с ключом key

o  В случае ошибки -1 (код ошибки заносится в errno)

·  Прототип функции описан в файле sys/sem. h

·  Дополнительная информация http://www. opengroup. org/onlinepubs//functions/semget. html

Функция semop

·  int semop(int semid, struct sembuf *sops,
size_t nsops);

·  Функция предназначена для изменения значения семафора

·  Параметры

o  semid – идентификатор семафора

o  sops – массив структур

o  nsops – количество структур nsops в массиве

·  Структура sembuf

o  sem_num – номер семафора

o  sem_op – операция семафора

o  sem_flg – флаги операции

·  Прототип функции описан в файле sys/sem. h

·  Дополнительная информация http://www. opengroup. org/onlinepubs//functions/semop. html

Функция semctl

·  int semctl(int semid, int semnum,
int cmd, ...);

·  Функция предназначена для управления, установки и чтения значений, инициализации и удаления семафора

·  Параметры

o  semid – идентификатор группы семафоров

o  semnum – номер семафора в группе

o  cmd – задаёт операцию с семафором

o  arg – дополнительный параметр, имеет тип union semun, задаёт дополнительные параметры операции

·  Прототип функции описан в файле sys/sem. h

·  Дополнительная информация http://www. opengroup. org/onlinepubs//functions/semctl. html

Утилиты работы с объектами межпроцессоного взаимодействия

·  ipcs (InterProcess Communication Status) – выводит информацию о блоках разделяемой памяти, семафорах, очередях сообщений

o  Дополнительная информация http://www. opengroup. org/onlinepubs//utilities/ipcs. html

·  ipcrm (InterProcess Communication ReMove) – удаляет блоки разделяемой памяти, семафоры, очереди сообщений (это необходимо при отладке, поскольку в случае некорректного завершения программ указанные объекты остаются в памяти ОС)

o  Дополнительная информация http://www. opengroup. org/onlinepubs//utilities/ipcrm. html

Функция pipe

·  int pipe(int fildes[2]);

·  Позволяет организовать очередь сообщений без использования функций вида msgxxx

o  Отправка и приём сообщений производятся с помощью функций работы с файлами через дескрипторы файлов

o  Созданная очередь не имеет идентификатора

o  Созданную очередь нельзя удалить явно, но очередь автоматически удаляется после закрытия её дескрипторов из всех процессов

·  Дескриптор, хранящийся в fildes[1], предназначен для записи сообщений в очередь

·  Дескриптор, хранящийся в fildes[0], предназначен для чтения сообщений из очереди

·  Прототип функции описан в файле unistd. h

·  Дополнительная информация http://www. opengroup. org/onlinepubs//functions/pipe. html

Функция pthread_mutex_init

·  int pthread_mutex_init(
pthread_mutex_t *restrict mutex,
const pthread_mutexattr_t
*restrict attr);

·  Функция инициализации мьютекса с указателем mutex на основании атрибутов, задаваемых параметром attr (значение NULL – атрибуты по умолчанию)

·  Прототип функции описан в файле pthread. h

·  Дополнительная информация http://www. opengroup. org/onlinepubs//functions/pthread_mutex_init. html

Функция pthread_mutex_lock

·  int pthread_mutex_lock(
pthread_mutex_t *mutex);

·  Функция блокирующего ожидания захвата мьютекса, приостанавливающая текущий поток до момента захвата мьютекса

·  Параметр mutex задаёт указатель на мьютекс

·  Прототип функции описан в файле pthread. h

·  Дополнительная информация http://www. opengroup. org/onlinepubs//functions/pthread_mutex_lock. html

Функция pthread_mutex_trylock

·  int pthread_mutex_trylock(
pthread_mutex_t *mutex);

·  Функция неблокирующего ожидания захвата мьютекса, не приостанавливающая текущий поток до момента захвата мьютекса

·  Параметр mutex задаёт указатель на мьютекс

·  Возвращает 0 в случае успеха

·  Прототип функции описан в файле pthread. h

·  Дополнительная информация http://www. opengroup. org/onlinepubs//functions/pthread_mutex_lock. html

Функция pthread_mutex_unlock

·  int pthread_mutex_unlock(
pthread_mutex_t *mutex);

·  Функция разблокировки мьютекса

·  Прототип функции описан в файле pthread. h

·  Дополнительная информация http://www. opengroup. org/onlinepubs//functions/pthread_mutex_unlock. html

Функция pthread_mutex_destroy

·  int pthread_mutex_destroy(
pthread_mutex_t *mutex);

·  Функция удаляет разблокированный мьютекс, который становится неинициализированным и может быть использован повторно после вызова функции pthread_mutex_init

·  Прототип функции описан в файле pthread. h

·  Дополнительная информация http://www. opengroup. org/onlinepubs//functions/pthread_mutex_destroy. html

Функция pthread_cond_init

·  int pthread_cond_init(
pthread_cond_t *restrict cond,
const pthread_condattr_t
*restrict attr);

·  Функция инициализации условной переменной с указателем cond на основании атрибутов, задаваемых параметром attr (значение NULL – атрибуты по умолчанию)

·  Прототип функции описан в файле pthread. h

·  Дополнительная информация http://www. opengroup. org/onlinepubs//functions/pthread_cond_init. html

Функция pthread_cond_signal

·  int pthread_cond_signal(
pthread_cond_t *cond);

·  Функция отправки события условной переменной, приводящего к разблокированию хотя бы одного потока из числа потоков, ожидающих событие этой условной переменной

·  Прототип функции описан в файле pthread. h

·  Дополнительная информация http://www. opengroup. org/onlinepubs//functions/pthread_cond_signal. html

Функция pthread_cond_broadcast

·  int pthread_cond_broadcast(
pthread_cond_t *cond);

·  Функция отправки события условной переменной, приводящего к разблокированию всех потоков, ожидающих событие этой условной переменной

·  Прототип функции описан в файле pthread. h

·  Дополнительная информация http://www. opengroup. org/onlinepubs//functions/pthread_cond_broadcast. html

Функция pthread_cond_wait

·  int pthread_cond_wait(
pthread_cond_t *restrict cond,
pthread_mutex_t *restrict mutex);

·  Функция разблокирует мьютекс mutex и переводит текущий покток в состояние ожидания условной переменной cond

·  Операции разблокирования мьютекса и перевода потока в состояние ожидания осуществляются атомарно

·  Прототип функции описан в файле pthread. h

·  Дополнительная информация http://www. opengroup. org/onlinepubs//functions/pthread_cond_wait. html

Функция pthread_cond_destroy

·  int pthread_cond_destroy(
pthread_cond_t *cond);

·  Функция уничтожения условной переменной cond, которая может быть использована повторно в вызове функции pthread_cond_init

·  Прототип функции описан в файле pthread. h

·  Дополнительная информация http://www. opengroup. org/onlinepubs//functions/pthread_cond_destroy. html

6  Системы программирования на основе передачи сообщений

6.1  Основы MPI

MPI (Message Passing Interface – интерфейс передачи сообщений) – программный интерфейс (библиотека, API), предоставляющий процессам, выполняющим одну задачу, возможность обмена сообщениями

·  Разработан группой MPI Forum http://www. mpi-forum. org, поддержан академическими кругами (университет Иллинойса) и промышленностью

·  Является одним из первых стандартов систем передачи сообщений

·  Применяется в системах с распределённой памятью, кластерах

·  Основные особенности

o  Высокая производительность

o  Масштабируемость

o  Переносимость (портируемость)

·  Для упрощения переносимости используется языково-независимая спецификация (Language-independent specification – LIS)

Стандарты MPI

·  MPI-1 (≈128 функций)

o  Передача и получение сообщений между отдельными процессами (отправка сообщений указанному процессу)

o  Коллективные взаимодействия процессов (отправка сообщений нескольким получателям)

o  Взаимодействия между процессами в группах процессов (сообщения, синхронизация)

o  Виртуальные топологии процессоров

·  MPI-2 (≈500 функций)

o  Включает MPI-1

o  Динамическое порождение процессов и управление процессами (процессы допустимо создавать в процессе работы программы)

o  Односторонние коммуникации (обмены Get/Put)

o  Поддержка операций параллельного файлового ввода и вывода

o  Расширенные коллективные операции (процессы могут выполнять коллективные операции не только внутри одного коммуникатора, но и в рамках нескольких коммуникаторов)

Общая структура MPI-программы

·  Подключение необходимых библиотек (заголовочных файлов, областей имён)

·  Инициализация

o  MPI_Init

o  Параметры – аргументы командной строки

o  До инициализации не рекомендуется изменять состояние процесса, например, осуществлять ввод/вывод

·  Использование

·  Деинициализация

o  MPI_Finalize

o  Перед денициализацией все обмены должны быть завершены – это забота программиста

o  После деинициализации количество работающих процессов не определено – лучше завершить работу программы

o  Заново инициализировать MPI нельзя

Процессы в MPI

·  Для запуска приложений MPI используется специальная утилита (mpiexec)

·  Для обеспечения функционирования MPI приложений на распределённых архитектурах используются службы (демоны) MPI

·  Каждый MPI-процесс имеет свой номер – ранг процесса, используемый для его идентификации

·  Первый запущенный процесс имеет ранг 0

6.1.1  Сообщения

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

·  Попарные (point-to-point, двухточечные) – сообщение отправляется от одного процесса к другому

o  Используется для неструктурированных и локальных взаимодействий

·  Коллективные – сообщения отправляется и/или принимаются несколькими процессами

o  Эффективней множества попарных сообщений за счёт учёта архитектуры вычислительной системы

Виды сообщений по типам вызовов

·  Синхронные – процесс-отправитель сообщения ожидает готовности процесса-получателя принять сообщение

·  Асинхронные – процесс-отправитель сообщения не ждёт готовности процесса-получателя, доставка сообщения обеспечивается внутренним буфером MPI

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

·  Последние реализации MPI используют асинхронные сообщения для попарных обменов

Основные составляющие сообщения

·  Блок данных

·  Метаинформация блока данных

o  Тип данных – в MPI есть собственные типы данных, являющиеся реализацией канонических типов данных

o  Размер данных

·  Информация об отправителе и получателе сообщения

o  Коммуникатор (группа) – рассматривается в следующей части

o  Ранг отправителя

o  Ранг получателя

·  Тег сообщения – целое число от 0 до 32767

o  Используется для фильтрации сообщений получателем или определения порядка следования сообщений

o  Отсутствует в коллективных обменах сообщениями

Виды коллективных сообщений

·  Широковещательная передача – передача сообщения от одного процесса сразу всем процессам

·  Распределение данных – отправка сообщений от одного процесса нескольким процессам

·  Сбор данных – получение сообщений одним процессом от нескольких процессов

·  Обмен с барьером – ожидание заданного количества процессов

·  Операции приведения – разновидность сбора данных, при которой полученные данные становятся доступными всем процессам, из которых осуществлялся сбор данных

·  Операции сканирования – разновидность операции приведения, после выполнения которой данные процессов не идентичны, а последовательно передаются между процессами, как при конвейерной обработке

6.1.2  Коммуникаторы

·  Процессы разделяются на виртуальные группы, внутри которых осуществляются обмены сообщениями

·  Коммуникатор – идентификатор группы взаимодействующих процессов, имеющих возможность обмениваться сообщениями

·  Один и тот же процесс может одновременно входить в несколько коммуникаторов

·  В каждом коммуникаторе процесс будет иметь собственный ранг

Коммуникаторы по умолчанию

·  MPI_COMM_WORLD – содержит все процессы

o  Первый запущенный процесс именно в этом коммуникаторе будет иметь ранг 0

·  MPI_COMM_SELF – содержит только процесс, в контексте которого вызвана функция

·  MPI_COMM_NULL – пустой коммуникатор, не содержит ни одного процесса

Назначение коммуникаторов

·  Возможность организации коллективных обменов сообщениями внутри групп процессов

·  Изоляция обменов различного назначения

·  Учёт архитектуры вычислительной системы (кластера) для повышения скорости обмена сообщениями

6.1.3  Обмен сообщениями

Функции отправки и приёма сообщений

·  Попарные сообщения

o  MPI_Send – блокирующая отправка

o  MPI_Recv – блокирующий приём

o  MPI_Isend – неблокирующая отправка

o  MPI_Irecv – неблокирующий приём

·  Коллективные сообщения

o  MPI_Barrier – синхронизация всех процессов в коммуникаторе

o  MPI_Bcast – отправка сообщений всем процессам в коммуникаторе

o  MPI_Reduce – получение сообщений от нескольких процессов в коммуникаторе

o  MPI_Abort – запрос на завершение всех процессов

Имитация «вызова» функции

·  Порядок выполнения операций

o  Отправка сообщения со входными параметрами из вызывающего процесса

o  Приём сообщения в вызываемом процессе

o  Обработка информации

o  Отправка сообщения с результатом выполнения функции в вызывающий процесс

o  Приём сообщения в вызывающем процессе

·  Недостатки

o  Большое количество кода

o  Невысокое быстродействие

o  Трудность отладки, особенно при переходе от синхронных сообщений к асинхронным

Попарный обмен сообщениями

·  Предусмотрена функция обмена сообщениями, обеспечивающая имитацию «вызова», MPI_Sendrecv

o  Эта функция принимает сообщения от MPI_Send

o  Сообщения этой функции принимаются с помощью MPI_Recv

·  Функция MPI_Sendrecv_Replace позволяет использовать один буфер данных для отправки и получения сообщений

Ввод и вывод информации

·  Есть реализации MPI, в которых всем процессам разрешается выводить информацию на консоль

o  Данные «перемешиваются»

·  Есть реализации MPI, в которых на консоль разрешается выводить информацию только процессу с рангом 0 в коммуникаторе MPI_COMM_WORLD

·  Есть реализации MPI, в которых ввод/вывод осуществляется только посредством файлов

o  Наиболее характерно для распределённых систем

o  Рекомендуется каждому процессу назначать собственный файл для ввода/вывода

Реализации MPI

·  MPICH – MPI Chameleon – одна из первых реализаций MPI (http://www. mcs. anl. gov/research/projects/mpich2/)

o  Бесплатна

o  Легко переносится на различные платформы

o  Работает на Unix, Linux и Windows NT

·  IntelMPI – коммерческая реализация MPI от Intel для Linux и Windows NT (http://software. /en-us/articles/intel-mpi-library/)

·  Open MPI – бесплатная реализация MPI с открытым кодом (http://www. open-mpi. org)

·  mpiJava – реализация MPI для Java в рамках проекта HPJava (http://www. hpjava. org/mpiJava. html)

·  Microsoft MPI – реализация MPI от Microsoft в составе HPC Server (http://blogs. /b/ru-hpc/archive/2009/12/28/ms-mpi-visual-studio-windows-hpc-server. aspx)

·  – бесплатная реализация MPI для. NET, выполненная университетом Индинаны (http://www. osl. iu. edu/research//)

·  Дополнительная информация http://ru. wikipedia. org/wiki/Message_Passing_Interface#.D0.A0.D0.B5.D0.B0.D0.BB. D0.B8.D0.B7.D0.B0.D1.86.D0.B8.D0.B8_MPI

7  Новые средства многопоточного программирования

Недостатки традиционной реализации многопоточности

·  Традиционные средства императивных языков программирования рассчитаны на однопоточное выполнение инструкций

·  Расширение возможностей языков программирования по поддержке многопоточности обеспечивается за счёт применения готовых библиотек и API операционных систем

o  Предоставляются низкоуровневые примитивы, ориентированные на реализацию потоков и их синхронизацию, но не распараллеливание обычных алгоритмов

o  Реализация и отладка даже несложных алгоритмов в многопоточных программах становится трудной задачей

o  Требуется значительное время на обеспечение приемлемого качества кода

o  Необходимо самостоятельно управлять количеством потоков с учётом аппаратных возможностей

o  Разработанный код трудно обслуживать и использовать повторно

Современные тенденции развития поддержки многопоточности

·  Добавление структур данных, обеспечивающих параллельную обработку

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

·  Использование алгоритмов распараллеливания, предусматривающих разделение задачи на множество небольших частей (мелкозернистый параллелизм)

·  Дополнительная информация http://www. /developerworks/ru/library/j-jtp11137/

Развитие поддержки многопоточности в .NET

·  Библиотека Parallel Extensions

o  Входит в состав. NET 4

o  Параллелизм при декларативной обработке данных

§  Параллельный интегрированный язык запросов (PLINQ) – параллельная реализация LINQ

o  Параллелизм при императивной обработке данных

§  Параллельные варианты основных итеративных операций над структурами данных (циклы for и foreach)

o  Параллелизм на уровне задач

§  Высокоуровневая работа с пулом рабочих потоков

§  Использование легковесных задач

§  Встроенный в библиотеку планировщик задач обеспечивает диспетчеризацию и управление исполнением легковесных задач с учётом доступных вычислительных ядер, и единообразный механизм обработки исключений

·  Механизм работы пула потоков и планировщика задач был переработан

·  Дополнительная информация http://blogs. /b/pfxteam/ http://msdn. /en-us/library/dd460693.aspx

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5