Текущая версия |
Ваш текст |
Строка 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}}
| + | |