[an error occurred while processing this directive]
|
т.е. если на С то нужно писать, а не портировать готовый код
1. Стараться структурировать код на небольшие модули, по одному циклу
на модуль
2. По возможности убирать условные операторы и операторы перехода из
циклов, они разрушают конвейер или вроде того, один условный оператор
обычно можно пристроить (к-во условных регистров ограничено, причём один из них уже является счётчиком цикла)
3. Руками делать unfolding (оптимизатор делает плохо) циклов, чтобы загрузить оба ядра
4. Если использовать библиотеки примитивов, то обязательно делать их inline-функциями, call разрушает конвейер однозначно
Есть ещё одна не очень приятная особенность архитектуры - процессор не может восстановить контекст после прерывания. А по этому во время выполнения циклов ВСЕ прерывания запрещены автоматически (лэтчатся). Но надеюсь, что Вы не доберётесь до частот, когда это фатально
Всё равно на С проще писать и документировать. Представляете себе читаемость кода на параллельном ассемблере? В действительности это на уровне проектирования ПЛИС или микропрограммирования , это не есть программа в нормальном понимании
E-mail: info@telesys.ru