<<<предыдущий список следующий>>>

Это - копия документа, находившегося на http://dz.ru. Авторские права, если не указано иначе, принадлежат Дмитрию Завалишину и/или Евгении Завалишиной. Все изменения, внесенные мной, находятся в этой рамочке.Пожалуйста, прочитайте disclaimer.


30 октября 1998 года

Получил тут по почте целую статью про 3DNow!, спешу опубликовать.

   
From: Igor A. Tryndin
Subject: По поводу 3DNow

Привет,

Несколько мыслей по поводу твоей статьи про 3DNow!.

"Регистры, которыми пользуется в работе 3DNow!, отображаются на стандартный набор регистров плавающей арифметики. Это - довольно неудачное решение, хотя причины, которые к нему привели, очевидны. [...] AMD решил, что лучше пожертвовать производительностью ради совместимости - смалодушничал. В итоге программисту приходится выбирать - 3DNow!, плавающая точка или MMX. Регистры общие на троих."

Не знаю, может быть сейчас на фоне Katmai это решение и выглядит неудачным, но не надо забывать, что технология 3DNow разрабатывалась полтора-два года назад (первые опытные образцы этих процессоров у нас, например, появились в середине 1997 года). Поэтому при разработке этой технологии AMD была вынуждена следовать за Intel'ом. Некорректно в данной ситуации обвинять AMD в "малодушии". И также неправильно отделять 3DNow от MMX. 3DNow расширяет набор команд MMX, и нельзя писать просто "под 3DNow", не используя MMX команды. Хотя на практике от MMX в 3DNow коде используется всего два-три типа команд (пересылка, перемешивание и битовые операции). Да, регистры общие. Этим   обеспечивается совместимость с существующим системным ПО, но рождает проблемы переключения состояния FPU - MMX/3DNow. И это может стать довольно большим ударом по производительности программы, если такое переключение происходить часто.

Не буду больше цитировать, в общем там все правильно. Просто напишу несколько слов по поводу написания/оптимизиции кода "под 3DNow".

MMX/3DNow оптимизация представляет из себя довольно трудоемкую задачу, поскольку нужно одновременно удовлетворять, пожалуй, десятку два требований, которые зачастую просто противоречивы. Ключевым моментом является правильность использования ресуров процессора, путем "перемешивания" команд с достижением как можно большей параллельности их выполнения, при учете зависимостей между командами, и понятно, с сохранением функциональности кода. Команды могут выполняться парами за один такт, если выпоняется ряд условий. Первое, каким способом декодируется команда при поступлении в конвейер выполнения. Она может быть коротко-декодируемой (short-decoded, 2 такие команды за такт), длинно- (long-decoded, 1 команда за такт) или векторно-длинно- (vector-long-decoded, 1 команда за 2 такта). На способ декодирования влияет куча параметров, среди которых тип команды, ее вид, длина команды в байтах, режим адресации и то как байты команды попадает в кэш. Довольно интересен последний момент - система команд современных x86 процессоров настолько "забита", что опкодов просто не хватает. Поэтому кодировка 3DNow команд такова, что у каждой (кроме femms и prefetch) присутвует двухбайтовый префикс OF, 0F. Это порождает эту проблему при размешении команды в кэш-линии (32 байта у K6) - декодеру для быстрого декодирования надо "видеть" третий байт 3DNow-команды и у него возникают проблемы, если один или два байта команды попали в последние 1-2 байта 32-байтной кэш-линии. Некоторые режимы адресации также вызывают векторное декодирование (в основном это связано с глубиной буфера декодера и команды длиннее 7 байт не могут быть быстро-декодированны). Здесь довольно непонятным выглядит требование не использовать режим адресации [esi] в MMX/3DNow командах. Это тоже вызывает векторное декодирование таких команд. Такой режим адресации рекомендуется заменять на [esi+0]. По-видимому, это связано с некими архитектурными особенностями CPU.

Кроме способа декодирования, понятно, нужно учитывать зависимости между командами по использованию регистров и вычислительных модулей CPU. Это тоже довольно нелегкая задача. Я, например, при написании/отладке кода часто веду две версии кода - распаренную и нераспаренную. Это позволяет легче находить и исправлять ошибки.

