Партнерка на США и Канаду по недвижимости, выплаты в крипто
- 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 для работы с потоками

Рисунок 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 |


