В.А. Фисун - Параллельная обработка данных (2005) (1127758), страница 9
Текст из файла (страница 9)
Итак суммирование по группам дает меньшую ошибку результата.34Например, разделив процесс суммирования массива положительных чисел напараллельные процессы, и затем получив сумму частных сумм, можно получитьрезультат, отличный от последовательного суммирования в одном процесс.40. Определить .....Эффект от буферизации можно определить среднему времени выборки: t =t2*p+ t1*(1-p), где t1 - среднее время доступа к данным основной памяти, t2 среднее время доступа к данным из буфера (t2<t1), p - вероятность наличияданного в буфере.41.
Привести пример программы, вызывающей перезагрузку кэша с прямымраспределением.В кэше с прямым отображением адреса кэша для передаваемых объектовданных являются функцией полного виртуального адреса объектов. Для кэшаобъемом в 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,NA(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,N35A(I) = B(I) + C(I)ENDDOТакое изменение размерности гарантирует, что строки кэша, которыетребуются в одной итерации, не будут записываться друг на друга.Приложение: Стандартные префиксы Международной системы измерений СИпрефиксдвоичная системадесятичная системакило-Кмега-Мгига-Гтера-Тпета-Пекзазеттайотта-1024**1 = 2**101024**2 = 2**201024**3 = 2**301024**4 = 2**401024**5 = 2**501024**6 = 2**601024**7 = 2**701024**8 = 2**80======10241 048 5761 073 741 8241 099 551 627 7761 125 899 906 842 624...................1000**11000**21000**31000**41000**51000**61000**71000**8========10**310**610**910**1210**1510**1810**2110**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 нулямитактовая частота в МГцпродолжительность циклав нс6015100101337.5166636Особенности вычисления выражений в Фортране 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+xi/2-> 0.5 *ix*y -> y*xx*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*ax*(y-z)-> x*y-x*z37.