Для тех, кто не следит пристально за развитием Clang/LLVM, сообщаю — состоялся релиз версии 3.3. LLVM продолжает развиваться семимильными шагами и новый релиз, как заявлено, первым поддерживает все фичи C++11, добавлена поддержка целой пачки новых таргетов и появилось несколько интересных тулов, основанных на инфраструктуре LLVM. Также продолжает развиваться оптимизатор — появился автовекторизатор, который работает по умолчанию на -O3, много сделано для улучшения уже уже существующих оптимизаций. Кому интересны подробности — добро пожаловать под кат.
Рубрика «LLVM» - 9
Официальный релиз LLVM 3.3
2013-06-18 в 23:55, admin, рубрики: c++, c++11, clang, LLVM, Компиляторы, метки: c++11, clang, LLVMПринципы быстрого Хаскеля под GHC
2013-03-05 в 8:21, admin, рубрики: ghc, haskell, LLVM, yarr, абстрактное синтаксическое дерево, высокая производительность, каррирование, Компиляторы, ленивые вычисления, метки: ghc, LLVM, yarr, абстрактное синтаксическое дерево, каррирование, ленивые вычисленияGHC (Glasgow Haskell Compiler) — стандартный компилятор Хаскеля. GHC — один из самых крутых компиляторов в мире, но к сожалению без дополнительных телодвижений скомпилированные им программы по скорости больше напоминают интерпретируемые, т. е. работают очень медленно. Однако если раскрыть весь потенциал компилятора, Хаскель приближается по производительности к аналогичному коду на C.
В этой статье я обобщаю опыт выжимания максимума из GHC при создании dataflow-фреймворка Yarr.
Читать полностью »
Yarr — dataflow-фреймворк (обработки изображений) на Хаскеле
2013-03-05 в 8:21, admin, рубрики: ghc, haskell, LLVM, repa, yarr, абстрактное синтаксическое дерево, конвейер, обобщённое программирование, обработка изображений, параллельное программирование, процессор, Эквализация, метки: ghc, LLVM, repa, yarr, абстрактное синтаксическое дерево, конвейер, обобщённое программирование, процессор, Эквализация
Зондирование обстановки на Реддите показало, что едва ли хоть кто-то всерьез занимается обработкой изображений на Хаскеле, несмотря на то, что достаточно популярная библиотека Repa предполагает работу с изображениями как одно из основных приложений. Надеюсь, ситуацию сможет изменить библиотека Yarr (документация, гитхаб).
Я называю библиотеку dataflow-фреймворком, потому что она обобщена для обработки массивов (от одномерных до трехмерных) элементов любых типов, в том числе векторов чисел, например координат, комплексных чисел. Но основное предполагаемое применение — обработка двумерных массивов из векторов цветовых компонент, т. е. изображений. Фреймворк непосредственно не содержит алгоритмов обработки изображений, а предоставляет мощную инфраструктуру для их написания.
Читать полностью »
О компиляторах и интерпретаторах
2013-02-26 в 8:42, admin, рубрики: jit, LLVM, python, виртуальная машина, интерпретаторы, Компиляторы, Песочница, метки: c++, JIT, LLVM, python, виртуальная машина, интерпретаторы, компиляторы, Лисп
Если ты всегда мечтал написать свой язык программирования — добро пожаловать. Здесь ты наверняка найдёшь для себя что-нибудь интересное.
GitHub-юзер yawnt собрал чудесную подборку ссылок для любителей драконов, языков и прочих вкусных внутренностей. А знающие камрады в комментариях наверняка поделятся с тобой и другими яствами.
Пишет yawnt следующее:
С каждым днём мне всё интереснее тема компиляторов, интерпретаторов и дизайна языков программирования в целом. И я решил поделиться с народом ссылками на собранные мной материалы (большую часть мне самому ещё предстоит прочитать :<). Надеюсь, кому-нибудь они окажутся полезными.
Я не включил (и не собираюсь) в список ссылки на официальную документацию, т. к. считаю очевидным, что первым делом следует смотреть именно туда ;P.
Читать полностью »
В Google Native Client появилась поддержка архитектуры ARM
2013-01-23 в 14:37, admin, рубрики: Google Chrome, LLVM, NaCl, Native Client, PNaCl, Веб-разработка, метки: LLVM, NaCl, Native Client, PNaCl, АРМ Native Client (NaCl) позволяет браузерным приложениям запускать нативный низкоуровневый код в изолированной «песочнице». Благодаря этому критически важные для производительности части можно переписать на C или C++. До сих пор NaСl мог работать лишь на x86-совместимых компьютерах. Поддержка ARM имеет для Google большое значение, так как младшие модели ноутбуков на Google Chrome OS построены на архитектуре ARM.
Читать полностью »
Язык программирования o42a
2012-11-04 в 9:45, admin, рубрики: LLVM, компилятор, Песочница, язык программирования, метки: LLVM, компилятор, язык программированияЯ не люблю программировать. Мне нужен результат.
Понятно, что любой «результат» в программировании — промежуточный. За ним следует сопровождение, исправление ошибок, развитие, а, следовательно, работа с уже написанным кодом. Поэтому результат включает в себя не только работающую программу, но и её исходный код, сопровождение которого будет тем дороже, чем меньше он будет к этому пригоден, или, попросту, чем больше в этом коде насвинячили.
Но главное — чтоб заработало. И чем раньше — тем лучше.
Всё, что отделяет задумку от результата — это программирование, суть которого — это изложение мыслей, логики решения поставленной задачи — в представлении, доступном для машинной обработки.
Так вот. Современные языки программирования мешают излагать мысли, обременяя множеством деталей, не относящихся к решаемой задаче, и требующихся лишь для того, чтобы до транслятора языка «дошло». И речь даже не о синтаксисе, хотя многие, особенно компилируемые, языки чрезмерно многословны. Речь, прежде всего, о языковых сущностях, что и есть те «термины», в которых должно изъясняться. Эти сущности — например функции, переменные, классы, методы, пакеты, пространства имён, обобщения, шаблоны — слишком узкие, специализированные, предназначенные больше для машинного представления, нежели для человеческого понимания. Они заставляют переводить мысли на их язык. Это не сложно, конечно. Но это совершенно не относится к решаемой задаче. Выбор подходящих языковых сущностей и перевод на них отвлекают от задачи, снижают концентрацию и, следовательно, снижают эффективность разработки. И, я подозреваю, существенным образом. Понимание же сути в процессе чтения такого кода ещё более затруднительно, что также не лучшим образом влияет на производительность труда, особенно при командной разработке.
Проблема современных языков программирования в том, что они заставляют программиста приспосабливаться к машине или к теориям, на которых они основаны, вместо того, чтобы самим приспосабливаться под программиста. И то, что математические теории строги, железо — железное, а удобство программиста — субъективно, не означает, что не надо даже пытаться.
Основная идея o42a — автоматизировать труд программиста. И достигается это путём радикального сокращения видов языковых сущностей до одного-единственного, способного непосредственно заменить их все. Задача же эффективного машинного представления такой сущности целиком ложится на компилятор.
Маленькая C-функция из преисподней
2012-07-04 в 12:26, admin, рубрики: gcc, icc, LLVM, Компиляторы, переводы, Программирование, метки: c++, gcc, icc, LLVM, компиляторыНедавно мой студент и я пытались понять одну тонкость в стандарте C. Самый простой способ прояснить подобные вопросы — это узнать, учли ли её разработчики компиляторов, то есть написать код и посмотреть, что с ним будут делать разные компиляторы.
Я написал такую функцию:
int foo (char x) {
char y = x;
return ++x > y;
}
Так как ++x
увеличивает на 1 значение x
, очевидно, что функция должна возвращать "1" для большинства значений x
. Вопрос состоит в том, что она вернет для значения CHAR_MAX?
Cтек AMD для Linux будет открыт полностью
2012-06-23 в 10:30, admin, рубрики: amd, hsa foundation, linux, LLVM, open source, гетерогенные вычисления, Процессоры, стек процессора, метки: amd, hsa foundation, LLVM, гетерогенные вычисления, стек процессораНеделю назад на конференции AMD Fusion Developer Summit была представлена новая открытая инициатива Heterogeneous System Architecture (HSA) Foundation, в которую вошли компании AMD, ARM, Texas Instruments, MediaTek и Imagination. Цель HSA Foundation — создание единой, открытой промышленной архитектуры для гетерогенных вычислений (CPU+GPU), гетерогенных процессоров, которые будут объединять два или более разных типов процессоров в одном чипе.
В обсуждении этой новости на форумах Phoronix один из сотрудников AMD Джон Бриджман (John Bridgman) указал на презентацию, в которой конкретно перечисляется, что AMD собирается передать в Open Source в рамках HSA.
Оказывается, AMD намерена полностью открыть стек, включая LLVM, ассемблер, библиотеки, runtime-компоненты, финализатор и драйвер ядра для включения в дистрибутивы Linux.
Читать полностью »
Cтек AMD для Linux будет полностью открыт
2012-06-23 в 10:30, admin, рубрики: amd, hsa foundation, linux, LLVM, open source, гетерогенные вычисления, Процессоры, стек процессора, метки: amd, hsa foundation, LLVM, гетерогенные вычисления, стек процессораНеделю назад на конференции AMD Fusion Developer Summit была представлена новая открытая инициатива Heterogeneous System Architecture (HSA) Foundation, в которую вошли компании AMD, ARM, Texas Instruments, MediaTek и Imagination. Цель HSA Foundation — создание единой, открытой промышленной архитектуры для гетерогенных вычислений (CPU+GPU), гетерогенных процессоров, которые будут объединять два или более разных типов процессоров в одном чипе.
В обсуждении этой новости на форумах Phoronix один из сотрудников AMD Джон Бриджман (John Bridgman) указал на презентацию, в которой конкретно перечисляется, что AMD собирается передать в Open Source в рамках HSA.
Оказывается, AMD намерена полностью открыть стек, включая LLVM, ассемблер, библиотеки, runtime-компоненты, финализатор и драйвер ядра для включения в дистрибутивы Linux.
Читать полностью »
Состоялся релиз LLVM 3.1
2012-05-23 в 15:27, admin, рубрики: AddressSanitizer, clang, LLVM, компилятор, Компиляторы, метки: AddressSanitizer, clang, LLVM, компилятор22 мая состоялся релиз LLVM 3.1, семейства компиляторных инструментов, построенных на модульной основе. Проект активно развивается как альтернатива GCC такими компаниями, как Apple и Google.
Наиболее заметные изменения включают в себя улучшенную поддержку нового стандарта C++'11 Clang'ом (включая лямбды, списки инициализации, константные выражения, пользовательские литералы и атомики); появление AddressSanitizer — инструмента для динамического отлова ошибок работы с памятью; серьёзные улучшения времени компиляции и появление новых фич для ARM архитектуры; заметно улучшенная поддержка архитектуры MIPS (включая MIPS64).
Для тех, кому интересны подробности — добро пожаловать под кат.Читать полностью »