» » » Филипп Хислей - Генерация высококачественного кода для программ, написанных на СИ


Авторские права

Филипп Хислей - Генерация высококачественного кода для программ, написанных на СИ

Здесь можно скачать бесплатно "Филипп Хислей - Генерация высококачественного кода для программ, написанных на СИ" в формате fb2, epub, txt, doc, pdf. Жанр: Программирование. Так же Вы можете читать книгу онлайн без регистрации и SMS на сайте LibFox.Ru (ЛибФокс) или прочесть описание и ознакомиться с отзывами.
Рейтинг:
Название:
Генерация высококачественного кода для программ, написанных на СИ
Издательство:
неизвестно
Год:
неизвестен
ISBN:
нет данных
Скачать:

99Пожалуйста дождитесь своей очереди, идёт подготовка вашей ссылки для скачивания...

Скачивание начинается... Если скачивание не началось автоматически, пожалуйста нажмите на эту ссылку.

Вы автор?
Жалоба
Все книги на сайте размещаются его пользователями. Приносим свои глубочайшие извинения, если Ваша книга была опубликована без Вашего на то согласия.
Напишите нам, и мы в срочном порядке примем меры.

Как получить книгу?
Оплатили, но не знаете что делать дальше? Инструкция.

Описание книги "Генерация высококачественного кода для программ, написанных на СИ"

Описание и краткое содержание "Генерация высококачественного кода для программ, написанных на СИ" читать бесплатно онлайн.








Компилятор WATCOM C 6.0 соперничает с Microsoft C 5.0 по степени выполняемой оптимизации и генерирует наиболее быстрый код в тесте оптимизации. То, что WATCOM теряет на не самых оптимальных циклах, он более чем наверстывает в малых заголовках вызова функций. WATCOM C 6.0 хорошо использует регистры, минимизирует обращения к памяти и повышает эффективность выполнения программ.

Компиляторы Metaware High C и Computer Innovations C86Plus выполняют более-менее удовлетворительную степень оптимизации, но отступают на второй план при рассмотрении усовершенствований, сделанных в технологии компиляторов фирмами Datalight, Microsoft и WATCOM.

Нет единственного производителя, который захватил бы на рынке область технологии оптимизации для компиляторов Си. Конкуренция на рынке подталкивает производителей к развитию технологии и к обеспечению разработчиков лучшими и более мощными средствами языка Си. В будущем это может означать появление оптимизирующих компиляторов, которые будут вырабатывать более быстрый и компактный код.

ЛИСТИНГ 1: OPTBENCH.C

/* ---------------------------------------------------------- *

¦ ¦

¦ Серия тестов PC Tech Journal ¦

¦ Тест оптимизации кода Си ¦

¦ ¦

¦ Copyright (c) 1988 Ziff-Devis Publishing Company ¦

¦ ¦

¦ Эта программа-тест была разработана для проверки ¦

¦ методов оптимизации кода, применяемых компилятором ¦

¦ Си. Она не вырабатывает разумные результаты и не ¦

¦ представляет хороший стиль программирования. ¦

¦ ¦

* ---------------------------------------------------------- */

 

 

#include <stdio.h>

#include <string.h>

 

#define max_vector 2

#define constant5 5

 

typedef unsigned char uchar;

 

int i, j, k, l, m;

int i2, j2, k2;

int g3, h3, i3, k3, m3;

int i4, j4;

int i5, j5, k5;

 

double flt_1, flt_2, flt_3, flt_4, flt_5, flt_6;

 

int ivector[ 3 ];

uchar ivector2[ 3 ];

short ivector4[ 6 ];

int ivector5[ 100 ];

 

#ifndef NO_PROTOTYPES

void dead_code( int, char * );

void unnecessary_loop( void );

void loop_jamming( int );

void loop_unrolling( int );

int jump_compression( int, int, int, int, int );

#else

void dead_code();

void unnecessary_loop();

void loop_jamming();

void loop_unrolling();

int jump_compression();

#endif

 

int main( argc, argv ) /* optbench */

int argc;

char **argv;

