соединить с платформозависимыми кусками? То есть, например, основная часть идёт через промежуточное представление, а небольшая часть в виде [ассемблера, например] под конкретную версию архитектуры (под каждую, естественно, руками наоптимизированного).
P. S. Два вопроса и пранк вышел из-под контроля. Спасибо за интересные обсуждения!😁
Что есть платформозависимая кусок? :) Например на вход Denver идёт ARM код, доступа к родному режиму к программиста нет. 1. Можно ли считать, что у этого процессора нет платформозависимой части? Да. 2. Мешает ли это ему запускать любые программы? Нет.
Как вы смотрите на такой вариант оптимизации под конкретные возможности ISA? if (e2k_version() >= 5) { e2k_kuznechiK_simd128(...); } else { kuznechik_generic(...); } Во время запуска на v5+ оптимизатор просто отбросит вторую ветку.
Это очень даже хороший вариант, примерно он традиционно идёт на x86: проверяем наличие расширений и выбираем нужную ветку. Единственный важный момент: чтобы эти вызовы шли в нативный код, потому что ручная оптимизация подобных критических кусков [сейчас] даёт лучшие результаты, чем любые техники с PGO.
Да я именно так и предполагал. Фактически в распространяемой программе должны быть все возможные варианты ручной оптимизаций под конкретную версию e2k, если это имеет место быть. Компилятор, как и в x86, должен предоставлять возможность использовать интринсики любой версии, а не как сейчас в lcc, когда -march=e8c не даёт использовать инстринсики с v5+.
Тогда всё супер! Насчёт обоснованности такого поведения компилятора не скажу, но лечится легко, кстати: можно собирать несколько статических библиотек под нужные версии с нужными флагами.
Обсуждают сегодня