Мир движется к 64-битным вычислениям, несмотря на то, что в результате программы не всегда работают быстрее или производительнее по сравнению с 32-битными. Многие 32-битные программы, по разным причинам, могут работать быстрее 64-битных. Одним из таких примеров является 64-битный JIT-компилятор .NET-фреймворка. Он выполняет большую работу для того, чтобы ваша программа работала очень быстро, но сам он, увы, не настолько быстр, как хотелось бы. Это мы и собираемся исправить. Представляем x64 JIT-компилятор нового поколения, который способен компилировать 64-битный .NET код в 2 раза быстрее.
Читать полностью »
Рубрика «Компиляторы» - 53
Встречайте RyuJIT: новый JIT-компилятор для .NET
2013-10-07 в 8:51, admin, рубрики: .net, clr, jit, microsoft, Компиляторы, переводы, метки: .net, clr, JIT, microsoft, компиляторыКомпилятор Intel C++ v13.0 для Android — спешите получить бесплатно
2013-09-18 в 10:09, admin, рубрики: intel compiler, Блог компании Intel, Компиляторы, Разработка под android, метки: intel compilerВ течение некоторого промежутка времени — возможно, совсем недолго — все желающие имеют возможность скачатьЧитать полностью »
Новости о LLVM для Windows
2013-09-06 в 14:29, admin, рубрики: AddressSanitizer, clang, LLVM, Компиляторы, метки: AddressSanitizer, clang, LLVMВо многих новостях про Clang на хабре я наблюдал один и тот же вопрос: «когда будет нормальная поддержка Windows?».
Уверен, задававшим подобные вопросы будет интересна свежая новость из мира LLVM.
Читать полностью »
OpenMP теперь доступен в Clang!
2013-08-30 в 4:11, admin, рубрики: c++, clang, openmp, Блог компании Intel, Компиляторы, параллельное программирование, метки: c++, clang, openmpСкоро первое сентября. Кто-то собирается в школу, кто-то — в институт. А мы предлагаем начать новые проекты с компилятором clang, который теперь поддерживает OpenMP!
Проект доступен здесь. Сейчас в его основе лежит clang 3.3. Небыстрый процесс ревью уже идет, и скоро код будет залит в транк clang'а, а значит войдет в его новые релизы.
Реализована полная поддержка стандарта OpenMP версии 3.1. Успешно проходятся следующие тесты: набор для валидации OpenMP от OpenUH Research Compiler, SPEC OMP2012 и внутренние тесты Intel. Исполняемый код c OpenMP, собранный clang'ом, демонстрирует производительность, сравнимую с другими компиляторами, поддерживающими OpenMP.
В качестве библиотеки времени выполнения использована библиотека Intel OpenMP Runtime Library, также доступная под свободной лицензией.
Читать полностью »
Компилятор языка программирования MiniJava
2013-08-28 в 19:16, admin, рубрики: .net, antlr, компилятор, Компиляторы, метки: .net, antlr, c++, компиляторКак в сравнительно короткие сроки написать компилятор какого-либо языка программирования. Для этого следует воспользоваться средствами разработки, автоматизирующие процесс. Я хотел бы рассказать о том, как я писал компилятор языка программирования MiniJava под платформу .NET Framework.
Весь процесс написания компилятора в целом отображён на следующем изображении. На вход подаётся файл с исходным кодом на языке программирования MiniJava. Выходом является PE-файл для выполнения средой CLR.
Далее я хотел бы сконцентрироваться на практической части описания.
Читать полностью »
«Зачем обновлять GCC компилятор?» или «Производительность GCC компилятора на Intel Atom от версии к версии»
2013-08-01 в 5:00, admin, рубрики: gcc, GNU, x86, Блог компании Intel, Компиляторы, Программирование, размер кода, метки: gcc, GNU, x86, размер кода
Давайте попытаемся понять, что нового сделано в GCC компиляторе для процессоров архитектуры Intel Atom и как это влияет на производительность и размер кода известного бенчмарка EEMBC CoreMark.
Выше приведен график, отображающий производительность CoreMark, откомпилированного с пиковым и базовым набором опций разными версиями GCC относительно производительности базового набора опций для GCC версии 4.4.6 (выше – лучше).
Читать полностью »
Ленточный конвейер для линейных данных
2013-06-21 в 11:33, admin, рубрики: Компиляторы, конвейеры, Песочница, Программирование, трансляторы, метки: конвейеры, Программирование, трансляторыПять лет назад мне довелось проектировать одну программу, обрабатывающую текст с управляющими командами. Количество этапов обработки было весьма существенным — 6-7 обработчиков последовательно могли пропускать через себя довольно большие объёмы данных, как бывает иногда в конвейерах Unix. Чтобы аккуратно выполнить поставленную задачу я разработал общий метод, который может пригодиться и в других местах. Идея, лежащая в основе этой статьи, действительно очень напоминает конвейеры Unix, но имеется несколько существенных отличий:
- конвейер Unix работает асинхронно, в разных процессах, в то время, как здесь требуется реализовать обработку в рамках одной программы, и распараллеливание может быть нежелательно;
- возможна передача любых данных, не обязательно текстовых, но которые можно охарактеризовать термином «линейные».
Под линейными данными я буду понимать последовательность объектов, допускающую переход к следующему (если он имеется). Примерами могут служить: бинарный файл, текст из символов UTF-8, последовательность лексем, команд. Сложная программа, обрабатывающая линейные данные, такая как транслятор, обычно выполняет несколько преобразований. Вот пример:
- чтение файла по байтам,
- декодирование в UTF-8,
- препроцессор,
- лексический анализ,
- синтаксический анализ.
Ни для кого не секрет, что в этом случае нет необходимости хранить данные целиком в памяти. Гораздо эффективнее, считывать файл порциями, которые сразу же проходят через все этапы преобразования, не задерживаясь в памяти.
Преобразователи выстраиваются в виде “конвейера”, каждый следующий получает данные от предыдущего. Преобразователь также может менять тип данных, например, у лексера буквы на входе, на выходе — лексемы.
У меня нет реализации этих алгоритмов, достойной публикации, поэтому я ограничусь общей идеей и схемой реализации. Примерные схемы даны на C++, в них используется виртуальное и множественное наследование, а также шаблоны. Читать полностью »
Исключение для библиотек времени исполнения GCC или почему в Clang до сих пор отсутствует поддержка OpenMP
2013-06-21 в 5:50, admin, рубрики: clang, Dura Lex, gcc, GNU, intel, LLVM, openmp, Компиляторы, метки: clang, gcc, GNU, intel, LLVM, openmp Используете GCC в проекте с закрытым исходным кодом? Применяете OpenMP? Вы же в курсе, что библиотека libgomp, с которой компонуются все OpenMP программы, распространяется на условиях GPLv3? Будьте так добры, откройте ваши исходники…
Читать полностью »
Официальный релиз LLVM 3.3
2013-06-18 в 23:55, admin, рубрики: c++, c++11, clang, LLVM, Компиляторы, метки: c++11, clang, LLVMДля тех, кто не следит пристально за развитием Clang/LLVM, сообщаю — состоялся релиз версии 3.3. LLVM продолжает развиваться семимильными шагами и новый релиз, как заявлено, первым поддерживает все фичи C++11, добавлена поддержка целой пачки новых таргетов и появилось несколько интересных тулов, основанных на инфраструктуре LLVM. Также продолжает развиваться оптимизатор — появился автовекторизатор, который работает по умолчанию на -O3, много сделано для улучшения уже уже существующих оптимизаций. Кому интересны подробности — добро пожаловать под кат.