Сравнение компиляторов языка С++ для трудных задач

 

Содержание


Введение

. Обзор компиляторов

.1 MinGW

.2 Borland Builder

1.3 Watcom

.4 Intel C++

.5 Visual C++

2. Обзор задач

. Тестирование

Заключение

Список использованных источников


Введение


Для решения вычислительных задач немаловажной является проблема выбора инструмента. При вычислениях с использованием бинарного кода важно, чтобы код был оптимальный по затратам вычислительных ресурсов и ресурсов памяти. Помимо этого обнаружилась серьезная проблема времени компиляции исходного кода. Так, в некоторых комбинаторных задачах, где используются тысячи многократно вложенных циклов, некоторые компиляторы отказываются компилировать. В связи с этим актуальной является проблема выбора «правильного» компилятора. Практическая значимость нашей работы заключается в проведении тестов, изучении компиляторов и выборе наиболее подходящего. В рамках работы мы ограничились наиболее известными компиляторами языка С++. Для исследования мы выбрали несколько компиляторов, такие как: MinGW, Borland Builder, Intel C++ Professional Edition, Watcom и Visual Studio.

Основные цели нашей работы:

познакомиться с компиляторами языка С/С++,

изучить возможности различных компиляторов,

провести сравнительный анализ компиляторов на программах для трудных задач.

В соответствии с поставленными целями определили следующие задачи:

отыскать информацию по наиболее известным компиляторам,

написать несколько тестовых программ,

найти более сложные программы,

провести тестирование,

сделать выводы.


1. Обзор компиляторов


.1 MinGW


Информация взята с сайта [1]. MinGW, сокращенно «минималистский GNU для Windows», является минималистической средой разработки для родных приложений Microsoft Windows.предоставляет полный программный пакет с открытым исходным кодом, который подходит для развития собственных приложений MS-Windows, и которые не зависят от любых третьих сторон C-Runtime DLL (только Microsoft C библиотеки, MSVCRT).компиляторы обеспечивают доступ к функциональности среды Microsoft C Runtime и некоторым специализированным-языковым библиотекам.

Мы использовали версию 3.4.5, команда компилирования g++.


.2 Borland Builder


Информация взята с сайта [2]. Embarcadero® C++ Builder® XE является единственным настоящим RAD C++ инструментом и компонентом программного обеспечения, предназначенного для ультрабыстрой разработки высоко-сопровождаемых Windows приложений с графическим интерфейсом для Windows и основных платформ.

Мы использовали версию 6.10, команда компилирования bcc32.exe


.3 Watcom


Информация взята с сайта [4]. Open Watcom является проектом с открытым исходным кодом для поддержания и укрепления Watcom C, C++, Fortran кросс-компиляторов и инструментов. Лицензии Open Source от Sybase позволяет свободное коммерческое и некоммерческое использование Open Watcom. Watcom компилятор имеет ряд преимуществ перед другими свободными компиляторами, такие как полная поддержка 16-битных DOS, Windows.. Open Watcom C/C++ компилятор в свободном доступе, компилятор для 16-битных Windows и OS / 2 устройств. Наконец, Open Watcom это комплексный пакет, легкий в установке и использовании, с полным набором инструментов и документации.

Мы использовали версию 1.9, команда компилирования wcl386.


.4 Intel C++


Информация взята с сайта [3]. Intel® C++ Compiler Professional Edition раскрывает огромный потенциал следующего поколения многоядерных процессоров Intel. Professional Edition не только поставляется с широкими возможностями передовых оптимизаций компилятора, многопоточностью, и поддержкой процессора, в том числе автоматического процессора отправки, векторизации и предварительной выборки данных, он также имеет оптимизированные C++ шаблоны для параллелизма, математической обработки и мультимедийных библиотек.

Мы использовали версию 11, команда компилирования icl. При запуске компилятора через командную строку столкнулись с проблемой настройки, поэтому запуск компиляции производился через Visual Studio.


.5 Visual C++


Информация взята с сайта [5]. Visual C++ - это продукт корпорации Microsoft, предоставляющий интегрированную среду разработки для языков программирования C, C++ и C++/CLI. Visual C++ 2008 предоставляет многофункциональную и гибкую среду разработки для создания приложений на базе Microsoft Windows и Microsoft .NET. Компилятор поддерживает управляемое последовательное построение. Компилятор поддерживает микроархитектуру ядра Intel. Встроенные компоненты поддерживают новейшие процессоры AMD и Intel.

