На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела FAQ в группе разделов С++.
1. Раздел FAQ предназначен для публикации готовых статей.
2. Здесь нельзя задавать вопросы, для этого существуют соответствующие разделы:
Чистый С++
Visual C++ / MFC / WTL / WinApi
Borland C++ Builder
COM / DCOM / ActiveX / ATL
Сопутствующие вопросы
3. Внимание, все темы и сообщения в разделе премодерируются. Любое сообщение или тема будут видны остальным участникам только после одобрения модератора.
Модераторы: B.V., Qraizer
Страницы: (2) 1 [2]  все  ( Перейти к последнему сообщению )  
> Преждевременная оптимизация , анализ и выводы.
    Цитата leo @
    RCR reg,1 для семейства P6, поскольку в офиц. оптим-мануалах ... а для 06h только Throughput = 4 и то для общего случая (без указания второго операнда)
    06h - это мобильные процессоры. Для них декларируется "one cycle in Pentium 4 processor is NOT equal to one cycle in Pentium M processor" Примечание к таблице говорит, что вариант со сдвигом на 1 разряд является оптимизированным, сдвиг на другое значение является более тормозным. "248966-009 IA-32 Intel® Architecture Optimization" дает для RCR/RCL reg,1 значение 4/1
    Цитата leo @
    с учетом корреляции с adc\sbb
    Документ от Intel "248966-009 IA-32 Intel® Architecture Optimization" дает для ADC/SBB в лучшем случае 6/2. Документ наверное устарел, но видимо хотя бы для части процессоров эти данные правильные.
      Цитата trainer @
      06h - это мобильные процессоры

      Нет, 06h это "классическая" архитектура P6 начиная с Pentium II\III, которая была без лишнего шума развита в Pentium M (во времена господства тупиковой ветки NetBurst), и затем стала основой современных Core. Достаточно в винде глянуть в "Сведения о системе" Processor -> Family или переменную окружения PROCESSOR_IDENTIFIER - для вариаций P4 это значение равно 15=0Fh, а для Core = 6
      Ну и потом можно глянуть труды А.Фога (microarchitecture.pdf и instruction_tables.pdf), который наверняка свои супер-подробные сведения не из пальца высосал ;)
        Цитата AndNot @
        Давай отделять мух от котлет и не пытаться сравнить железо (SSE) с языком программирования (асмом)

        Отчего бы не сравнить? Тем более, что я не говорил о ручном набивании инструкций x86, пусть этим занимаются компиляторы с настройками максимальной оптимизации

        Цитата AndNot @
        В общем, если есть желание, то я непрочь провести тесты заново, создавай тему, а я поищу в загашниках те тесты, да напишем новые. Будет даже интересно узнать, насколько с тех пор улучшилась аппаратная реализация SSE (а в этом сомнений нет) и оптимизаторы компиляторов. Заодно и целочисленную арифметику протестируем, насколько я знаю CPU vs SSE еще никто не проводил.

        Желание есть, а вот знаний по SSE нет. То есть, если я и смогу предложить какие-то тесты, то только на высоком уровне с настройками для компилятора, принуждающими использовать тот или иной набор инструкций
        Такой вариант подходит?
          B.V., создавай тему, предлагай конкретные тесты. Все желающие смогут выложить скомпилированный сишный код, из которого я выдеру нужную функцию и выложу готовый файл, с сорсами на асме, для замеров всеми желающими, на любых камнях. Эта мудреная схема нужна с той целью, что сишные компиляторы любят "шульмовать" и умело делают не только все возможные предвычисления, но и порой умело разносят вычисления по всему коду екзешника, из-за чего часть вычислений не попадает в замеры времени исполнения. С этим я уже сталкивался, после чего зауважал VC++ и IntelC :)
          Ну и по мере возможности буду предлагать свой код, под FPU и CPU (fixed point).
            Цитата leo @
            Нет, 06h это "классическая" архитектура P6 начиная с Pentium II\III
            На счет второго пня не уверен, но пень про точно выдавал на CPUID шестерку, как и последующий пень три :yes:
              В доке Intel® Processor Identification and the CPUID Instruction приведена кодировка Family & Model для всех процев от Intel486™ до "наших дней" ;)

              PS: Кстати и в упомянутом trainer'ом мануале по оптимизации (по кр.мере в "свежем" 248966-020) перед таблицами латентностей приведена краткая справочка по кодировке Family_Model, в которой представлены все Core и Enhanced Core без различия по мобильности, и соотв-но цифирьки по ADC\SBB нужно смотреть в таблице C-13a, а не в C-13 ;)
                Преждевременная оптимизация – зло в том случае, если она снижает читабельность, или замедляет сочинение исходника. То есть когда увеличивает трудоёмкость создания и/или поддержки. Потому что усилия приложены, когда не известно, будет ли от них толк. Потому что когда окажется, что оптимизация нужна в другом месте, так как именно в другом месте она эффективней, окажется также, что сделанная оптимизация сделана вместо нужной. Может лучше будет вместо этого оптимизировать что-то другое? Ели же оптимизация прозрачна и дополнительного труда не требует, то не имеет значения, на каком этапе она сделана. Более значимой оптимизации она не мешает. Если ты точно знаешь, что быстрей присвоить литерал, чем гонять цикл, а вспомнить двенадцатую степень двойки можешь меньше, чем за секунду, то не имеет значения, сразу ты напишешь
                ExpandedWrap disabled
                  a=4096;
                вместо
                ExpandedWrap disabled
                  for (a=1, i=12; i>0; a*=2, --i);
                , или потом заменишь. Более того, иногда даже проще оптимизировать сразу, чем вносить изменения. И пофигу, умеет ли компилятор делать ту же замену. Если её не делать, то будет медленнее.
                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                0 пользователей:


                Рейтинг@Mail.ru
                [ Script execution time: 0,0275 ]   [ 15 queries used ]   [ Generated: 28.03.24, 09:54 GMT ]