вызовы MPI функций из разных потоков
От: _Vasilyev Ниоткуда  
Дата: 12.08.10 05:30
Оценка:
Всем привет! Ситуация следующая:

На каждом mpi-процессе основным потоком запускается ещё 2 потока. Основной поток приложения выполняет вычисления, второй поток выполняет только прием данных, третий только отправку. Вычисления на основном потоке ведутся порциями, при наработке очередной порции данных выполняется их отправка третьим потоком. Т.е. здесь происходит отправка по событию. Второй поток работает всё время в режиме ожидания. По буферам выделяемым в программе пересечения между ними нет.
Одновременно в процессе из разных потоков могут вызываться только функции MPI_Isend(MPI_Bsend), MPI_Irecv(MPI_Recv). Оба потока(2 и 3) работают на одном коммуникаторе. Коммуникатор создавал дублируя основной коммуникатор процесса(MPI_Comm_dup). Всё.

Проблема: запуск падает и есть соответственно два предположения. 1) вызовы mpi-функций на одном коммуникаторе из нескольких потоков одновременно не безопасны. 2) ошибка не связанная с пунктом 1.

Я не нашел в стандарте упоминания является ли вызов из разных потоков mpi-функций безопасным по требованию или зависит от реализации, или безопасно ли работать на одном коммуникаторе из разных потоков — пока это главный вопрос.

Можно реализовать по другому, но тут вопрос принципа — хотелось бы понять в чем дело.

Такая вот проблема. Если есть какие соображения поделитесь пожалуйста.
Re: вызовы MPI функций из разных потоков
От: Pavel Dvorkin Россия  
Дата: 12.08.10 16:32
Оценка: +1
Здравствуйте, _Vasilyev, Вы писали:

_V>Я не нашел в стандарте упоминания является ли вызов из разных потоков mpi-функций безопасным по требованию или зависит от реализации, или безопасно ли работать на одном коммуникаторе из разных потоков — пока это главный вопрос.


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

А что за стандарт такой ? Надо просто смотреть документацию по этой библиотеке.
With best regards
Pavel Dvorkin
Re[2]: вызовы MPI функций из разных потоков
От: _Vasilyev Ниоткуда  
Дата: 13.08.10 08:18
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:


PD>Не имею ни малейшего представления о mpi, но отмечу, что функции редко бывают потокобезопасными — гораздо чаще обеспечение ее перекладывается на вызовы. И это правильно, потому что ничего бесплатного не бывает, а потокобезопасность не всем нужна.


Так то оно так, сам всегда исхожу из этого предположения.

PD>А что за стандарт такой ? Надо просто смотреть документацию по этой библиотеке.


MPI — это интерфейс распараллеливания программ основанный на обмене сообщениями между процессами. На эту штуку есть стандарт, ну типа C, C++ или OpenMP. Под этот стандарт есть различные реализации. Знаю есть у microsoft, intel, есть открытый проект mpich2. Вот.
Re: вызовы MPI функций из разных потоков
От: Antikrot  
Дата: 15.08.10 18:42
Оценка:
Здравствуйте, _Vasilyev, Вы писали:

_V>Я не нашел в стандарте упоминания является ли вызов из разных потоков mpi-функций безопасным по требованию или зависит от реализации, или безопасно ли работать на одном коммуникаторе из разных потоков — пока это главный вопрос.

см. документацию по MPI_Init_thread. кратко — можно, если реализация поддерживает.
Re[2]: вызовы MPI функций из разных потоков
От: _Vasilyev Ниоткуда  
Дата: 16.08.10 15:13
Оценка:
Здравствуйте, Antikrot, Вы писали:

A>см. документацию по MPI_Init_thread. кратко — можно, если реализация поддерживает.


Спасибо! Как то я пропустил этот момент.
Re[2]: вызовы MPI функций из разных потоков
От: _Vasilyev Ниоткуда  
Дата: 24.08.10 18:16
Оценка:
Здравствуйте, Antikrot, Вы писали:

A>см. документацию по MPI_Init_thread. кратко — можно, если реализация поддерживает.


Спасибо ещё раз! Именно то что мне не хватало. Теперь всё в порядке.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.