Мы использовали версию 2008, команда компилирования cl.

Существует множество программ для измерения времени и памяти, мы измеряли при помощи программы run.exe, используется при проведении олимпиад по программированию.

Для начала сравним характеристики выполнения программ на примере простого кода. Программа ниже получает в качестве входного параметра число k и выводит сумму 1+2+…+k (считая ее в цикле)

#include <stdio.h>main(){i, k;s = 0;( "file.in", "r", stdin );( "file.out", "w", stdout );("%d",&k);(i = 0; i <= k; i++){= s + i;

};(stdout,"sum is %d\n", s);

return 0;

}

Представим результаты в следующих таблицах.


Таблица 1

Время выполнения программы для различного k (с)

Выделено минимальное время компиляции в каждом столбце.

k11 000100 00010 000 0001 000 000 000MinGW0.000.010.030.033.67Builder0.080.090.090.110.92Watcom0.090.090.090.090.81Visual C++0.010.030.030.030.78Intel C++0.000.010.030.030.22

Таблица 2 - затраченная память на выполнение программы (Кб)

k11 000100 00010 000 0001 000 000 000MinGW12281324132412921296Builder33883368338433763372Watcom34283252324032563244Visual C++14161408140814321436Intel C++14161416141614121388

Таблица 3 - размер полученного *exe файла (Кб)

MinGW18Builder165Watcom36Visual C++8Intel C++128

Далее в работе аналогичным образом проводится сравнение на более сложных задачах


2. Обзор задач


Задача 1. Посчитать количество способов расстановки k ферзей на шахматном поле размером N на N так, чтобы они не били друг друга [6].

Задача 2. Найти количество циклов длинной 5 в произвольном графе [7].

Задача 3. Найти количество циклов длинной 10 в произвольном графе [7].

Задача 4. Найти число способов расставить 144 короля на доске 24 на 24 так, чтоб они не били друг друга [8].


3. Тестирование


Задача 1. Посчитать количество способов расстановки k ферзей на шахматном поле размером N на N так, чтобы они не били друг друга

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


Ключ оптимизацииk2 (N=700)3 (N=80)4 (N=35)5 (N=20)6 (N=16)-O0720.58408.05853.90411.62506.21-O1391.03221.16531.15249.59321.78-O2388.55234.75494.38236.28305.54-O3423.37195.31414.96237.88303.38

Ключ оптимизацииK23456-od1066.56714.391873.54874.961046.33-oneatx -zp4488.66320.94685.28319.85370.83-ol889.21534.381676.56767.29916.58-on867.38560.141607.11768.80924.48-ot873.90530.201624.84725.37924.59Builder

Ключ оптимизацииk23456-Od721.27469.141046.30484.88589.84-O2716.01484.151080.57480.76601.49-Ox717.57510.921077.09481.01638.89-Ot712.83480.251123.11492.89616.73


Intel C++

Ключ оптимизацииk23456/Od365.20168.711263.90547.84687.01/O1361.03164.96510.15235.25314.06/O2366.13170.73425.77207.15289.86/O3382.97175.89414.92203.85263.35/Ox364.18174.63426.76204.75287.57C++

Ключ оптимизацииk23456/Od678.32316.57875.63263.41507.35/O1411.98310.50666.37281.16356.17/O2353.30325.03590.09262.13343.01/Ox367.26320.43600.28262.81344.34

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

Диаграммы с разными ключами оптимизации, где цифрами отмечены разные ключи компиляции


Watcom:

. -od

. -oneatx-zp4

. -ol

. -on

. -ot

C++:

. /Od

. /O1

. /O2

. /O3

. /Ox

C++:

. /Od

. /O1

. /O2

. /Ox

Builder:

. -Od

. -O2

. -Ox

. -Ot

:

. -O0

. -O1

. -O2

4. -O3


Диаграмма для двух ферзей на поле размером 500 на 500


Диаграмма для трех ферзей на поле размером 70 на 70


Диаграмма для четырех ферзей на поле размером 30 на 30


Диаграмма для пяти ферзей на поле размером 18 на 18


Диаграмма для шести ферзей на поле размером 15 на 15

