| Россия, Липецк |
Опубликован: 11.10.2012 | Уровень: специалист | Доступ: платный
Лекция 1:
Компиляторы Intel. Возможности автоматической оптимизации
Межпроцедурная оптимизация
- Анализ вызываемых функций приложения.
- Оптимизация многочисленных "маленьких" функций, особенно в циклах.
- Встраивание (inlining, подстановка кода) – уменьшение накладных расходов, создание возможностей для других видов оптимизации.
- Удаление неиспользуемого кода.
- Замена виртуальных вызовов статическими.
- Замена параметра функции константой.
- Эффективный анализ зависимостей для оптимизации циклов, векторизации и распараллеливания.
- Размер бинарного файла и время компиляции увеличиваются.
Пример 5
SquareRoots.cpp
#include "time.h"
#include <iostream>
#include "stdlib.h"
#include "conio.h"
#include "math.h"
using namespace std;
const int N = 10000; //number of steps in grid used for numerical method
const int LIM = 50000; //we want to find the sum of square roots of 1..LIM
double sqrootNewton(double x);
double returnHalf(double value);
double multiply(double value1, double value2);
int main()
{
time_t t1, t2;
double numRes(0), trueRes(0);
t1 = clock();
for (int i = 0; i < LIM; i++)
{
numRes += sqrootNewton(i+1);
trueRes += sqrt((i+1)/1.0);
}
t2 = clock();
cout << "Numerical result via Newton's method is " << numRes << endl;
cout << "PC arithmetical result is " << trueRes << endl;
cout << "\nInitial clock ticks value is " << t1 << endl;
cout << "Final clock ticks value is " << t2 << endl;
cout << "Difference in clock ticks is " << difftime(t2,t1) << endl;
cout << "Clock ticks per second value is " << CLOCKS_PER_SEC << endl;
cout << "\nActual time of calculations is " << ((t2-t1)/CLOCKS_PER_SEC) << " sec" << endl;
_getch();
return 0;
}
double sqrootNewton(double x) // Newtonian method applied for square root
{
double sq = 1.0;
for (int i = 0; i < N; i++)
sq = returnHalf((sq + multiply(x, 1/sq)));
return sq;
}
double returnHalf(double value)
{
return value*0.5;
}
double multiply(double value1, double value2)
{
return value1*value2;
}
Подготовим тест:
- icl /FeSqOd /Od SquareRoots.cpp
- icl /FeSqip /Qip SquareRoots.cpp
Сравнить результаты.
Среднее значение времени выполнения:
- SqOd . . . . . 35.69 с.
- Sqip . . . . . . 9.59 с.
Вопрос. Объясните результаты теста.