Итог всего этого - написание "хорошего" MMX/3DNow кода требует очень высокой квалификации программиста и весьма трудоемко. Кроме того ранние версии K6-2 имели не очень хорошую реализацию работы процессора с памятью, каждый cache-miss (закачка данных из памяти в линию кэша по команде доступа к этой памяти) обходился в примерно 40 тактов. Вместе с известно "слабым" FPU-модулем у K6 все это делало в реальности производительность K6-2 не особо высокой. Сейчас правда АМД уже вроде делает K6-3 у которого ряд этих проблем решен.

Ну и напоследок пару мыслей по поводу 3DNow vs KNI. Мое мнение - в то время, когда эта технология разрабатывалась это было весьма прогрессивным и несомненно правильным ходом. В настоящий же момент слегка некоректно сравнивать KNI c 3DNow. Поскольку понятно, что первый наверняка выиграет в этом сравнении, если просто говорить о производительности.

Вот каким будет следующий шаг AMD, что они покажут в K7, его сравнение с Katmai будет более интересным.

Игорь.

 

Спасибо за столь подробное письмо.

Правда, своего обвинения в малодушии я не снимаю - не вижу, что мешало AMD сделать то же, что и Intel в katmai, а именно - ввести новый режим процессора и выпустить патч для Win95-98 и NT. Более того (этого не придумал, или придумал, но не осилил сделать, и Intel) - можно было бы отмеппить регистры 3DNow! на MMX/FP в обычном режиме процессора и разнести их (хотя бы с регистрами плавающей точки) в режиме специальном - это бы дало и полную и безоговорочную совместимость при возможности использовать 3DNow инструкции, не меняя режима процессора, и возможность оттянуться в полный рост, переключившись в режим специальный.

Теперь о сложности программирования. Начиная с 8086, линия x86 пошла по пути усложнения системы команд и отхода от ортогональных принципов ее построения. Это снова и снова приводит к необходимости работать над кодом вручную, а не с помощью хорошего компилятора. И 3DNow, хоть и сделана не в Intel, следует этой традиции. Понятно, почему, но все равно грустно. Как сделать так, чтобы код под 3DNow генерился из сишного исходника? А никак.

В мире RISC это делается ровно наоборот - система команд пригодна исключительно для машинного кодогенерения, а компилятор знает, как с ней бороться. Думаю, так будет и с Мерседом. Судя по доступной мне информации, по крайней мере.

А пока - увы, все ручками. То есть при переходе от 286 к 386 Интел сильно исправил систему команд, и 32-битное ее расширение сделано довольно культурно, в лучших традициях. Но вот ни KNI, насколько это можно предположить на сегодня, ни 3DNow не вписываются в красоту.

Это, что называется, kludge.

Тем не менее, не стоит думать, что я как-то неуважительно отношусь к 3DNow. Это - хорошая (за исключением некоторых мелочей:)  работа, и, собственно, еще неизвестно, что бы было с KNI, не займись AMD этими инструкциями.

Кстати, описывая свою идею суперпроцессора, который будет сильнее Мерседа, Бабаян сказал, что готов научить его исполнять мерседовский и IA-32-шный код. Я так понимаю - путем двоичной перекомпиляции на ходу.

Ужасный облом - не нашел я в Интернете спецификаций iAPX 432. А без них писать про эту архитектуру неинтересно - я уже всего не вспомню. В "великих микропроцессорах" про 432 написано ужасно мало. Так что пока не найду советскую книжку по этому процессору - не напишу про него. Жаль. :-(

S_MusWM_uk_small.jpg (4317 bytes) Два моих любимых со школьных времен вина. И именно массандровские. Люблю это дело, и потому с радостью даю ссылку на эту непритязательную с точки зрения внешнего вида страницу. Это - аннотированная подборка ссылок на "винно-водочные" ресурсы Интернет плюс некоторый набор статей на эту тему. Через нее-то я и вышел на сайт Массандры. И едва не помер от повышенного слюноотделения. Ну да ладно, вот ужо завтра магазины откроются... :-)

Кстати, наконец-то я узнал, как делают сладкие вина - в смысле, как прекращают процесс брожения. Оказывается, есть два способа. Резкое охлаждение и добавление спирта. Заняться, разве, виноделием на тот год... сделать настоящее dz on wine :-)...

Да, авторы этого ресурса призывают их критиковать, им рекомендовать, ими восхищаться... какие там еще падежи есть? О - рассказывать о них друзьям за бокалом вина... ну и так далее. Занимать, короче, активную жизненную позицию. :-) Идеально - участвовать в наполнении ресурса, присылая свои статьи.

