Да как то всегда думал, что программный условный переход - враг всякой оптимизации. Да и не только я так думаю, разработчики компиляторов - тоже.
Тогда я не понимаю, о чем мы спорим? Почему Вы считаете, что
Господи, разговор ни о чём. Случись в Вашем алгоритме условный переход и вся Ваша оптимизация пойдёт лесом.
Вы представляете о чем Вы говорите? Вообразите себе тупой метод поворачивающий снимок вложенным циклом. В этом методе уже условных переходов хватает. Оптимизация метода под кэш мало того что добавляет условных переходов, так она еще и увеличивает кол-во вызовов, делает более активным использование стека, кол-во выполняемого кода увеличивается. Так все становится плохо, но грубо оптимизированный под кэш код без распараллеливания на медицинских снимках (аки 40Мб) работает быстрее в 80 раз чем тупой вложенный цикл. Но это код не счетный. Это чистая нагрузка на обмен с памятью. Тем не менее, значительная часть алгоритмов, обрабатывающих массивы информации, замечательно оптимизируются под кэш с выигрышем по производительности в разы. Кстати, разработчики фотошопа об этом знают.
Целочисленная арифметика может дать выигрыш перед плавающей раза в полтора, не больше. И то при условии, что в программе кроме арифметики ничего нет. А любой обсчет физических моделей так или иначе связан с данными, причем большими данными, не мне Вам объяснять это. А работа с данными - это циклы, часто вложенные, адресная арифметика, работа со стеком, вызовы и т.п. Арифметика редко занимает значительную часть процесса, потому переход на целочисленную арифметику мало эффективен, пока не используются табличные функции. Но табличные функции это не целочисленная арифметика, это уже из разряда мемоизации.
Ну да правильно, SSE за 10 лет сменила 5 версий, а целочисленная арифметика как была так и есть. Удобно! На кой изучать технологии, они умрут, а таблички с операциями останутся.
Не очень-то Вы и занимаетесь оптимизацией. Если вдруг решите что-то пооптимизировать, то вот мой Вам совет:
Таблички с производительностью операций БЭСМ-а продайте в музей Адоба задорого! Только тсс!!!! чтобы режим не напрягся!
Вернусь к Вашему высказыванию:
А вот оптимизация под кэши, это - химера. Может сработать на плюс, а может сработать и на минус.
Да Вы понимаете СКОЛЬКО стоит промах кэша? Это такая огромная задержка, что за время обновления кэша можно было бы выполнить сотни полезных операций. Сравните время подгрузки кэша с потерей на условном переходе, который якобы может сломать оптимизацию под кэш, и может быть Вы поймете, какую охинею написали!
Потому не важно, на чем Вы пишете, на ассемблере или на VB! Если вы написали критический код не по кэшу, то никакие трюки с регистрами или с целочисленной арифметикой Вас не спасут. Если используете массивы информации размером больше полмегабайта, то профайлер в зубы, руки в плечи и вперед!
Ой, да Вы же не знаете поди, что такое профайлер?
У Вас есть данные о производительности Фотошоп в данных условиях? Упала ли она(именно для Фотошоп), осталась ли на прежнем уровне?
Понимаете ли в чем дело, оптимизированный под кэш код работает быстрее вне зависимости от того, запущен ли фотошоп али нет. А промахи кэша они тем дороже, чем больше программ активно используют кэш. Причем, если моя программа написана мимо кэша, то фотошоп от этого тоже будет страдать.
А Вы случаем, не путаете кэш со свапом? Чего Вы про фотошоп вспомнили?
Ой, да конечно. Только вот железо не умеет отрисовывать окна и их содержимое. Оно делает только то что Windows, или X-сервер им скажет.
Опять юлите. Вы сначала завели речь о графических примитивах и целочисленных алгоритмах, их рисующих, потом перекинулись на окна и их содержимое. Содержимое рисуется из примитивов, не так ли? Примитивы рисуются железом, Винда она только подает примитиву железу, если конечно же железо не VGA и в винде стоят дрова))). Оно конечно, алгоритмы растеризации не сильно изменились со времен Брезенхейма и Кармака, но графическое железо охотно хавает плавающие координаты и проецирует их с высоким качеством. Там работают толпы конвейеров, одни проецируют геометрию, вторые растеризуют, третьи занимаются шейдингом, четвертые маскируют по буферам, пятые делают постпроцессинг. И знаете, целочисленной арифметики в пайплайне GPU не густо.
Кто те 10 человек, мне аж самому интересно. Но мне как то не надо читать документацию, чтобы знать базовые вещи. Например то, что процессор НИЧЕГО не знает, и НЕ должен знать, о том НА КАКОМ языке написана программа, которую он исполняет. Он видит только ассемблерный код и всё.
Прошу прощения, это не 10 человек, это "коллектив в несколько десятков человек,
каждый ОЧЕНЬ хорош в своей области, и НЕ желает НИЧЕГО знать о других" с Ваших слов. Хорошего же Вы о них мнения :huh: Уверены, что никто из них не знает, чем современные камни отличаются от БИС?
Intrinsic, SSE* тоже никто не слышал? Если так, то мне искренне жаль. Обновить парк машин и гнать оптимизаторов вшею, расходы на железо окупятся в пол месяца! Негуманно, разве что...
Да кто Вам сказал, что процессор разбирается в языках программирования? Ассемблерный код он тоже, кстати, не знает. Процессор разбирается в машинном коде, но выполняет он не его. Я уже писал, что он анализирует код, сам распределяет регистры для оптимального выполнения, самостоятельно принимает решения об изменении порядка команд, дабы повысить эффективность, выполняет за такт несколько операций. C2D, например, умеет выполнять до 4х операций за такт одним ядром. При этом, он выполняет предсказание переходов и подгружает соответствующий код загодя, чему мешают некоторые любители ручной оптимизации, складывающие адреса переходов в регистры.
Я бы послал Вас на сайт Intel-а, но Вы все равно ничего читать не будете, а будете рассказывать мне прописные истины 20-ти летней давности и удивляться, откуда я все выдумываю.
Подумайте хотя бы вот о чем: Если взять P4 и C2D с одинаковой тактовой частотой 3Ghz (это будет C2D E8400), то одно ядро C2D порвет P4 как тузик грелку. Это не предположение, это факт! Что на синтетике (чистый замер FLOPS), что на реальных задачах. Как Вы это объясните с позиций что камень тупой и делает только то, что ему компилятор предпишет? А P4 тоже не дурак!
Но только подумайте, сюда отвечать не надо.
Хочется уже навести резкость и проникнуться уровнем спора.
Походу задета честь нескольких десятков человек, а то и целого подразделения. Только замечу, что не я их подписал под ограниченностью.