Редактирование: Параллельная Обработка Данных, 09 лекция (от 30 октября)

Материал из eSyr's wiki.

Перейти к: навигация, поиск

Внимание: Вы не представились системе. Ваш IP-адрес будет записан в историю изменений этой страницы.

Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.

Текущая версия Ваш текст
Строка 1: Строка 1:
-
[[Параллельная Обработка Данных, 08 лекция (от 23 октября)|Предыдущая лекция]] | [[Параллельная Обработка Данных, 10 лекция (от 06 ноября)|Следующая лекция]]
+
== From Ebaums Inc to MurkLoar. ==
-
 
+
We at EbaumsWorld consider you as disgrace of human race.
-
==CRAY C90==
+
Your faggotry level exceeded any imaginable levels, and therefore we have to inform you that your pitiful resourse should be annihilated.
-
Расчет максимальной пиковой производительности.
+
Dig yourself a grave - you will need it.
-
Как ее достичь?
+
-
Максимально задействовать векторные операции. Оп явл векторной. если дл яее выполнения используется векторная команда. Векторная команда выполняетя если компилятору удается выделить одинаковые операции над разными данными.
+
-
Пример:
+
-
 
+
-
DO i = 1,n
+
-
c(i) = A(i)+B(i)
+
-
END DO
+
-
 
+
-
Что бы понять, какие оп можно векторизовать, надо ввести понятие вектора
+
-
Вектор -- упорядоченный набор однотипных данных, все элементы которого размещены в памяти с одинаковым смещением друг относительно друга. Простейшим вектором является одномерный массив
+
-
Векторами являются столбцы и сторки матрицы.
+
-
Встает задача поиска в программе векторизуемых участков. Необходимо отсутствие зависимости по данным.
+
-
 
+
-
DO i = 1,n
+
-
A(i) = funct (A(i), B(i))
+
-
END DO
+
-
 
+
-
В креях были предусмотрены спец комментарии, говорящие про такие куски есть ли в них зависимости или нет.
+
-
Операции программы
+
-
*векторизуемые
+
-
**компилятор может векторизовать
+
-
**компиятор не может векторизовать
+
-
*невекторизуемые
+
-
Есть программа состоит из частей, часть которых можно векторизовать, а часть нельзя, то в действие вступает знакомый нам закон Амдала.
+
-
Итак, мешающие факторы
+
-
*Закон Амдала
+
-
*разгон конвейера
+
-
*секционирование векторных операций.
+
-
 
+
-
На хорошем цикле
+
-
 
+
-
DO i = 1,N
+
-
A(i)= B(i)*s + C(i)
+
-
END DO
+
-
 
+
-
можно получить
+
-
 
+
-
{|
+
-
!N
+
-
!Mflops
+
-
|-
+
-
|1
+
-
|7
+
-
|-
+
-
|2
+
-
|14
+
-
|-
+
-
|16
+
-
|100.5
+
-
|-
+
-
|128
+
-
|433.7
+
-
|-
+
-
|129
+
-
|364.3 (влияние селекционирования)
+
-
|-
+
-
|256
+
-
|548
+
-
|-
+
-
|257
+
-
|491
+
-
|-
+
-
|8192
+
-
|802
+
-
|}
+
-
 
+
-
*конфликты в памяти. Самое плохое -- шаг по памяти в 64.
+
-
Рассмотрим цикл
+
-
 
+
-
DO i = 1,Nxk, k
+
-
A(i) = B(i)*s + C(i)
+
-
END DO
+
-
 
+
-
Пусть N=1000
+
-
 
+
-
{|
+
-
!k
+
-
!Mflops
+
-
|-
+
-
|1
+
-
|705.2
+
-
|-
+
-
|2
+
-
|444.6
+
-
|-
+
-
|4
+
-
|274.6
+
-
|-
+
-
|64
+
-
|22.6
+
-
|}
+
-
 
+
-
Поэтому с шагом = 64 надо бороться. НО это не всегда просто. Рассмотрим пример
+
-
x[40][40][40]
+
-
 
+
-
DO i=1,n
+
-
DO j = 1,n
+
-
DO k = 1,n
+
-
x(i,j,k)= x(i,j,k)+P(k,i)*Y(k,j)
+
-
END DO
+
-
END DO
+
-
END DO
+
-
 
+
-
x(i,j,k) x(i,j,k+1) находятся в памяти не рядом, а на расстоянии 40*40 = 25*64.То есть производительность будет крайне маленькой. Поэтому лучше описать х как x[41][41][1000]. Небольшое дополнительной памятью мы расплачиваемся за значительно большую производительность.
+
-
Гораздо хуже если есть чтото вроде индексной адресации.
+
-
 
+
-
DO i = 1,n
+
-
x(IX(i)) = ... X(IX(i))
+
-
END DO
+
-
 
+
-
Далеко не всегда с конфликтами по памяти можно разобраться статитически и далеко не всегда компилятор может с этим разобраться.
+
-
* Ограниченная пропускная способность каналов процессор-память.
+
-
 
+
-
DO i=1,n
+
-
A(i) = B(i)*C(i)+D(i)
+
-
END DO
+
-
 
+
-
Надо считать три вектора, а канлов только два.
+
-
 
+
-
{|
+
-
!N
+
-
!Mflops
+
-
|-
+
-
|10
+
-
|57
+
-
|-
+
-
|100
+
-
|278.3
+
-
|-
+
-
|1000
+
-
|435.3
+
-
|-
+
-
|12801
+
-
|445.0
+
-
|}
+
-
 
+
-
*необходимость использования векторных регистров
+
-
 
+
-
{{Параллельная Обработка Данных}}
+
-
{{Lection-stub}}
+

Пожалуйста, обратите внимание, что все ваши добавления могут быть отредактированы или удалены другими участниками. Если вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см. eSyr's_wiki:Авторское право).
НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!

Личные инструменты
Разделы