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