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

Тут можно читать онлайн Филипп Хислей - Генерация высококачественного кода для программ, написанных на СИ - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-programming. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    Генерация высококачественного кода для программ, написанных на СИ
  • Автор:
  • Жанр:
  • Издательство:
    неизвестно
  • Год:
    неизвестен
  • ISBN:
    нет данных
  • Рейтинг:
    3.2/5. Голосов: 101
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 60
    • 1
    • 2
    • 3
    • 4
    • 5

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

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

Генерация высококачественного кода для программ, написанных на СИ - читать онлайн бесплатно полную версию (весь текст целиком)

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

Интервал:

Закладка:

Сделать

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

Хотя все девять рассматриваемых компиляторов генерируют приемлемый код, три из них, - Datalight Optimum-C, Microsoft C 5.0 и WATCOM C 6.0, - выполняют оптимизацию кода более высокого уровня, чем остальные.

Компилятор Datalight Optimum-C - это быстрый и выразительный исполнитель. Он выполняет обширный анализ потоков данных и оптимизирует код, за который другие компиляторы не берутся.

Microsoft C 5.0 применяет оптимизацию циклов, которая является одной из областей с большими потенциальными возможностями улучшения кода. Применяя вынесение инвариантного кода, удаление переменных индукции циклов и очень качественное распределение переменных по регистрам, Microsoft C 5.0 вырабатывает прекрасный код.

Компилятор 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

#include

#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;

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Филипп Хислей читать все книги автора по порядку

Филипп Хислей - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




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


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


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

Напишите свой комментарий
x