Продукт
Традиционное и параллельное программирование для систем с общей памятью (многопроцессорных и/или многоядерных компьютеров)
Область применения
Предлагается новая конструкция — процедура с повторным входом.
Используется несколько нестандартный стиль записи ряда обычных
и стадийных алгоритмов, сводимых к порождению серии схожих подзадач
с планированием последовательности их решения в соответствии
со стратегиями постановки в очередь, стек или дек.
Вводится разметка для маркировки потенциально параллельных фрагментов.
Концепция
Повышение эффективности программирования
Новые технологии параллельного
и традиционного программирования int CurLevel = 1; 10 операторов 19 операторов Пример. Классический алгоритм обхода дерева по уровням Применим
void _Out(TreeNode * Cur) {
list
int LevelNodes = 1;
int NextLevelNodes = 0;
Queue.push_back(Cur);
while (!Queue.empty()) {
Cur = Queue.front();
Queue.pop_front();
cout<
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;
}
}
}
reenterable Out(TreeNode * Cur, int Level) {
if (Level!=CurLevel) {
CurLevel = Level;
cout<<"\n";
}
cout<
if (Cur->Left)
plan_last(Cur->Left,Level+1);
if (Cur->Right)
plan_last(Cur->Right,Level+1);
}
технологию
Упрощение конструкций параллельного программирования
Новые технологии параллельного
и традиционного программирования chain Stage0(int N, double * V1, double * V2, double * V3, double * R) throw(double * V1, double MUL, double * R) { 2 конструкции 5 конструкций Пример. Конвейеризация расчета векторного выражения X1+X2*X3 Применим
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
#pragma omp atomic
NLOCK++;
#pragma omp flush(NLOCK)
}
break;
case 1:
for (i=0; i<5; i++) {
while (NLOCK for (j=VEC_SIZE-1; j>=0; j--)
R[i][j] = X1[i][j]+R[i][0];
}
}
for (int i=0; i
for (int j=0; j
throw_last(V1,MUL,R);
}
}
chain Stage1(double * V1, double MUL, double * R) {
for (int j=0; j
}
…
plan_parallel_chain(0, Stage0(5,(double *)X1,(double *)X2,(double *)X3,(double *)R), Stage1(NULL,0,NULL));
технологию
Фото кристалла многоядерного процессора: журнал «MOBI», 3/2009
Число ядер
Повышение эффективности кодирования и распараллеливания ряда алгоритмов:
Сокращение времени на их программирование.
Минимизация количества и упрощение конструкций, необходимых для распараллеливания расчета, в сравнении с OpenMP.
Уменьшение количества порождаемых параллельных потоков.
Устранение некоторых потенциальных логических ошибок, связанных с избыточностью кода
Эффект от внедрения
Основные сегменты рынка
Продукт не имеет прямых аналогов.
Косвенные аналоги, реализующие встроенные средства распараллеливания:
T-технологии;
OpenMP (компиляторы GNU, Microsoft);
DVM, HPC, MC#.
Новые технологии параллельного
и традиционного программирования
Конкуренция
Самостоятельный продукт (препроцессор + отладчик);
В составе уже существующих профессиональных компиляторов C++.
Возможности реализации технологии
Риски
Разработана и испытана alfa-версия транслятора.
Предполагаются творческая проработка и совершенствование предложенных технологий (возможно привлечение партнера для завершения НИОКР).
Необходимы инвестиции (300 тыс. руб) для разработки полноценных и качественных коммерческих версий транслятора и отладчика.
Вывод системы на рынок
Маркетинговые исследования
Рекламные кампании
Участие в выставках
Бесплатные демонстрационные версии
Состояние проекта и перспективы
Новые технологии параллельного
и традиционного программирования
Если не удалось найти и скачать презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:
Email: Нажмите что бы посмотреть