[an error occurred while processing this directive]
|
У меня, например исчезла масса проблем при введении тотального выравнивания данных на 4 байта даже если это и не очень эффективно.
В целях профилактики. Эксепшены по памяти исчезли. Конечно это никак не гарантирует правильной работы программы. С другой стороны - эти эксепшены даже иногда помогают отловить такого рода ошибки.
Ну и, хотя конвейер защищённый, я никогда не допускаю его остановки. Если этого избежать нельзя, то вставляю NOP в явном виде.
Потом, по стилю написания. Верхний уровень программы - это C. На ассемблере прописываются ВСЕ функции и правильно оформляются согласно calling convention. Никакие опасные действия (например свистопляска с кольцевыми буферами и сложной адресацией) НИКОГДА не лежат вне этих ассемблерных функций. Эти функции тщательно отлаживаются на предмет ВСЕГО, прямо после написания, благо это сделать несложно. Программа на С только вызывает их, передаёт им параметры, занимается распределением локальных переменных и т.д. В VDSP ВЫКЛЮЧАЕТСЯ межпроцедурная оптимизация. (Это не касается мелких проектов, написанных только на С)
Конечно, такой подход не даёт полной оптимизации из-за несовершенства calling convention, но зато избавляет от массы головной боли. Да и если правильно разбить программу на такие функции, накладные расходы обычно не превышают пары процентов производительности.
Собственно, все это я говорю может быть зря, т.к. у каждого человека свой набор подходящих одному ему стереотипов программирования, но как говорится: я не виноват, вы сами первый спросили :)
E-mail: info@telesys.ru