Числа Фиббоначи являются классическим тестом для систем динамического распараллеливания программ. Записанные таким образом, чтобы порождать максимальное количество параллельных ветвей исполнения, они быстро заполняют все доступные вычислительные процессы гранулами с различной тежестью счета.
Текст программы достаточно очевидным образом соответствует этому комментарию.
Заметим также, что числа Фиббоначи были запущены в кластере на экспериментальном Т-расширении языка Fortran. Полезность и востребованность языка TFortran будет зависеть от того, сколь много разработчиков захотят иметь такой язык для своих задач.
C TFUN FIB C TPTR K C TOUT N C TVAL N1,N2,K1,K2 SUBROUTINE FIB(K,N) IF (K .LT. 2) THEN N = K ELSE K1 = K-1 K2 = K-2 CALL FIB(K1,N1) CALL FIB(K2,N2) N = N1 + N2 ENDIF END C TVAL N,N0 N0 = 15 CALL FIB(N0,N) CALL OUT(N) END
Тест NASA EP был адаптирован для Т-системы и показывает сравнимые характеристики с оригинальным, статически распараллеленным вариантом. Это вполне логично, так как алгоритм теста требует достаточно много счета и очень немного обменов между узлами, а система grace достаточно успешно и оперативно перераспределяет работу между узлами для такого вида программ, где гранулы порождаются в процессе рекурсивного счета.
Обмен данными производится наиболее простым образом: входные параметры передаются как обычная структура (по значению), а выходное значение возвращается через "удаленный" указатель на узел, производящий вызов.
Текст программы достаточно очевидным образом соответствует этому комментарию.
На примере анимации фракталов демонстрируется удобство сочетания вычислительного кода, реализованного на языке TC, и кода визуализации, реализованного, в данном случае, на языке C++.
Как видно из текстов примера, нет необходимости иметь отдельный front-end для визуализационной компоненты, а код на другом языке можно разместить в других файлах и собрать приложение одной командой компилятора tcc.
Макроопределение TCALL используестя всякий раз, когда идет обращение к функциям графической библиотеки gtk, при этом указывается, что фубкция должна исполняться на фиксированом (нуливом) узле в системном процессе.
В данном примере также демонстрируестя использование нестандартных расширений компилятора gcc, а именно встроенной поддержки комплексных числел.
Содержательный элемент здесь следующий: все конструкции, не распознаваемые компилятором языка TC (подобные расширения, конструкции типа ASM), можно вынести в отдельный файл, и включать его в текст TC-программы директивой '#include ' с угловыми скобками (см. также описание языка TC).
В тексте параллельного алгоритма ярко видно, что запуск отдельный гранул на счет и ожидание их результатов делается не в одном, а в двух последовательных циклах. Эти два цикла нельзя сливать в один, поскольку в противном случае сразу же за порождением параллельным вызовом будет ожидание резулатата его работы, и параллелизм исчезнет как таковой.
Нужно отметить, что для запуска в кластере зачастую полезно иметь статически слинкованный испольяемый файл, поскольку в случае использования динамических библиотек их наличие потребуется на всех узлах, даже если функции этих библиотек вызываются лишь на одном из узлов.
Метод Гаусса для решения системы линейных уравнений над полем Z2 имеет отличительные особенности перед реализацией подобного алгоритма для поля вещественных чисел.
Прежде всего, матрица представлена битами, а не двойными словами, и поэтому операции над каждой строкой происходят на два порядка быстрее.
Использование алгоритма, работающего с горизонтальными фрагментами матрицы с голосованием для каждого столбца приводит к слишком короткому промежутку счетного времени между обменами, вследствие чего эффективность параллельного счета очень сильно снижается.
Экспериментальная версия алгоритма, в которой сделана попытка увеличить время счета между обменами, использует стратегию "спекулятивного" продвижения по каждому фрагмену матрицы, при которой каждый процесс начинает работать над горизонтальным фрагментом матрицы и приводить его к "ладейному" виду.
Обнаружив (в какой-то из моментов) невозможность дальнейшего продвижения по столбам слева направо, процесс производит обращение к глосователю (фиксированному массиву строк, которые выбраны в качестве главных строк результирующей матрицы треугольного вида) и заканчивает обработку сразу нескольких столбцов. Такой цикл повторяется до тех пор, пока в каждом фрагменте каждая строка не будет признана голосователем "победившей".
В программе существенным образом используется работа с обЪектом "голосователь", что является выходом за пределы чисто функционального стиля программирования.
Список примеров постоянно расширяется. Выше были перечисленны лишь примеры, входящие в дистрибутив.
В настоящий момент под grace успешно перенесены алгоритм параллельной трассировки лучей, еще один вариант фракталов, и алгоритм вычисления аттракторов получинамических систем (аттрактор Лоренца).