Параллельная обработка данных


Легко ли достичь пиковой производительности компьютера CRAY C90? - часть 5


Производительность компьютера (с двумя секциями памяти) на данной операции показана в таблице 2.

шаг по

памяти

производительность на векторах из

100 элементов

1000 элементов

12800 элементов

1

240.3

705.2

805.1

2

220.4

444.6

498.5

4

172.9

274.6

280.1

8

108.1

142.8

147.7

16

71.7

84.5

86.0

32

41.0

44.3

38.0

64

22.1

25.7

22.3

128

21.2

20.6

20.3

Табл.2 Влияние конфликтов при обращении к памяти: производительность компьютера CRAY Y-MP C90

в зависимости от длины векторов и шага перемещения по памяти.

Как видим, производительность падает катастрофически. Однако еще одной неприятной сторой конфликтов является то, что "внешних" причин их появления может быть много (в то время как истинная причина, конечно же, одна - неудачное расположение данных). В самом деле, в предыдущем примере конфликты возникали при использовании цикла с неединичным четным шагом. Значит, казалось бы, не должно быть никаких причин для возникновения конфликтов при работе фрагмента следующего вида:

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. Предположим, что описание имеет вид:

DIMENSION X(40,40,100)

По определению Фортрана массивы хранятся в памяти "по столбцам", следовательно при изменении последнего индексного выражения на единицу реальное смещение по памяти будет равно произведению размеров массива по предыдущим размерностям. Для нашего примера, расстояние между соседними элементами X(i,j,k) и X(i,j,k+1) равно 40*40=1600=25*64, т.е. всегда кратно наихудшему шагу для выборки из памяти. В тоже время, если изменить лишь описание массива, добавив единицу к первым двум размерностям:

DIMENSION X(41,41,100),

то никаких конфликтов не будет вовсе. Последний пример возможного появления конфликтов - это использование косвенной адресации. В следующем фрагменте

Do j=1,n Do i=1,n XYZ(IX(i),j) = XYZ(IX(i),j)+P(i,j)*Y(i,j) End Do End Do




Начало  Назад  Вперед



Книжный магазин