'

новыЕ технологиИ параллельного и традиционного программирования

Понравилась презентация – покажи это...





Слайд 0

новыЕ технологиИ параллельного и традиционного программирования


Слайд 1

Новые технологии параллельного и традиционного программирования Новая технология программирования с применением процедур с повторным входом. Разработанa alfa-версия транслятора C++, реализующего технологию Продукт Традиционное и параллельное программирование для систем с общей памятью (многопроцессорных и/или многоядерных компьютеров) Область применения Предлагается новая конструкция — процедура с повторным входом. Используется несколько нестандартный стиль записи ряда обычных и стадийных алгоритмов, сводимых к порождению серии схожих подзадач с планированием последовательности их решения в соответствии со стратегиями постановки в очередь, стек или дек. Вводится разметка для маркировки потенциально параллельных фрагментов. Концепция


Слайд 2

Технология упрощает и делает более логичной запись некоторых алгоритмов, обычно использующих хорошо известные типы данных «стек» и «очередь», в программном коде. Отдельные фрагменты программы сокращаются в 1,5-2 раза. Повышение эффективности программирования void _Out(TreeNode * Cur) { list<TreeNode *> Queue = list<TreeNode *>(); int LevelNodes = 1; int NextLevelNodes = 0; Queue.push_back(Cur); while (!Queue.empty()) { Cur = Queue.front(); Queue.pop_front(); cout<<Cur->Data()<<" "; if (Cur->Left) { Queue.push_back(Cur->Left); NextLevelNodes++; } if (Cur->Right) { Queue.push_back(Cur->Right); NextLevelNodes++; } if (--LevelNodes==0) { cout<<"\n"; LevelNodes = NextLevelNodes; NextLevelNodes = 0; } } } Новые технологии параллельного и традиционного программирования int CurLevel = 1; reenterable Out(TreeNode * Cur, int Level) { if (Level!=CurLevel) { CurLevel = Level; cout<<"\n"; } cout<<Cur->Data()<<" "; if (Cur->Left) plan_last(Cur->Left,Level+1); if (Cur->Right) plan_last(Cur->Right,Level+1); } 10 операторов 19 операторов Пример. Классический алгоритм обхода дерева по уровням Применим технологию


Слайд 3

Алгоритмы записываются более компактно и естественно по сравнению с OpenMP 2.0. На поверхность «выносится» скрытый параллелизм алгоритмов. Порождается меньшее количество потоков исполнения при том же количестве конструкций, что и при использовании OpenMP 3.0 Упрощение конструкций параллельного программирования int NLOCK = 0; #pragma omp parallel num_threads(2) private(i) shared(NLOCK) switch (omp_get_thread_num()) { case 0: for (i=0; i<5; i++) { R[i][0] = 0.0; for (j=0; j<VEC_SIZE; j++) R[i][0] += X2[i][j]*X3[i][j]; #pragma omp atomic NLOCK++; #pragma omp flush(NLOCK) } break; case 1: for (i=0; i<5; i++) { while (NLOCK<i) _Yield(); for (j=VEC_SIZE-1; j>=0; j--) R[i][j] = X1[i][j]+R[i][0]; } } Новые технологии параллельного и традиционного программирования chain Stage0(int N, double * V1, double * V2, double * V3, double * R) throw(double * V1, double MUL, double * R) { for (int i=0; i<N; i++, V1+=VEC_SIZE, R+=VEC_SIZE) { double MUL = 0.0; for (int j=0; j<VEC_SIZE; j++) MUL += (*V2++)*(*V3++); throw_last(V1,MUL,R); } } chain Stage1(double * V1, double MUL, double * R) { for (int j=0; j<VEC_SIZE; j++) R[j] = V1[j]+MUL; } … plan_parallel_chain(0, Stage0(5,(double *)X1,(double *)X2,(double *)X3,(double *)R), Stage1(NULL,0,NULL)); 2 конструкции 5 конструкций Пример. Конвейеризация расчета векторного выражения X1+X2*X3 Применим технологию


Слайд 4

Ускорение расчета на четырех ядрах (2*Opteron 270, 2 ГГц) Новые технологии параллельного и традиционного программирования Фото кристалла многоядерного процессора: журнал «MOBI», 3/2009 Число ядер Повышение эффективности кодирования и распараллеливания ряда алгоритмов: Сокращение времени на их программирование. Минимизация количества и упрощение конструкций, необходимых для распараллеливания расчета, в сравнении с OpenMP. Уменьшение количества порождаемых параллельных потоков. Устранение некоторых потенциальных логических ошибок, связанных с избыточностью кода Эффект от внедрения


Слайд 5

Фирмы, специализирующиеся на разработке программного обеспечения; Независимые разработчики программного обеспечения; Научные центры, ориентированные на работу с многопроцессорными системами; Учебные заведения. Основные сегменты рынка Продукт не имеет прямых аналогов. Косвенные аналоги, реализующие встроенные средства распараллеливания: T-технологии; OpenMP (компиляторы GNU, Microsoft); DVM, HPC, MC#. Новые технологии параллельного и традиционного программирования Конкуренция Самостоятельный продукт (препроцессор + отладчик); В составе уже существующих профессиональных компиляторов C++. Возможности реализации технологии


Слайд 6

1. Маркетинговые риски. 2. Кадровые риски. Необходима высокая квалификация разработчиков. 3. Риск недостаточного спроса. Технология предполагает несколько нестандартный стиль программирования, что может встретить первоначальное недопонимание преимуществ подхода у программистов обычной квалификации. Риски Разработана и испытана alfa-версия транслятора. Предполагаются творческая проработка и совершенствование предложенных технологий (возможно привлечение партнера для завершения НИОКР). Необходимы инвестиции (300 тыс. руб) для разработки полноценных и качественных коммерческих версий транслятора и отладчика. Вывод системы на рынок Маркетинговые исследования Рекламные кампании Участие в выставках Бесплатные демонстрационные версии Состояние проекта и перспективы Новые технологии параллельного и традиционного программирования


×

HTML:





Ссылка: