Мемуарное
где-то в конце 90-х (или в начале 2000-х) довелось мне поучаствовать в забавном жидо-комуннистическом-евро-масонском проекте:
В смысле, что там был полнейший интернационал: идея заговора заключалась в распиле ЕС-овского бабла совместными усилиями конспираторов под предлогом разработки супер-пупер-экономичного процессора для GSM.
Рулил конспирацией кажется тогда еще не разогнанный ItalTel (который тогда был СП-шкой Telecom Italia и Siemens), а в копмлоте участвовали:
1) ItalTel, как и было сказано, был духовным вдохновителем.
2) Греки, которые были генподрядчиками
3) Бельгийцы, которые делали процессор
4) Жыды: DSI inc - у той со странички вылетали истребители, а в разделе projects они рекламировали проекты навроде "апгрейдов для ракет земля-воздух производства как западного, так и восточного блоков" - там они еще напирали на какой-то снаряд реактивный с оптическим сенсором и на то, что никто акромя их этот сенсор юзить не умеет.
Потом еще от нас туда ездили в командировку (я отвертелся) - резюме - "по русски не говорит только начальник отдела и уборщик" - в общем "там бывший наш народ" не на четверть, а на 90%.
Жыдам, вопреки стереотипам, выпала самая грязная работа - программирование собственно телефонной логики GSM
5) russkies, в нашем лице, программировали канальные алгоритмы: модем, вокодер, etc. Работа очень приятная: алгоритмы четко прописаны, требуется максимум эффективности, абсолютно жесткий real-time, сверточные коды, алгоритм Витерби (и в модеме и в коррекции ошибок, кстати чуть ли не единственное известное мне практическое применение динамического программирования). Ассемблер, есс-но. И "чудо-архитектура".
Но это все преамбула - вполне обычный европопил и, вероятно, еврооткат.
А дальше забавно:
В этом самом процессоре [бельгийскими вероятно, хотя точно не скажу] анжинерами было придумано много всяких интересных команд для "эффективной обработки данных" - типа чтобы сверточные полиномы по модулю правильно суммировать etc. Интересная фишка, как обычно, оказалась в совсем другом:
Например команда, предназначенная для того, чтобы делать очередную итерацию по сверточному коду за несколько тактов оказалась совершенно бесполезной:
Использование известного трюка, когда функция кодируется через логические операции и сдвиги и применяется сразу к 32-битному слову, позволяла достичь того же результата гораздо быстрее "конвенциональными средствами".
Та же самая судьба постигла и все без исключения остальные придумки - что-то там для ускорения Витерби etc.
Что характерно - самая времяемкая операция как раз, несмотря на аппаратную тривиальность, поддержана не была:
В GSM в какой-то момент производится псевдослучайное перемешивание битов в блоке (длиной около 500 бит) - во избежание кучкования ошибок - чтобы помехоустойчивые коды лучше работали: перестановка жестко фиксирована и прописана в стандарте. Захаркодить это раз плюнуть - в сущности просто коммутация битиков. А вот как вы сами понимаете, программно это делается с довольно большими издержками - кажный битик сначала достань, а потом положь.
И вот этого-то как раз сделано и не было.
Мораль - не подпускайте электронщиков к проектированию архитектуры. Они знаю как делать, но не имеют ни малейшего представления что делать.