S_Kagor_uk_small.jpg (4741 bytes)

Данилов вынул из закромов Родины случайно упавшее туда год назад свое произведение. Это, кажется, первый случай в мировой практике, когда из них удалось что-то выудить. Злые языки, правда, говорят, что закрома от Даниловского произведения просто вывернуло :-), но мы в это не верим и Данилова любим. Хоть это и не настоящая его фамилия. :-)

В ответ на www.dz-online.de сотрудник Ситилайна прислал мне еще одну хорошую ссылку - http://www.cityline.de :-). Интересно, сколько процентов нашего DNS скопировано в домене de? :-) Кто бы провел исследование. Тутубалин, ау? :-)

Собак-то кормить надо, люди добрые. А то себе дороже выйдет. Правда, может это я зря так, и хозяин ее вполне кормил, да только вот собака захотела пищи духовной? chewed-pilot.gif (30582 bytes)

А вот такую альтернативу мс-ворду видали? :-)

   
From: Andrey N. Khristov
Subject: MS Word и варианты.

Хай.

Отчасти я с тобой согласен - MSWord на самом деле плотно сидит на рынке. Но хотелось бы сказать о своем опыте...

Я "плотно сижу" на Adobe Pagemaker. Это конечно же не оффисный предмет, но по функциональности и удобству лично для меня весь MS остается далеко за флагом...

Самая тривиальная проблема: надо сделать плакатик сайза этак А2, а потом его напечатать. Принтер, ессно, А4. На PM я даже не напрягался ни секунды, а как это люди на MSW делают?? Не показательно, но с этим слишком часто обращаются (сезон??).

Да и вообще, я на PM делаю уже любые документы. И вкладочки для аудиокассет и CD - на нем, все на нем... Удобно, когда один продукт так много позволяет. (примечание: если пользователь - чайник, его не спасет никто, кроме MS. Когда-то давно я решил, что не хочу быть чайником...)

Можно считать мое письмо отчасти рекламой PM, отчасти предолжением осмотреться для тех, у кого еще остались глаза. Если бы я жил в USA, я бы купил PM совершенно честно (а тут не буду - поддержки никакой у наших деятелей)

 

Честно сказать, после того, как я поработал с пейджмейкером некоторое время по необходимости, тоже потянуло делать в нем все и вся. Но будем же откровенны - есть разные задачи. Есть задача, которая танцует от заранее заданного размера бумаги и требующая довольно жесткого размещения на ней материала. Это - PM. Есть задача, которая толерантна по отношению к размещению информации и размерам листа, и требует простоты. Это - Word. Служебную записку не резон верстать в PM. Ее нужно набить, выделить заголовок болдом и размером, после чего кинуть на печать. Для этого Word и есть.

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

Идея напоминает несколько принцип передачи сигнала с уровнем ниже уровня шумов. Если канал - один, то это невозможно, так как никак нельзя вычленить сигнал из шума. А вот если сделать это сразу на нескольких каналах, то вычленить сигнал из шумов станет возможно!

В трехмерном мире несколько каналов обеспечиваются распространением сигнала по нескольким траекториям - с отражением от стен, к примеру. Надо только суметь этим эффектом воспользоваться.

Компании Diamond Multimedia, GoodNoise, MP3.com, MusicMatch и Xing Technology решили образовать ассоциацию MP3. Ассоциация будет заниматься, очевидно, продвижением этого формата звукозаписи, в том числе и методом лоббирования.

Правильное решение.

На сцене борьбы правительства США и Микрософта появился Apple с заявлением, очень похожим на заявление Netscape. Свидетель показал, что Miscrosoft и здесь оказывал давление с целью "раздела" рынка, то есть, просто-напросто, предлагал Apple покинуть интересующий Microsoft сегмент рынка.

В сочетании с заявлением Netscape это звучит для Microsoft угрожающе.

Были предъявлены и другие факты, но это уже не так интересно, и я, с вашего позволения, опущу их. Тем более, что со свидетелем от Apple еще будут воевать адвокаты Микрософта, и выводы будет разумно делать только после этого.

Прошел слух, что в недрах Микрософта разрабатывается новое яваубийственное оружие - UVM. Универсальная виртуальная машина, которая бы сделала переносимыми почти все языки, популярные сегодня.

Одно непонятно - эта штука столь же убийственна для монополии Windows, сколько и для Явы. Зачем Микрософту такая злая бомба?  Что что-то тут не так.