Как создавать параллельные программы, детерминированные по построению? Постановка проблемы и обзор работАннотация. Одна из основных проблем, делающих параллельное про-граммирование ненадежным, трудозатратным, подверженным ошибкам, а программы трудно отлаживаемыми, --недетерминированность процессов и результатов вычислений, когда несколько исполнений одной программы с одинаковыми входными данными могут выдавать разные результаты из-за другого порядка взаимодействия параллельных процессов. В связи с бурным ростом сложности программ для суперкомпьютеров, в последнее десятилетие приобретает популярность и становится всё более актуальной идея параллельных вычислений с детерминированностью, гарантированной языком и системой программирования. В статье анализируется проблема, как сделать параллельное програм-мирование как можно более детерминированным, и дается обзор некоторых подходов к ее решению. Также обсуждается задача разработки системы, предоставляющей возможность писать как детерминированный, так и неде-терминированный код с гарантиями прикладному программисту, что его программа будет детерминированной.Ключевые слова и фразы: модели параллельных вычислений, детерминированные про-граммы, функциональное программирование, объектно-ориентированное программирование.
ВведениеОдна из фундаментальных причин, почему параллельное програм-мирование существенно сложнее последовательного, к которому при-выкли разработчики за десятилетия развития информационных техно-логий, --то, что оно в общем случае недетерминированное: несколько исполнений программы с одними и теми же исходными данными могут давать различные результаты из-за различающегося порядка Исследование выполнено в рамках НИР (госзадание ФАНО РОССИИ, регистра-ционный номер АААА-А17-117040610375-5) (1) .Исследование выполнено при поддержке РФФИ (проект № 16-01-00813-а) (2) .