Информационные технологии
Язык программирования Пифагор предназначен для разработки параллельных программ. В настоящее время ведутся работы по эмуляции функционально-параллельных программ на существующих кластерных системах, а также по их преобразованию в программы для существующих параллельных архитектур.
Рассмотрим пример скалярного произведения двух векторов одинаковой длины. Аргументом функции VVMult является двухэлементный список данных: ((x1, x2, ... xn), (y1, y2, ... yn)). Функциональная программа на языке Пифагор будет организована следующим образом:
// Функция, возвращающая произведение двух векторов
VVMult << funcdef Param { return << Param :# :[] :* :(.) }; //Пример аргумента: ((1,2),(4,5))
Параллельное умножение элементов транспонированного вектора может рассматриваться как реализация бинарной древовидной свертки, что позволяет заменить функцию над параллельным списком аргументов [x1, x2, ... , xn]:F, функцией ForAll, использующей правую рекурсию, которая может легко заменяется итерацией.
ForAll << funcdef Param // аргумент Param содержит 2 параметра
После внесенных изменений функция _VVMult будет иметь следующий вид:
Подобным образом можно осуществить и замену конструкций, реализующих массовый параллелизм.
Примечание. Тезисы докладов публикуются в авторской редакции
© 1996-2000, Институт вычислительных технологий СО РАН, Новосибирск
{ Len<
( {p:[]}, // при Len<1 возвращается значение p
{p:[]:op}, // при Len=1 возвращается результат применения предопределенной функции op к списку p
{ block{ [p:1:op,(p:-1,op):ForAll:[]]>>break; } } // при Len>1 рекурс. вызов функции ForAll для обработки списка p
):.
};
VVMultRecurs << funcdef Param { return<<(Param:#,*):ForAll:(.); }
Ваши комментарии
Обратная связь
[Головная страница]
[Конференции]
© 1996-2000, Сибирское отделение Российской академии наук, Новосибирск