Редактирование: Параллельная Обработка Данных, 09 лекция (от 30 октября)
Материал из eSyr's wiki.
Внимание: Вы не представились системе. Ваш IP-адрес будет записан в историю изменений этой страницы.
Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.
Текущая версия | Ваш текст | ||
Строка 1: | Строка 1: | ||
- | [[Параллельная Обработка Данных, 08 лекция (от 23 октября)|Предыдущая лекция]] | [[Параллельная Обработка Данных, 10 лекция (от 06 ноября)|Следующая лекция]] | ||
- | |||
==CRAY C90== | ==CRAY C90== | ||
Расчет максимальной пиковой производительности. | Расчет максимальной пиковой производительности. | ||
Строка 7: | Строка 5: | ||
Пример: | Пример: | ||
- | + | DO i = 1,n | |
- | + | ||
- | + | c(i) = A(i)+B(i) | |
+ | |||
+ | END DO | ||
Что бы понять, какие оп можно векторизовать, надо ввести понятие вектора | Что бы понять, какие оп можно векторизовать, надо ввести понятие вектора | ||
Строка 16: | Строка 16: | ||
Встает задача поиска в программе векторизуемых участков. Необходимо отсутствие зависимости по данным. | Встает задача поиска в программе векторизуемых участков. Необходимо отсутствие зависимости по данным. | ||
- | + | DO i = 1,n | |
- | + | ||
- | + | A(i) = funct (A(i), B(i)) | |
+ | |||
+ | END DO | ||
В креях были предусмотрены спец комментарии, говорящие про такие куски есть ли в них зависимости или нет. | В креях были предусмотрены спец комментарии, говорящие про такие куски есть ли в них зависимости или нет. | ||
Строка 34: | Строка 36: | ||
На хорошем цикле | На хорошем цикле | ||
- | + | DO i = 1,N | |
- | + | ||
- | + | A(i)= B(i)*s + C(i) | |
+ | |||
+ | EN DO | ||
можно получить | можно получить | ||
- | + | N Mflops | |
- | + | ||
- | + | 1 7 | |
- | + | ||
- | + | 2 14 | |
- | + | ||
- | + | 16 100.5 | |
- | + | ||
- | + | 128 433.7 | |
- | + | ||
- | + | 129 364.3 (влияние селекционирования) | |
- | + | ||
- | + | 256 548 | |
- | + | ||
- | + | 257 491 | |
- | + | ||
- | + | 8192 802 Mflops | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
*конфликты в памяти. Самое плохое -- шаг по памяти в 64. | *конфликты в памяти. Самое плохое -- шаг по памяти в 64. | ||
Рассмотрим цикл | Рассмотрим цикл | ||
- | + | DO i = 1,Nxk, k | |
- | + | ||
- | + | A(i) = B(i)*s + C(i) | |
+ | |||
+ | END DO | ||
Пусть N=1000 | Пусть N=1000 | ||
- | + | k Mlops | |
- | + | ||
- | + | 1 705.2 | |
- | + | ||
- | + | 2 444.6 | |
- | + | ||
- | + | 4 274.6 | |
- | + | ||
- | + | 64 22.6 | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
Поэтому с шагом = 64 надо бороться. НО это не всегда просто. Рассмотрим пример | Поэтому с шагом = 64 надо бороться. НО это не всегда просто. Рассмотрим пример | ||
x[40][40][40] | 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]. Небольшое дополнительной памятью мы расплачиваемся за значительно большую производительность. | 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 | ||
+ | |||
+ | *необходимость использования векторных регистров |