Intel Parallel Programming Professional (Introduction)
Покупка
Тематика:
Программирование на C и C++
Издательство:
ИНТУИТ
Авторы:
Гергель Виктор Павлович, Воеводин Валентин Васильевич, Сысоев Александр Владимирович, Баркалов К. А., Линев А. В., Кудин Анатолий Владимирович, Кустикова В. Д., Козинов Е. А., Сиднев А. А., Мееров И. Б.
Год издания: 2016
Кол-во страниц: 411
Дополнительно
В рамках курса рассматриваются математические основы параллельных вычислений, архитектурные аспекты параллелизма, поддержка параллелизма в ОС, основные технологии параллельных вычислений. Рассматриваются основные ошибки, возникающие при разработке параллельных программ, приводятся способы их решения с помощью инструментов Intel. Рассматривается использование полученных знаний на примере классических разделов численных методов.
Решение огромного количества задач стало возможным благодаря повсеместному внедрению многоядерных архитектур, а также возрастанию числа вычислительных кластеров. Вычислительные мощности растут, одни задачи решаются, появляются другие, более сложные и трудоемкие. Для решения задач, в которых требуется грамотно использовать потенциал платформы, используемой для их решения, необходимы квалифицированные специалисты, которые обладали бы знаниями как в прикладных областях, так и в области параллельного программирования.
Тематика:
ББК:
УДК:
ОКСО:
- Среднее профессиональное образование
- 09.02.03: Программирование в компьютерных системах
- 09.02.07: Информационные системы и программирование
- ВО - Бакалавриат
- 03.03.02: Прикладная математика и информатика
- 09.03.01: Информатика и вычислительная техника
ГРНТИ:
Скопировать запись
Фрагмент текстового слоя документа размещен для индексирующих роботов
Intel Parallel Programming Professional (Introduction) 2-е издание, исправленное Гергель В.П. Воеводин В.В. Сысоев А.В. Баркалов К.А. Линев А.В. Кудин А.В. Кустикова В.Д. Козинов Е.А. Сиднев А.А. Мееров И.Б. Национальный Открытый Университет “ИНТУИТ” 2016 2
Intel Parallel Programming Professional (Introduction)/ В.П. Гергель , В.В. Воеводин, А.В. Сысоев, К.А. Баркалов, А.В. Линев, А.В. Кудин , В.Д. Кустикова, Е.А. Козинов, А.А. Сиднев, И.Б. Мееров - М.: Национальный Открытый Университет “ИНТУИТ”, 2016 В рамках курса рассматриваются математические основы параллельных вычислений, архитектурные аспекты параллелизма, поддержка параллелизма в ОС, основные технологии параллельных вычислений. Рассматриваются основные ошибки, возникающие при разработке параллельных программ, приводятся способы их решения с помощью инструментов Intel. Рассматривается использование полученных знаний на примере классических разделов численных методов. Решение огромного количества задач стало возможным благодаря повсеместному внедрению многоядерных архитектур, а также возрастанию числа вычислительных кластеров. Вычислительные мощности растут, одни задачи решаются, появляются другие, более сложные и трудоемкие. Для решения задач, в которых требуется грамотно использовать потенциал платформы, используемой для их решения, необходимы квалифицированные специалисты, которые обладали бы знаниями как в прикладных областях, так и в области параллельного программирования. (c) ООО “ИНТУИТ.РУ”, 2012-2016 (c) Гергель В.П., Воеводин В.В., Сысоев А.В., Баркалов К.А., Линев А.В., Кудин А.В., Кустикова В.Д., Козинов Е.А., Сиднев А.А., Мееров И.Б., 2012-2016 3
Математические основы параллельных вычислений В лекции рассматриваются графовые модели программ, понятия информационной зависимости и избыточности вычислений. Рассматриваются виды параллелизма в зависимости от параллельной структуры программы. Также затрагиваются вопросы эквивалентных преобразований программ. Цель лекции: Лекция направлена на знакомство слушателей математическими основами параллельных вычислений. Презентация к лекции скачать: http://old.intuit.ru/department/supercomputing/ppinteltt/1/1.pdf Видеозапись лекции скачать: http://old.intuit.ru/department/supercomputing/ppinteltt/1/1.zip - (объем - 113 МБ). Пользователь: почему? Aijk = Ai-1jk + Bjk + Bjk, i=1,40; j=1,40; k=1,1000 Cray C90, пиковая производительность 960 Mflop/s do k = 1, 1000 do j = 1, 40 do i = 1, 40 A(i,j,k) = A(i-1,j,k)+B(j,k)+B(j,k) Производительность: 20 Mflop/s на Cray C90 Aijk = Ai-1jk + Bjk + Bjk, i=1,40; j=1,40; k=1,1000 Cray C90, пиковая производительность 960 Mflop/s do i = 1, 40, 2 do j = 1, 40 do k = 1, 1000 A(i,j,k) = A(i-1,j,k)+2 ∗ B(j,k) A(i+1,j,k) = A(i,j,k)+2 ∗ B(j,k) Производительность: 700 Mflop/s на Cray C90 Умножение матриц: все ли просто? Фрагмент исходного текста: Возможен ли порядок: ( i, k, j) - ?ДА 4
for( i = 0; i < n; ++i) for( j = 0; j < n; ++j) for( k = 0; k < n; ++k) A[i][j] = A[i][j] + B[i][k]∗C[k][j] ( k, i, j) - ?ДА ( k, j, i) - ?ДА ( j, i, k) - ?ДА ( j, k, i) - ?ДА Порядок циклов: ( i, j, k) Почему возможен другой порядок? А зачем нужен другой порядок? (сравнение с порядком ( i, j, k) ) Решение задачи на компьютере 5
Графовые модели программ Будем представлять программы с помощью графов: набор вершин и множество соединяющих их направленных дуг. Вершины: процедуры, циклы, линейные участки, операторы, итерации циклов, срабатывания операторов… Вершины: итерации циклов. for( i = 0; i < n; ++i) { A[i] = A[i – 1] + 2; B[i] = B[i] + A[i]; } Каждая вершина соответствует двум операторам (телу цикла), выполненным на одной и той же итерации цикла. Вершины: срабатывания операторов. for( i = 0; i < n; ++i) { A[i] = A[i – 1] + 2; B[i] = B[i] + A[i]; } Каждая вершина соответствует одному из двух операторов тела данного цикла, выполненному на некоторой итерации. Дуги: отражают связь (отношение) между вершинами. 6
Выделяют два типа отношений: операционное отношение, информационное отношение. Дуги: операционное отношение: Две вершины A и B соединяются направленной дугой тогда и только тогда, когда вершина B может быть выполнена сразу после вершины A. Операционное отношение = отношение по передаче управления. x(i) = a + b(i) (1) y(i) = 2∗x(i) – 3 (2) t1 = y(i)∗ y(i) + 1 (3) t2 = b(i) – y(i)∗a (4) Дуги: информационное отношение: Две вершины A и B соединяются направленной дугой B тогда и только тогда, когда вершина использует в качестве аргумента некоторое значение, полученное в вершине A. Информационное отношение = отношение по передаче данных. x(i) = a + b(i) (1) y(i) = 2∗x(i) – 3 (2) t1 = y(i)∗ y(i) + 1 (3) t2 = b(i) – y(i)∗a (4) Четыре основные модели программ Граф управления программы. 7
Вершины: операторы Дуги: операционное отношение for( i = 0; i < n; ++i) { A[i] = A[i – 1]+ 2; (1) B[i] = B[i] + A[i]; (2) } Информационный граф программы. Вершины: операторы Дуги: информационное отношение for( i = 0; i < n; ++i) { A[i] = A[i – 1]+ 2; (1) B[i] = B[i] + A[i]; (2) } Операционная история программы. Вершины: срабатывания операторов Дуги: операционное отношение for( i = 0; i < n; ++i) { A[i] = A[i – 1]+ 2; (1) B[i] = B[i] + A[i]; (2) } Информационная история программы. Вершины: срабатывания операторов Дуги: информационное отношение for( i = 0; i < n; ++i) { A[i] = A[i – 1]+ 2; (1) B[i] = B[i] + A[i]; (2) } 8
Несколько вопросов… Может ли информационная история некоторого фрагмента программы иметь 100 вершин и ни одной дуги? ДА. for( i = 0; i < 100; ++i) A[i] = B[i] + C[i]∗x; Может ли информационная история некоторого фрагмента программы иметь 67 вершин и 3 дуги? ДА. for( i = 0; i < 63; ++i) A[i] = B[i] + C[i]∗x; x1 = 10; … x2 = x1+1; x3 = x2+2; x4 = x3+3; Может ли информационная история некоторого фрагмента программы иметь 20 вершин и 200 дуг? НЕТ. Модель некоторого фрагмента программы в качестве подграфа содержит следующий граф: Какой моделью могла бы быть исходная модель? 9
Множество графовых моделей программ Какое отношение выбрать для описания свойств программ? Операционное отношение? x(i) = a + b(i) (1) y(i) = 2∗x(i) – 3 (2) t1 = y(i)∗ y(i) + 1 (3) t2 = b(i) – y(i)∗a (4) Информационная структура – это основа анализа свойств программ и алгоритмов. x(i) = a + b(i) (1) y(i) = 2∗x(i) – 3 (2) t1 = y(i)∗ y(i) + 1 (3) t2 = b(i) – y(i)∗a (4) 10