Сравнение компиляторов для трудных задач
Компиляторы - инструменты для решения вычислительных задач с использованием бинарного кода. Проблема выбора "правильного" компилятора. Применение компиляторов языка С++. Оценка MinGW, Borland Builder, Intel C++ Professional Edition, Watcom и Visual Studi.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | контрольная работа |
Язык | русский |
Дата добавления | 05.10.2012 |
Размер файла | 4,5 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
Сравнение компиляторов для трудных задач
ВВЕДЕНИЕ
компилятор задача инструмент
Для решения вычислительных задач немаловажной является проблема выбора инструмента. При вычислениях с использованием бинарного кода важно, чтобы код был оптимальный по затратам вычислительных ресурсов и ресурсов памяти. Помимо этого обнаружилась серьезная проблема времени компиляции исходного кода. Так, в некоторых комбинаторных задачах, где используются тысячи многократно вложенных циклов, некоторые компиляторы отказываются компилировать. В связи с этим актуальной является проблема выбора «правильного» компилятора. Практическая значимость нашей работы заключается в проведении тестов, изучении компиляторов и выборе наиболее подходящего. В рамках работы мы ограничились наиболее известными компиляторами языка С++. Для исследования мы выбрали несколько компиляторов, такие как: MinGW, Borland Builder, Intel C++ Professional Edition, Watcom и Visual Studio. Для начала рассмотрим их описание на сайтах-производителях.
1. Обзор компиляторов
1.1 MinGW
Информация взята с сайта [1]. MinGW, сокращенно «минималистский GNU для Windows», является минималистической средой разработки для родных приложений Microsoft Windows.
MinGW предоставляет полный программный пакет с открытым исходным кодом, который подходит для развития собственных приложений MS-Windows, и которые не зависят от любых третьих сторон C-Runtime DLL (только Microsoft C библиотеки, MSVCRT).
MinGW компиляторы обеспечивают доступ к функциональности среды Microsoft C Runtime и некоторым специализированным-языковым библиотекам.
Мы использовали версию 3.4.5, команда компилирования g++.
1.2 Borland Builder
Информация взята с сайта [2]. Embarcadero® C++ Builder® XE является единственным настоящим RAD C++ инструментом и компонентом программного обеспечения, предназначенного для ультрабыстрой разработки высоко-сопровождаемых Windows приложений с графическим интерфейсом для Windows и основных платформ.
Мы использовали версию 6.10, команда компилирования bcc32.exe
1.3 Watcom
Информация взята с сайта [4]. Open Watcom является проектом с открытым исходным кодом для поддержания и укрепления Watcom C, C++, Fortran кросс-компиляторов и инструментов. Лицензии Open Source от Sybase позволяет свободное коммерческое и некоммерческое использование Open Watcom.
Open Watcom компилятор имеет ряд преимуществ перед другими свободными компиляторами, такие как полная поддержка 16-битных DOS, Windows.. Open Watcom C/C++ компилятор в свободном доступе, компилятор для 16-битных Windows и OS / 2 устройств. Наконец, Open Watcom это комплексный пакет, легкий в установке и использовании, с полным набором инструментов и документации.
Мы использовали версию 1.9, команда компилирования wcl386.
1.4 Intel C++
Информация взята с сайта [3]. Intel® C++ Compiler Professional Edition раскрывает огромный потенциал следующего поколения многоядерных процессоров Intel. Professional Edition не только поставляется с широкими возможностями передовых оптимизаций компилятора, многопоточностью, и поддержкой процессора, в том числе автоматического процессора отправки, векторизации и предварительной выборки данных, он также имеет оптимизированные C++ шаблоны для параллелизма, математической обработки и мультимедийных библиотек.
Мы использовали версию 11, команда компилирования icl. При запуске компилятора через командную строку столкнулись с проблемой, поэтому запуск компиляции производился через Visual Studio.
1.5 Visual C++
компилятор задача инструмент
Информация взята с сайта [5]. Visual C++ -- это продукт корпорации Microsoft, предоставляющий интегрированную среду разработки для языков программирования C, C++ и C++/CLI. Visual C++ 2008 предоставляет многофункциональную и гибкую среду разработки для создания приложений на базе Microsoft Windows и Microsoft .NET. Компилятор поддерживает управляемое последовательное построение. Компилятор поддерживает микроархитектуру ядра Intel. Встроенные компоненты поддерживают новейшие процессоры AMD и Intel.
Мы использовали версию 2008, команда компилирования cl.
На данном этапе работы мы сравниваем характеристики выполнения программ на примере простого кода:
#include <stdio.h>
int main(){
int i, k;
int s = 0;
freopen ( "file.in", "r", stdin );
freopen ( "file.out", "w", stdout );
scanf("%d",&k);
for (i = 0; i <= k; i++){
s = s + i;
};
fprintf(stdout,"sum is %d\n", s);
return 0;
}
Представим результаты в следующих таблицах.
Таблица 1 - время выполнения программы для различного k (с)
K |
1 |
1 000 |
100 000 |
10 000 000 |
1 000 000 000 |
|
MinGW |
0,00 |
0,01 |
0,03 |
0,03 |
3,67 |
|
Builder |
0,08 |
0,09 |
0,09 |
0,11 |
0,92 |
|
Watcom |
0,09 |
0,09 |
0,09 |
0,09 |
0,81 |
|
Visual C++ |
0,01 |
0,03 |
0,03 |
0,03 |
0,78 |
|
Intel C++ |
0,00 |
0,01 |
0,03 |
0,03 |
0,22 |
Таблица 2 - затраченная память на выполнение программы (Кб)
K |
1 |
1 000 |
100 000 |
10 000 000 |
1 000 000 000 |
|
MinGW |
1228 |
1324 |
1324 |
1292 |
1296 |
|
Builder |
3388 |
3368 |
3384 |
3376 |
3372 |
|
Watcom |
3428 |
3252 |
3240 |
3256 |
3244 |
|
Visual C++ |
1416 |
1408 |
1408 |
1432 |
1436 |
|
Intel C++ |
1416 |
1416 |
1416 |
1412 |
1388 |
Таблица 3 - размер полученного *exe файла (Кб)
MinGW |
18 |
|
Builder |
165 |
|
Watcom |
36 |
|
Visual C++ |
8 |
|
Intel C++ |
128 |
Далее использовались более сложные программы и компилировались с различными ключами оптимизации.
2. Обзор задач
Задача 1.Посчитать количество способов расстановки k ферзей на шахматном поле размером N на N так, чтобы они не били друг друга
Задача 2. Найти количество циклов длинной 5 в графе
Задача 3. Найти количество циклов длинной 10 в графе
Задача 4. Расставить максимальное количество 144 короля на поле 24 на 24 так, чтоб они не били друг друга
3 Тестирование
Задача 1.
Время работы в секундах приведено в следующих таблицах
MinGW
Ключ оптимизации |
K |
|||||
2 (n=700) |
3 (n=80) |
4 (n=35) |
5 (n=20) |
6 (n=16) |
||
-O0 |
720.58 |
408.05 |
853.90 |
411.62 |
506.21 |
|
-O1 |
391.03 |
221.16 |
531.15 |
249.59 |
321.78 |
|
-O2 |
388.55 |
234.75 |
494.38 |
236.28 |
305.54 |
|
-O3 |
423.37 |
195.31 |
414.96 |
237.88 |
303.38 |
Watcom
Ключ оптимизации |
K |
|||||
2 |
3 |
4 |
5 |
6 |
||
-od |
1066.56 |
714.39 |
1873.54 |
874.96 |
1046.33 |
|
-oneatx -zp4 |
488.66 |
320.94 |
685.28 |
319.85 |
370.83 |
|
-ol |
889.21 |
534.38 |
1676.56 |
767.29 |
916.58 |
|
-on |
867.38 |
560.14 |
1607.11 |
768.80 |
924.48 |
|
-ot |
873.90 |
530.20 |
1624.84 |
725.37 |
924.59 |
Borland Builder
Ключ оптимизации |
K |
|||||
2 |
3 |
4 |
5 |
6 |
||
-Od |
721.27 |
469.14 |
1046.30 |
484.88 |
589.84 |
|
-O2 |
716.01 |
484.15 |
1080.57 |
480.76 |
601.49 |
|
-Ox |
717.57 |
510.92 |
1077.09 |
481.01 |
638.89 |
|
-Ot |
712.83 |
480.25 |
1123.11 |
492.89 |
616.73 |
Intel C++
Ключ оптимизации |
K |
|||||
2 |
3 |
4 |
5 |
6 |
||
/Od |
365.20 |
168.71 |
1263.90 |
547.84 |
687.01 |
|
/O1 |
361.03 |
164.96 |
510.15 |
235.25 |
314.06 |
|
/O2 |
366.13 |
170.73 |
425.77 |
207.15 |
289.86 |
|
/O3 |
382.97 |
175.89 |
414.92 |
203.85 |
263.35 |
|
/Ox |
364.18 |
174.63 |
426.76 |
204.75 |
287.57 |
Visual C++
Ключ оптимизации |
K |
|||||
2 |
3 |
4 |
5 |
6 |
||
/Od |
678.32 |
316.57 |
875.63 |
263.41 |
507.35 |
|
/O1 |
411.98 |
310.50 |
666.37 |
281.16 |
356.17 |
|
/O2 |
353.30 |
325.03 |
590.09 |
262.13 |
343.01 |
|
/Ox |
367.26 |
320.43 |
600.28 |
262.81 |
344.34 |
Далее мы заменили встроенный типа на собственный и переопределили для него операцию инкремента в данных программах и провели тесты еще раз. Результаты изменились, но незначительно. Данные можно представить в виде диаграмм.
Диаграммы с разными ключами оптимизации:
Диаграмма для двух ферзей на поле размером 500 на 500
Диаграмма для трех ферзей на поле размером 70 на 70
Диаграмма для четырех ферзей на поле размером 30 на 30
Диаграмма для 5 ферзей на поле размером 18 на 18
Диаграмма для шести ферзей на поле размером 15 на 15
Далее мы сравнили значения скорости выполнения программ для k ферзей, после того как они компилировались различными компиляторами с отключенной оптимизацией.
Так же мы проверили скорости выполнения программ для k ферзей, после компилирования с наиболее быстрой опцией компилятора
Исходя только из последней диаграммы, мы видим, что самым быстрым компилятором является Intel C++ в тех случаях, когда k > 2, для k = 2 быстрее всех работает программа, скомпилированная компилятором MinGW. В остальных случаях так же видно, что для k > 2 Intel C++ оказывается более оптимальным.
Задача 2
.
Задача 3
Следующая диаграмма отражает время компилирования программы с различными опциями
В свою очередь время выполнения программы отражено в следующей диаграмме
Задача 4
Также проводились тестирования для подсчета количества циклов длинной 12 в графе, но они не компилировались 32-битовыми компиляторами Intel C++ и Visual C++, MinGW выдал сообщение о нехватке памяти, Watcom выдал сообщение о том, что используются слишком сложные конструкции. Borland Builder скомпилировал, программа после компилирования запускалась более 2 часов для графа с 30 вершинами.
ЗАКЛЮЧЕНИЕ
Таким образом, мы провели несколько различных тестов для наших компиляторов, сравнивая скорость выполнения и скорость компилирования. Рассмотрели подробно опции компилирования у каждого из компиляторов, выбрали самые подходящие. Изучив внимательно данные таблиц и диаграмм, можно сделать вывод, что наиболее быстрым является компилятор Intel C++, особенно это заметно на более сложных тестах. Вторым после него идет Visual C++, чего и следовало ожидать, так как между ними есть некоторая схожесть. Далее компиляторы определились неоднозначно и по разному вели себя в каждой из программ. Но все же третьим по скорости является Watcom, а точнее с опцией оптимизации -oneatx -zp4, которая является самой быстрой из всех его опции. MinGW и Borland Builder находятся наравне друг с другом.
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
1. MinGW. Minimalist GNU for Windows [Электронный ресурс]. MinGW.org, 2009.URL: http://www.mingw.org Загл. с экрана. Яз. англ
2. Embracadero [Электронный ресурс]. Embarcadero Technologies, Inc., 2010 URL: http://www.embarcadero.com/ru/ Загл. с экрана. Яз. англ
3. Intel [Электронный ресурс]. Intel Corporation, URL:http://intel.com Загл. с экрана.
4. Open Watcom [Электронный ресурс].Some rights recerved Creative Commons URL: http://www.openwatcom.org Яз.англ
5. Microsoft Visual Studio [Электронный ресурс].Microsoft Corp., 2010 URL: http://msdn.microsoft.com/ru-ru/vstudio/ Загл. с экрана. Яз. англ
Размещено на Allbest.ru
Подобные документы
Описание компиляторов языка С/С++: MinGW, Borland Builder, Watcom, Intel C++, Visual. Сравнение характеристик выполнения программ на примере простого кода. Проведение тестов для компиляторов, оценка скорости выполнения и компилирования, их опций.
курсовая работа [1,6 M], добавлен 05.10.2012Логическая структура компилятора. Лексический анализ. Сканер. Синтаксический и семантический анализ. Формирование промежуточного кода. Метод четверок. Обоснование создания учебного комплекса. Описание учебного языка. Таблица терминальных символов.
дипломная работа [424,1 K], добавлен 16.11.2004Способы формирования у учащихся знаний по информационным технологиям в математике, умения правильного выбора инструментария для решения практических задач. Разработка методики решения математических задач с использованием прикладного пакета Maple 9.
дипломная работа [2,4 M], добавлен 19.03.2012Работа в Borland C++ Builder. Среда разработки и компоненты C++ Builder. Свойства компонентов. Менеджер проектов. Создание приложений в C++ Builder. Выбор компонентов для групповых операций. Работа с базами данных в Borland C++ Builder.
курсовая работа [35,8 K], добавлен 11.06.2007Составные части, основные принципы построения и функционирования компиляторов. Практическое освоение методов разработки их составных частей. Этапы и особенности создания программы для выполнения лексического анализа входного текста по заданной грамматике.
курсовая работа [294,0 K], добавлен 04.11.2014Краткое описание версий Windows XP: Professional Edition, Home Edition, Tablet PC Edition, Media Center Edition, Embedded, XP 64-bit Edition, XP Edition N, XP Starter Edition. Установка Windows XP. Характеристика интерфейса и нововведений Windows 7.
контрольная работа [1,8 M], добавлен 14.03.2011Принцип работы компиляторов. Синтаксически-неоpиентиpованные алгоритмы, достоинства этого класса. Метод нисходящего разбора - рекурсивный спуск, суть данного метода. Преобразования программы компилятором с реализацией работы с процедурами с параметрами.
курсовая работа [31,6 K], добавлен 25.03.2011Описание Visual Basic Scripting Edition как скриптового языка программирования, интерпретируемого компонентом Windows Script Host. Правила работы языка и применение VBS-сценариев для обработки данных, управления системой, работы с учетными записями.
доклад [31,3 K], добавлен 11.05.2012Классы задач P и NP, их сводимость. Примеры NP-полных и NP-трудных задач. Сущность метода поиска с возвратом. Алгоритмы решения классических задач комбинаторного поиска. Решение задачи о восьми ферзях. Поиск оптимального решения методом ветвей и границ.
презентация [441,5 K], добавлен 19.10.2014Решение экономических задач с помощью Microsoft Excel и инструментария Visual Basic For Application. Способы запуска редактора Visual Basic, правила его синтаксиса. Создание автоматических макросов по сортировке и выборке. Создание управляющих кнопок.
курсовая работа [852,0 K], добавлен 24.09.2010