Краткий_Курс, страница 7
Описание файла
Документ из архива "Краткий_Курс", который расположен в категории "". Всё это находится в предмете "параллельная обработка данных" из 9 семестр (1 семестр магистратуры), которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Онлайн просмотр документа "Краткий_Курс"
Текст 7 страницы из документа "Краткий_Курс"
В кэше с прямым отображением адреса кэша для передаваемых объектов данных являются функцией полного виртуального адреса объектов. Для кэша объемом в 1 Мбайт адреса процессорного кэша вычисляются в процессе работы по формуле: cache_address=MOD(virtual_address,2**20) MOD - функция, возвращающая остаток от деления virtual_address на 2**20 (2**20=1048576=1 Мбайт). Таким образом, адрес кэша объекта данных - это младшие 20 бит его виртуального адреса. Старшие разряды адреса – теги храняться в специальной памяти – памяти тэгов. Такая схема адресации может стать причиной перезагрузки кэша (кэш трэшинг), если последовательно используемые процессором данные расположены в оперативной памяти по адресам, кратным размеру памяти кэша. Пусть 1- М-байтный кэш процессора прямо отображается на виртуальную память. Это означает, что обращение к памяти с шагом в 1 - М-байт "гарантирует" перезапись строк кэша [строка кэша - блок данных, читаемые из или записываемые в (или из) память за одно обращение; 32 байта для кэша процессора]. Пусть имеется программа:
REAL *8 A(65536),B(65536),C(65536)
DO I = 1,N
A(I) = B(I) + C(I)
ENDDO
Каждый массив имеет размер - точно 1/2 М-байта. Предположим, что они загружены в память без разрывов. Тогда, все строки кэша для С в точности накладываются на строки кэша для массива А. Так что, процессор, выполняющий 1 итерацию цикла, будет загружать строку кэша массива В, строку кэша массива С, вычислит B(I) + C(I) , а затем загрузит строку кэша А (которая приведет к перезаписи строки кэша С). На следующей итерации строки кэша для С и А должны быть выбраны снова, так что не будет повторного использования данных из кэша без перезаписи. Добавка некоторого смещения к размерности массива исключает эту проблему. Таким образом, следующий код будет выполняться значительно быстрее:
REAL *8 A(65536+8),B(65536+8),C(65536+8)
DO I = 1,N
A(I) = B(I) + C(I)
ENDDO
Такое изменение размерности гарантирует, что строки кэша, которые требуются в одной итерации, не будут записываться друг на друга.
Приложение: Стандартные префиксы Международной системы измерений СИ
префикс двоичная система десятичная система
кило-К 1024**1 = 2**10 = 1024 1000**1 = 10**3 тысяча
мега-М 1024**2 = 2**20 = 1 048 576 1000**2 = 10**6 миллион
гига-Г 1024**3 = 2**30 = 1 073 741 824 1000**3 = 10**9 миллиард, биллион
тера-Т 1024**4 = 2**40 = 1 099 551 627 776 1000**4 = 10**12 триллион
пета-П 1024**5 = 2**50 = 1 125 899 906 842 624 1000**5 = 10**15 квадриллион
екза- 1024**6 = 2**60 = ................... 1000**6 = 10**18 квинтиллион
зетта- 1024**7 = 2**70 1000**7 = 10**21 сексиллион
йотта- 1024**8 = 2**80 1000**8 = 10**24 септииллион
Префиксы, используемые при умножении на отрицательную степень 1000
милли- 1000** -1 = 10** -3 = 0.001
микро- 1000** -2 = 10** -6 = 0.000001
нано- 1000** -3 = 10** -9 = 0.000000001
пико- 1000** -4 = 10** -12 = ..........
фемто- 1000** -5 = 10** -15
атто- 1000** -6 = ........
зенто- 1000** -7
йокто- 1000** -8
В АНГЛИИ:
Биллион = миллиону миллионов = 1 с 12 нулями
Триллион = миллиону биллионов = 1 с 18 нулями
Квадриллион = миллиону триллионов = 1 с 24 нулями
Квинтиллион = миллиону квадриллионов = 1 с 30 нулями
Секстиллион = миллиону квинтиллионов = 1 с 36 нулями
тактовая частота в МГц | продолжительность цикла в нс |
60 | 15 |
100 | 10 |
133 | 7.5 |
166 | 6 |
Особенности вычисления выражений в Фортране 90 ( пункты стандарта).
7.1.7. Выполнение операций
"При вычислении выражения А+В, где А,В - массивы, процессор может выполнять по-элементные операции сложения в любом порядке"
7.1.7.1. Вычисление операндов
"Процессор не обязательно вычисляет все операнды выражения или полностью каждый операнд, если значения можно определить без этого. Так в выражении: X .GT. Y .OR. L(Z) не надо вычислять функцию L(Z), если X больше Y."
7.1.7.2. Целостность скобок
"Для выражения: A+(B+C) процессор на должен вычислять математически эквивалентное выражения: (A+B)+C."
7.1.7.3. Выполнение числовых встроенных операций
"... процессор может вычислять любое математически эквивалентное выражение при условии, что целостность скобок не нарушается."
В стандарте языка Фортран 90 приводятся допустимые и не допустимые альтернативных формы преобразования выражений:
Для целых i,j; вещественных и комплексных a,b,c; произвольных x,y,z разрешаются преобразования: и запрещаются:
x+y -> y+x i/2 -> 0.5 *i
x*y -> y*x x*i/j -> x*(i/j)
-x+y -> y-x (x+y)+z -> (x+y+z)
x+z+y -> y+(x+z) i/j/a -> i/(j*a)
x*a/z -> x*(a/z) (x+y)+z -> x+(y+z)
a/b/c -> a/(b*c) (x*y)-(x*z) -> x*(y-z)
a/5.0 -> 0.2*a x*(y-z) -> x*y-x*z
37