Далее мы сравнили значения скорости выполнения программ для k ферзей, после того как они компилировались различными компиляторами с отключенной оптимизацией. Цифрами на диаграмме отмечены различные компиляторы:

. MinGW

. Watcom

. Borland Builder

. Intel C++

. Visual C++

Нижняя ось диаграммы - число k.



Так же мы проверили скорости выполнения программ для k ферзей, после компилирования с наиболее быстрой опцией компилятора


Исходя только из последней диаграммы, мы видим, что самым быстрым компилятором является Intel C++ в тех случаях, когда k > 2, для k = 2 быстрее всех работает программа, скомпилированная компилятором MinGW. В остальных случаях так же видно, что для k > 2 Intel C++ оказывается более оптимальным.


Задача 2. Найти количество циклов длинной 5 в произвольном графе. Цифрами отображены различные ключи компиляции


Задача 3 Найти количество циклов длинной 10 в произвольном графе. Цифрами отображены различные ключи компиляции


В этой задаче в силу специфики программы важным оказывается время компиляции. Следующая диаграмма отражает время компилирования программы с различными опциями



Задача 4 Найти число способов расставить 144 короля на доске 24 на 24 так, чтоб они не били друг друга. Цифрами отображены различные опции компилирования.


Также проводились тестирования для подсчета количества циклов длинной 12 в графе, но они не компилировались 32-битовыми компиляторами Intel C++ и Visual C++, MinGW выдал сообщение о нехватке памяти, Watcom выдал сообщение о том, что используются слишком сложные конструкции. Borland Builder скомпилировал, программа после компилирования работала 10 секунд для графа с 10 вершинами, для графа с 20 вершинами 8 минуту и более 2 часов для графа с 30 вершинами.


Заключение


Таким образом, мы провели несколько различных тестов для наших компиляторов, сравнивая скорость выполнения и скорость компилирования. Рассмотрели подробно опции компилирования у каждого из компиляторов, выбрали самые подходящие. Изучив внимательно данные таблиц и диаграмм, можно сделать вывод, что наиболее быстрым является компилятор Intel C++ с опцией -O3, особенно это заметно на более сложных тестах. Вторым после него идет Visual C++, чего и следовало ожидать, так как между ними есть некоторая схожесть. Далее компиляторы определились неоднозначно и по разному вели себя в каждой из программ. Но все же третьим по скорости является Watcom, а точнее с опцией оптимизации -oneatx -zp4, которая является самой быстрой из всех его опции. MinGW и Borland Builder находятся наравне друг с другом. Компилирование более сложных программ, таких как подсчет циклов длиной 12 (где более 1000 вложенных циклов) требует использования 64-битовых компиляторов, но они будут рассмотрены в следующей работе.



Список использованных источников

компилятор опция язык

[1]MinGW. Minimalist GNU for Windows [Электронный ресурс]. MinGW.org, 2009.URL: #"justify">[2]Embracadero [Электронный ресурс]. Embarcadero Technologies, Inc., 2010 URL: #"justify">[3]Intel [Электронный ресурс]. Intel Corporation, URL: #"justify">Загл. с экрана.

[4]Open Watcom [Электронный ресурс].Some rights recerved Creative Commons URL: #"justify">[5]Microsoft Visual Studio [Электронный ресурс]. Microsoft Corp., 2010

URL: #"justify">[6] Караваев А. М. Подсчет расстановок ферзей на шахматной доске // Казанская наука, 2010. № 10. С. 13-16.

[7] Караваев А. М., Воропаев А. Н. Эффективность распараллеливания явных формул для подсчета коротких циклов в графе : труды [Электронный ресурс] / "Параллельные вычислительные технологии' 2010" : труды международной научной конференции. г. Уфа : Уфимский государственный авиационный технический ун-т. 1 CD-ROM. Заглавие с этикетки диска.

[8] Караваев А. М. Задача о расстановке шахматных королей : материалы // Современные проблемы гуманитарных и естественных наук: материалы II международной научно-практической конференции. г. Москва, 2010. Том II. С. 12-16.

1.


Содержание Введение . Обзор компиляторов .1 MinGW .2 Borland Builder 1.3 Watcom .4 Intel C++ .5 Visual C++ 2. Обзор задач . Тести

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