WWW.REFERATCENTRAL.ORG.UA - Я ТУТ НАВЧАЮСЬ

... відкритий, безкоштовний архів рефератів, курсових, дипломних робіт

ГоловнаІнформатика, Компютерні науки → Ефективність програм та методи оптимізації - Реферат

Ефективність програм та методи оптимізації - Реферат

програми, а під час компіляції. Наприклад, визначення в програмі мовою С виду int i = 0; більш ефективне ніж
int i;
i = 0;
Подібного результату в програмі мовою Паскаль можна досягти за рахунок типізованої константи:
const i : integer = 0;
Така константа рівнозначна змінній з попередньо ініціалізованим значенням.
6. Логічні вирази.
Економії часу можна добитись правильним розташуванням складних логічних виразів. Більшість компіляторів зупиняють подальше обчислення виразу, якщо його результат вже відомий. Наприклад, логічний вираз ( A and B and C and D ) матиме значення false , як тільки один із операндів матиме значення false. Отже, треба розташовувати логічні операнди таким чином, щоб на початку виразу послідовних логічних множень знаходився операнд, який найчастіше має значення "хибність".
Логічний вираз ( A or B or C and D ) матиме значення true , як тільки один із операндів матиме значення true. Отже, треба розташовувати логічні операнди таким чином, щоб на початку виразу послідовних логічних додавань знаходився операнд, який найчастіше має значення "істина".
Якщо ж компілятор не зупиняє обчислень при відомому результаті логічного виразу, то в деяких випадках можна зменшити кількість логічних перевірок, наприклад замінивши оператор
if (( a > b ) and ( c > d )) then …
на
if ( a > b ) then
if ( c > d ) then …
7. Індексація.
Якщо можна не використовувати багатовимірні масиви, то краще цього не робити (при кожномузвертанні до елемента багатовимірного масива, наприклад, A[i,j], відбувається перерахування дійсної адреси елементу масива, оскільки у пам'яті масив розташований лінійно). Отже, якщо це можливо, зведіть до мінімуму кількість звертань до елементів масивів, особливо багатовимірних.
Приклад (множення матриць).
for i := 1 to n do
for j := 1 to n do
begin
c[i,j] := 0.0;
for k := 1 to n do
c[i,j] := c[i,j] + a[i,k]*b[k,j];
end;
Кращий варіант (введемо зайву змінну temp):
for i := 1 to n do
for j := 1 to n do
begin
temp := 0.0;
for k := 1 to n do
temp := temp + a[i,k]*b[k,j];
c[i,j] := 0;
end;
8. Оптимізація циклів.
Цикли завжди утворюють критичну область, отже, мінімальна оптимізація в тілі циклу може значно покращити характеристики програми.
9.Видалення надмірних операцій
Повторні обчислення в циклах є типовою помилкою, яка впливає на ефективність. В наступних прикладах із циклів видалені інваріантні вирази.
Замість:
for i := 1 to n do
for k := 1 to n do
x[i,k] := A[i] + sin(k*i); Краще:
for i := 1 to n do
begin
Ai := A[i];
for k := 1 to n do
x[i,k] := Ai + sin(k*i);
end;
Замість:
for i := 1 to n do
S := S + x[i]/n; Краще:
for i := 1 to n do
S := S + x[i];
S := S/n;
10. Порядок вкладання циклів
Організація та виконання циклів типу for вимагають деяких неявних додаткових затрат часу часу на ініціалізацію змінної циклу та на перевірку на кожному кроці необхідності завершення циклу. Правильною організацією вкладених циклів можна економити час роботи програми. Розглянемо приклад.
for i := 1 to 1000 do
for j := 1 to 100 do
for k:= 1 to 10 do
begin

(* 1000*100*10 кроків *)
end; Неявні операції:
1 ініціалізація i + 1000 перевірок на завершення;
1000 ініціалізацій j + 100000 перевірок;
1000000 ініціалізацій k +1000000 перевірок
Усього:
1001001 ініціалізація + 1101000 перевірок
Якщо порядок вкладання циклів є інваріантним щодо тіла циклу (для множення матриць, наприклад, це не так), то краще організувати вкладені цикли таким чином:
for k := 1 to 10 do
for j := 1 to 100 do
for i:= 1 to 1000 do
begin
… (1000*100*10)
end; Неявні операції:
1 ініціалізація k + 10 перевірок завершення;
10 ініціалізацій j + 1000 перевірок;
1000 ініціалізацій i + 1000000 перевірок
Усього:
1011 ініціалізацій + 1001010 перевірок
Отже, будемо користуватись правилом: в інваріантних випадках порядок вкладання циклів визначається зростанням кількості ітерацій циклу (від найкоротших до найдовших).
ЛІТЕРАТУРА
1. Н. Вирт. Систематическое программирование. - М.: Мир, 1977. - 183 с.
2. Ален И. Голуб. С и С++. Правила программирования. - М.: БИНОМ, 1996. - 272 с.
3. У. Дал, Э. Дейкстра, К. Хоор. Структурное программирование. - М.: Мир, 1973. - 247 с.
4. Э. Дейкстра. Дисциплина программирования. - М.: Мир, 1978. - 275 с.
5. Д. Ван Тассел. Стиль, разработка, эффективность, отладка и испытание программ. - М.: Мир, 1985. - 332 с.
6. М. Зелковиц, А. Шоу, Дж. Гэннон. Принципы разработки программного обеспечения. - М.: Мир, 1982. - 368 с.
7. Г. С. Иванова. Основы программирования: Учебник для вузов. - М.: Изд-во МГТУ им. Н.Э. Баумана, 2002. - 416 с.
8. Г. С. Иванова. Технология программирования: Учебник для вузов. - М.: Изд-во МГТУ им. Н.Э. Баумана, 2002. - 320 с.
9. Э. Йодан. Структурное проектирование и конструирование програм. - М.: Мир, 1979. - 415 с.
10. Б. Керниган, Р. Пайк. Практика программирования. - СПб.: Невский диалект, 2001. - 381 с.
11. Э.Б. Коффман. Turbo Pascal. - М.: Издательский дом "Вильямс", 2002. - 896 с.
12. Р. Линнер, Х. Миллс, Б Уитт. Теория и практика структурного программирования. - М.: Мир, 1982. - 406 с.
Loading...

 
 

Цікаве