{

 

/* ---------------------------- *

¦ Размножение констант и копий ¦

*------------------------------*/

 

j4 = 2;

if( i2 < j4 && i4 < j4 )

i2 = 2;

 

j4 = k5;

if( i2 < j4 && i4 < j4 )

i5 = 3;

 

/* ------------------------------------------ *

¦ Свертка констант, арифметические тождества ¦

¦ и излишние операции загрузки/сохранения ¦

* ------------------------------------------ */

 

i3 = 1 + 2;

flt_1 = 2.4 + 6.3;

i2 = 5;

j2 = i + 0;

k2 = i / 1;

i4 = i * 1;

i5 = i * 0;

 

#ifndef NO_ZERO_DIVIDE

/*

* Некоторые компиляторы распознают ошибку

* деления на нуль и не генерируют объектный код

*/

i2 = i / 0;

flt_2 = flt_1 / 0.0;

#else

printf( "This compiler handles divide-by-zero as \

an error\n");

#endif

flt_3 = 2.4 / 1.0;

flt_4 = 1.0 + 0.0000001;

flt_5 = flt_6 * 0.0;

flt_6 = flt_2 * flt_3;

 

/* -------------------- *

¦ Лишнее присваивание ¦

* -------------------- */

 

k3 = 1;

k3 = 1;

 

/* ------------------ *

¦ Снижение мощности ¦

* ------------------ */

 

k2 = 4 * j5;

for( i = 0; i <= 5; i++ )

ivector4[ i ] = i * 2;

 

 

/* ------------- *

¦ Простой цикл ¦

* ------------- */

 

j5 = 0;

k5 = 10000;

do {

k5 = k5 - 1;

j5 = j5 + 1;

i5 = (k5 * 3) / (j5 * constant5);

} while ( k5 > 0 );

 

/* -------------------------------------- *

¦ Управление переменной индукции цикла ¦

* -------------------------------------- */

for( i = 0; i < 100; i++ )

ivector5[ i * 2 + 3 ] = 5;

 

/* ----------------------- *

¦ Глубокие подвыражения ¦

* ----------------------- */

 

if( i < 10 )

j5 = i5 + i2;

else

k5 = i5 + i2;

 

/* ------------------------------------------------ *

¦ Проверка того, как компилятор генерирует адрес ¦

¦ переменной с константным индексом, размножает ¦

¦ копии и регистры ¦

* ------------------------------------------------ */

 

ivector[ 0 ] = 1; /* генерация константного адреса */

ivector[ i2 ] = 2; /* значение i2 должно быть скопировано*/

ivector[ i2 ] = 2; /* копирование регистров */

ivector[ 2 ] = 3; /* генарация константного адреса */

 

 

/* ----------------------------- *

¦ Удаление общих подвыражений ¦

* ----------------------------- */

if(( h3 + k3 ) < 0 || ( h3 + k3 ) > 5 )

printf("Common subexpression elimination\n");

else {

m3 = ( h3 + k3 ) / i3;

g3 = i3 + (h3 + k3);

 

/* -------------------------------------- *

¦ Вынесение инвариантного кода ¦

¦ (j * k) может быть вынесено из цикла ¦

* -------------------------------------- */

 

for( i4 = 0; i4 <= max_vector; i4++)

ivector2[ i4 ] = j * k;

 

/* ----------------------------- *

¦ Вызов функции с аргументами ¦

* ----------------------------- */

 

dead_code( 1, "This line should not be printed" );

 

/* ------------------------------ *

¦ Вызов функции без аргументов ¦

* ------------------------------ */

 

unnecessary_loop();

 

} /* Конец функции main */

 

 

/* ------------------------------------------------------ *

¦ Функция: dead_code ¦

¦ Проверка недостижимого кода и лишних ¦

¦ присваиваний. Не должен генерироваться код. ¦

* ------------------------------------------------------ */

 

void dead_code( a, b )

int a;

char *b;

{

int idead_store;

 

idead_store = a;

if( 0 )

printf( "%s\n", b );

} /* Конец dead_code */

 

 

/* ---------------------------------------------------- *

¦ Функция: unnecessary_loop ¦

¦ Цикл в следующей функции ненужен, так как ¦

¦ значение присваивания постоянно. В идеале ¦

¦ цикл должен быть удален. ¦

* ---------------------------------------------------- */

void unnecessary_loop()

{

int x;

 

x = 0;

for( i = 0; i < 5; i++ ) /* Цикл не должен генерироваться*/

k5 = x + j5;

} /* Конец unnecessary_loop */

 

/* ---------------------------------------------------- *

¦ Функция: loop_jamming ¦

¦ Два цикла в этой функции имеют одинаковые ¦

¦ заголовки и могут быть слиты в один. ¦

* ---------------------------------------------------- */

void loop_jamming( x )

int x;

{

for( i = 0; i < 5; i++ )

k5 = x + j5 * i;

for( i = 0; i < 5; i++ )

i5 = x * k5 * i;

} /* Конец loop_jamming */

 

/* ------------------------------------------------------ *

¦ Функция: loop_unrolling ¦

¦ Цикл в этой функции должен быть заменен ¦

¦ тремя присваиваниями с использованием ¦

¦ константной индексации массива или машинно- ¦

¦ зависимыми командами для инициализации ¦

¦ блока памяти. ¦

* ------------------------------------------------------ */


На Facebook В Твиттере В Instagram В Одноклассниках Мы Вконтакте
Подписывайтесь на наши страницы в социальных сетях.
Будьте в курсе последних книжных новинок, комментируйте, обсуждайте. Мы ждём Вас!

Похожие книги на "Генерация высококачественного кода для программ, написанных на СИ"

Книги похожие на "Генерация высококачественного кода для программ, написанных на СИ" читать онлайн или скачать бесплатно полные версии.


Понравилась книга? Оставьте Ваш комментарий, поделитесь впечатлениями или расскажите друзьям

Все книги автора Филипп Хислей

Филипп Хислей - все книги автора в одном месте на сайте онлайн библиотеки LibFox.

Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Отзывы о "Филипп Хислей - Генерация высококачественного кода для программ, написанных на СИ"

Отзывы читателей о книге "Генерация высококачественного кода для программ, написанных на СИ", комментарии и мнения людей о произведении.

А что Вы думаете о книге? Оставьте Ваш отзыв.