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

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

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

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

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

Текущая версия Ваш текст
Строка 1: Строка 1:
-
[[Параллельная Обработка Данных, 08 лекция (от 23 октября)|Предыдущая лекция]] | [[Параллельная Обработка Данных, 10 лекция (от 06 ноября)|Следующая лекция]]
 
- 
==CRAY C90==
==CRAY C90==
Расчет максимальной пиковой производительности.
Расчет максимальной пиковой производительности.
Строка 7: Строка 5:
Пример:
Пример:
-
DO i = 1,n
+
DO i = 1,n
-
c(i) = A(i)+B(i)
+
 
-
END DO
+
c(i) = A(i)+B(i)
 +
 
 +
END DO
Что бы понять, какие оп можно векторизовать, надо ввести понятие вектора
Что бы понять, какие оп можно векторизовать, надо ввести понятие вектора
Строка 16: Строка 16:
Встает задача поиска в программе векторизуемых участков. Необходимо отсутствие зависимости по данным.
Встает задача поиска в программе векторизуемых участков. Необходимо отсутствие зависимости по данным.
-
DO i = 1,n
+
DO i = 1,n
-
A(i) = funct (A(i), B(i))
+
 
-
END DO
+
A(i) = funct (A(i), B(i))
 +
 
 +
END DO
В креях были предусмотрены спец комментарии, говорящие про такие куски есть ли в них зависимости или нет.
В креях были предусмотрены спец комментарии, говорящие про такие куски есть ли в них зависимости или нет.
Строка 34: Строка 36:
На хорошем цикле
На хорошем цикле
-
DO i = 1,N
+
DO i = 1,N
-
A(i)= B(i)*s + C(i)
+
 
-
END DO
+
A(i)= B(i)*s + C(i)
 +
 
 +
EN DO
можно получить
можно получить
-
{|
+
N Mflops
-
!N
+
 
-
!Mflops
+
1 7
-
|-
+
 
-
|1
+
2 14
-
|7
+
 
-
|-
+
16 100.5
-
|2
+
 
-
|14
+
128 433.7
-
|-
+
 
-
|16
+
129 364.3 (влияние селекционирования)
-
|100.5
+
 
-
|-
+
256 548
-
|128
+
 
-
|433.7
+
257 491
-
|-
+
 
-
|129
+
8192 802 Mflops
-
|364.3 (влияние селекционирования)
+
-
|-
+
-
|256
+
-
|548
+
-
|-
+
-
|257
+
-
|491
+
-
|-
+
-
|8192
+
-
|802
+
-
|}
+
*конфликты в памяти. Самое плохое -- шаг по памяти в 64.
*конфликты в памяти. Самое плохое -- шаг по памяти в 64.
Рассмотрим цикл
Рассмотрим цикл
-
DO i = 1,Nxk, k
+
DO i = 1,Nxk, k
-
A(i) = B(i)*s + C(i)
+
 
-
END DO
+
A(i) = B(i)*s + C(i)
 +
 
 +
END DO
Пусть N=1000
Пусть N=1000
-
{|
+
k Mlops
-
!k
+
 
-
!Mflops
+
1 705.2
-
|-
+
 
-
|1
+
2 444.6
-
|705.2
+
 
-
|-
+
4 274.6
-
|2
+
 
-
|444.6
+
64 22.6
-
|-
+
 
-
|4
+
 
-
|274.6
+
-
|-
+
-
|64
+
-
|22.6
+
-
|}
+
Поэтому с шагом = 64 надо бороться. НО это не всегда просто. Рассмотрим пример
Поэтому с шагом = 64 надо бороться. НО это не всегда просто. Рассмотрим пример
x[40][40][40]
x[40][40][40]
-
DO i=1,n
+
DO i=1,n
-
DO j = 1,n
+
 
-
DO k = 1,n
+
DO j = 1,n
-
x(i,j,k)= x(i,j,k)+P(k,i)*Y(k,j)
+
 
-
END DO
+
DO k = 1,n
-
END DO
+
 
-
END DO
+
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]. Небольшое дополнительной памятью мы расплачиваемся за значительно большую производительность.
x(i,j,k) x(i,j,k+1) находятся в памяти не рядом, а на расстоянии 40*40 = 25*64.То есть производительность будет крайне маленькой. Поэтому лучше описать х как x[41][41][1000]. Небольшое дополнительной памятью мы расплачиваемся за значительно большую производительность.
Гораздо хуже если есть чтото вроде индексной адресации.
Гораздо хуже если есть чтото вроде индексной адресации.
-
DO i = 1,n
+
DO i = 1,n
-
x(IX(i)) = ... X(IX(i))
+
 
-
END DO
+
x(IX(i)) = ... X(IX(i))
 +
 
 +
END DO
Далеко не всегда с конфликтами по памяти можно разобраться статитически и далеко не всегда компилятор может с этим разобраться.
Далеко не всегда с конфликтами по памяти можно разобраться статитически и далеко не всегда компилятор может с этим разобраться.
-
* Ограниченная пропускная способность каналов процессор-память.
+
*Ограниченная пропускная способность каналов процессор-память.
-
DO i=1,n
+
DO i=1,n
-
A(i) = B(i)*C(i)+D(i)
+
 
-
END DO
+
A(i) = B(i)*C(i)+D(i)
 +
 
 +
END DO
Надо считать три вектора, а канлов только два.
Надо считать три вектора, а канлов только два.
-
{|
+
N Mflops
-
!N
+
-
!Mflops
+
-
|-
+
-
|10
+
-
|57
+
-
|-
+
-
|100
+
-
|278.3
+
-
|-
+
-
|1000
+
-
|435.3
+
-
|-
+
-
|12801
+
-
|445.0
+
-
|}
+
-
*необходимость использования векторных регистров
+
10 57
-
{{Параллельная Обработка Данных}}
+
100 278.3
-
{{Lection-stub}}
+
 
 +
1000 435.3
 +
 
 +
12801 445.0
 +
 
 +
*необходимость использования векторных регистров

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

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