Кодогенерация под различные архитектуры

Здесь Вы можете найти или обсудить множество различных алгоритмов, их описаний, реализаций на VB и других языках.
FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Кодогенерация под различные архитектуры

Сообщение FireFenix » 20.08.2012 (Пн) 21:14

Собственно давно мучает вопрос:
Вот скажем, после некоторых действий пользователя и ограничений архитектуры, получена последовательность действий представленная в виде регистронезависимых логических/арифметических/др. команд.
Как правильно описать архитектуру процессора и адаптировать логические последовательности в машинный код?

Вот для распределения регистров, есть метод "Раскраска графа". Существуют ли похожие методы для адаптации логических последовательностей к конвееру и архитектуре процессора?
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Кодогенерация под различные архитектуры

Сообщение Хакер » 20.08.2012 (Пн) 22:10

Не понял.Ты компилятор что-ли свой пишешь?
По идее так: берёшь набор архитектур, анализируешь их, придумываешь один архитектуро независимый IL, делаешь для каждой архитектуры конвертор IL→Native.
В последствии новые архитектуры должны укладываться в уже существующую концепцию IL-а, или, упс, переделываем всё с начала.

С одной стороны, архитектур не так много, каждый день новые не появляются.
С другой стороны, бывают такие чудесные архитектуры, вроде например систем, в которых нет инструкций ветвления (всё-таки есть, но как бонус).
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Кодогенерация под различные архитектуры

Сообщение FireFenix » 21.08.2012 (Вт) 1:16

Хакер писал(а):Ты компилятор что-ли свой пишешь?

Есть не много 8)

Фитча в том что разные архитектуры имеют разные набор компонент и ихнюю компоновку, тем самым накладывая на конвеер те или иные ограничения.

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

Если ещё с обычными командами вроде просто.
То вот если скажем взять Atmega64 и процессоры серии IA32 (RISC и CISC - жопа и палец конечно :) , но смысл отличия архитектур), то у первого нет команд деления и FPU есть частью CPU. У IA32 же случае FPU идёт как сопроцессор, тем самым имеет свой стек/регистры/etc.
А если скажем взять ещё и архитектуру ненавистных мной 8битных PIC'ов, то там свои подвыверты с памятью, командами...

Т.е. хотелось бы не иметь отдельного транслятора для каждой архитектуры, а иметь 1 менеджер, который бы на основе описаний команд и архитектуры мог бы эффективно спланировать и создать машинный код.
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Кодогенерация под различные архитектуры

Сообщение Хакер » 21.08.2012 (Вт) 6:50

FireFenix писал(а):Т.е. хотелось бы не иметь отдельного транслятора для каждой архитектуры, а иметь 1 менеджер, который бы на основе описаний команд и архитектуры мог бы эффективно спланировать и создать машинный код.

Слишком сложно и не эффективно. Не эффективно в плане сложности закладывания способов оптимизации под каждую архитектуру. Хотя возможно такое дело есть, посмотри исходники, скажем, GCC. Я никогда не интересовался, как какую-то вещь делают другие, если мог сам придумать достойное решение.

Поэтому говорю, как сделано у меня (сам знаешь где), есть драйверы различных слоёв, берущие на себя определённые задачи. Нужно просто менять эти прослойки в соответствии с выбранной архитектурой. Прослойки должны быть специально заточенны/написаны под свою архитектуру, знать о ней всё и уметь оптимизировать её.

Каждая прослойка должна получать EFG+IL для того, что она должна сгенерировать.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.


Вернуться в Алгоритмы

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5

    TopList