PARALLEL.RU

Дискуссионный клуб по параллельным вычислениям
Текущее время: 20 фев 18 4:52

Часовой пояс: UTC + 4 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
СообщениеДобавлено: 12 мар 11 23:16 
Не в сети

Зарегистрирован: 12 мар 11 15:35
Сообщения: 2
В современных массовых операционных системах (за некоторым исключением) поддержка массового параллелизма с десятками логических процессоров реализована весьма неэффективно. Это, как мне кажется, является следствием последовательного создания объектов ядра, таких как мьютексы, события, потоки. Например, для создания сотни потоков с одной функцией требуется сто раз вызвать соответствующую системную функцию (например, для WinAPI это CreateThread(...)). Таким образом, переключение контекста происходит 200 раз, что является очень большой потерей времени. Такое последовательное создание объектов, по мнению автора, берет свое начало из технологии клиент-сервер, где преобладали операции ввода-вывода, и новый поток создавался по мере прихода запроса. Для этого режима работы такой подход работает очень хорошо и достаточно эффективно. В вычислительной области, где требуется параллельная обработка больших объемов хранимых в оперативной памяти данных, такой подход, наоборот, создает много накладных расходов. Поэтому, для более полной поддержки параллельных вычислений необходимо включить в состав операционной системы функции, позволяющие управлять (создавать, изменять состояние, уничтожать) множество объектов.
Ссылка ниже ведет на текстовый документ Google Docs на английском языке, представляющий собой разработанный автором прототип библиотеки (заголовочный файл для языков C/C++) расширения WinAPI для параллельных вычислений, позволяющей управлять множеством объектов ядра одним системным вызовом:
https://docs.google.com/document/d/1HRCeRpFSbuR4Bk9uEsaaKBO-DW1GPlMK9B8QF7MNpcs/edit?hl=ru
Там же дан простой пример умножения квадратных матриц, показывающий отличие в использовании стандартных и предложенных в данной библиотеке системных вызовов.
Автор представил возможное расширение только для WinAPI, однако подобные функции могут быть реализованы и в других операционных системах (например, на Linux).
Предлагаю публично обсудить перспективность данной идеи, а также способы ее практической реализации.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 16 мар 11 3:52 
Не в сети

Зарегистрирован: 12 янв 06 11:26
Сообщения: 98
Откуда: Хабаровск, ВЦ ДВО РАН
vlad2048 писал(а):
Таким образом, переключение контекста происходит 200 раз, что является очень большой потерей времени..

А что мешает использовать пул потоков?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 16 мар 11 23:38 
Не в сети

Зарегистрирован: 12 мар 11 15:35
Сообщения: 2
Пул потоков - это очень хорошая идея, которая экономит время на создание и уничтожение потоков. Однако, как я понял из официального описания Thread Pool API, задания помещаются в очередь последовательно, а не параллельно. К тому же, я не нашел функции, которая помещает произвольное число однотипных заданий (например, обработать сто строк матрицы). И если требуется приостановить или возобновить сто потоков, то тогда групповые операции будут очень эффективны. Даже при использовании того же пула потоков. Особенно, если в программе это выполняется довольно часто (например, если организована последовательная подготовка данных для их параллельной обработке, где на основании полученного результата выбирается та или иная группа данных или алгоритм обработки - т.е. различные виды анализа данных). Если такая возможность будет предоставляться ОС, параллельное программирование действительно сложных задач станет существенно проще (параллельная структура задачи будет в полной мере отражена в ее реализации).

_________________
Владислав Шляпников


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Часовой пояс: UTC + 4 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB