СКИПОДы 2007 полная версия (1127795), страница 57
Текст из файла (страница 57)
Этипреобразования, алгебраически эквивалентные, могут нарушить порядок вычислений,предписанный исходным текстом программы.Последствия таких преобразований обсуждались выше.Наиболее характерныепреобразования следующие.1911. Балансировка дерева вычисленийБалансировка дерева вычислений (tree-height reduction or balancing) выражений позволяютиспользовать конвейерное АУ без пропуска рабочих тактов. Так, вычисление суммывещественныхчисел: A+B+C+D+E+F+G+H, будет запрограммировано какпоследовательность операций: (((A+B)+(C+D))+((E+F)+(G+H))); это нарушает заданную поумолчанию последовательность вычислений с накоплением одной частной суммы и можетповлиять на результат.2. Исключение общих подвыраженийАлгоритмы исключения общих подвыражений (Common subexpession elimination) такжемогут изменить порядок вычислений.Если компилятор распознает в выражениях повторяющееся вычисление, то это вычислениепроизводятся один раз,его результат сохраняется на регистре, и в дальнейшемиспользуется этот регистр.
Тем самым исключается избыточность вычислений.X = A + B + C + D ---->REG = B + CY=B+E+CX = A + D + REGY = E + REG3. Разворачивание цикловРазворачивание циклов (loop unrolling) - расписывание цикла последовательностьюоператоров присваивания: либо полностью, либо размножение тела цикла с некоторымкоэффициентом (фактором) размножения.Производится частичное или полное разворачивание цикла в последовательный участоккода. При частичном разворачивании используется так называемый фактор разворачивания(который можно задавать в директиве компилятору).DO I=1,100DO I=1,100,4A(I) = B(I) + C(I)A(I) = B(I) + C(I)ENDDOA(I+1) = B(I+1) + C(I+1)A(I+2) = B(I+2) + C(I+2)A(I+3) = B(I+3) + C(I+3)ENDDOПри этом преобразовании снижается количество анализов итерационной переменной.Данный алгоритм также может привести к нарушению предписанного первоначальнопорядка вычислений.
Например:DO I=1,10DO I=1,10,2S = S + A(I)S = S + A(I)ENDDOS1 = S1 + A(A+1)ENDDOS = S + S1Здесь, суммирование проводится отдельно для четных и нечетных элементов споследующем сложением частных сумм.192.