Ответьте мне пожалуйста о знатоки оптимизаторов. Если мы имеем маленькую функцию с дестятком переменных, насколько оптимизатор будут генерить оптимальные код — например — два последовательных одинаковых фора но по разным массивам, будут ли обьеденены в нечто в виде одного двойного тела и одного цикла. То есть лм смысл оптимизировать ручками (алгоритм не оптимизируем) или смысла нет и лучше для читабельности оставлять более понятный код?
Кстати если кто-знает а насколько интеловый компилятор лучше делает код чем МСовский?
Здравствуйте, Комментатор, Вы писали:
К>Ответьте мне пожалуйста о знатоки оптимизаторов. Если мы имеем маленькую функцию с дестятком переменных, насколько оптимизатор будут генерить оптимальные код — например — два последовательных одинаковых фора но по разным массивам, будут ли обьеденены в нечто в виде одного двойного тела и одного цикла. То есть лм смысл оптимизировать ручками (алгоритм не оптимизируем) или смысла нет и лучше для читабельности оставлять более понятный код?
Кроме как "скомпиль и посмотри в код" вариантов нету. Мало кто тут знает как устроены оптимизаторы в конкретных версиях конкретных компиляторов чтоб дать ответ на такой общий вопрос.
К>Кстати если кто-знает а насколько интеловый компилятор лучше делает код чем МСовский?
Зависит от кода.
По производительности полученного exeшника разница в скорости была до двух раз (AES encryption). А так, на вычислительных задачах в 1.2-1.8 раз быстрее чем МС.
Здравствуйте, CreatorCray, Вы писали:
К>>Кстати если кто-знает а насколько интеловый компилятор лучше делает код чем МСовский? CC>Зависит от кода. CC>По производительности полученного exeшника разница в скорости была до двух раз (AES encryption). А так, на вычислительных задачах в 1.2-1.8 раз быстрее чем МС.
Спасибо. А кстати может кто знает — а что интеловый комилятор покупать придется? Или все же там есть что-то триальное. Мне просто только себе лично? И нет уж постоянно таких задач чтобы нужно было супер оптимизацию.
Здравствуйте, Комментатор, Вы писали:
К>А кстати может кто знает — а что интеловый комилятор покупать придется? Или все же там есть что-то триальное. Мне просто только себе лично? И нет уж постоянно таких задач чтобы нужно было супер оптимизацию.
Здравствуйте, Комментатор, Вы писали:
К>Я не совсем точно выразился, мне бы либо триал на ограниченное число компиляций или что-то вроде ограниченно бесплатное как у МСовской студии.
Ну я же даже ссылку на Intel кинул...
Можно взять триальную версию на 90 дней.
Есть Non-Commercial версии для Linux.
Для винды Non-Commercial версии нету.
Здравствуйте, bkat, Вы писали:
B>Ну я же даже ссылку на Intel кинул...
B>Можно взять триальную версию на 90 дней. B>Есть Non-Commercial версии для Linux. B>Для винды Non-Commercial версии нету.
Понятно, 90 дней это не интересно, мне все-таки хочется иметь возможность и после 90 дней вносить изменения и перекомпилировать свои программы.
Здравствуйте, Комментатор, Вы писали: К>Понятно, 90 дней это не интересно, мне все-таки хочется иметь возможность и после 90 дней вносить изменения и перекомпилировать свои программы. К>Нет — ну очень жаль.
Ну можно посмотреть как он регистрируется. Может в регистре пишет кракозябру. Найти где он фиксирует дату начала триала. Потом удалить ручками. и начать новый триал.
Это если прижимает конечно.
Здравствуйте, Комментатор, Вы писали:
К>Понятно, 90 дней это не интересно, мне все-таки хочется иметь возможность и после 90 дней вносить изменения и перекомпилировать свои программы.
Не, ну триал же...
Хочешь пользовать не на "пробной" основе — покупай. Последний раз был где то в районе $350-400
Здравствуйте, CreatorCray, Вы писали:
CC>По производительности полученного exeшника разница в скорости была до двух раз (AES encryption).
Ого, а что за имплементация?
CC> А так, на вычислительных задачах в 1.2-1.8 раз быстрее чем МС.
+1
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Здравствуйте, Комментатор, Вы писали:
К>Ответьте мне пожалуйста о знатоки оптимизаторов. Если мы имеем маленькую функцию с дестятком переменных, насколько оптимизатор будут генерить оптимальные код — например —
На таком количестве переменных у MSVC обычно проблемы с распределением по регистрам, начинает активно использовать стек . Здесь C++ может легко порвать "С", учитывая const и объявления переменных по месту.
К>два последовательных одинаковых фора но по разным массивам, будут ли обьеденены в нечто в виде одного двойного тела и одного цикла.
Ни разу не видел. Хотя это скорее оптимизация по размеру, и на скорости может сказаться отрицательно.
К> То есть лм смысл оптимизировать ручками (алгоритм не оптимизируем) или смысла нет и лучше для читабельности оставлять более понятный код?
А что думает по этому поводу профайлер? Если это самое узкое место, возможно, надо.
К>Кстати если кто-знает а насколько интеловый компилятор лучше делает код чем МСовский?
10-20%, но зависит от версий (последние MS могут обгнать на те же 10% старые)
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Здравствуйте, gear nuke, Вы писали:
CC>>По производительности полученного exeшника разница в скорости была до двух раз (AES encryption). GN>Ого, а что за имплементация?
Да самая что ни на есть обычная.
Я тогда от разницы сам офигел и полез смотреть сгенеренный код: все оказалось банально: МС компилер почти ничего в регистрах не закешировал и за каждым чихом лез в память. ICC же попереставлял местами операции чтения, кэшил данные по регистрам и в результате на одно и то же действие тратил гораздо меньше операций чтения.
Здравствуйте, CreatorCray, Вы писали:
CC>Да самая что ни на есть обычная.
То есть своя? (а обычно почему-то гора макросов )
CC>Я тогда от разницы сам офигел и полез смотреть сгенеренный код: все оказалось банально: МС компилер почти ничего в регистрах не закешировал и за каждым чихом лез в память.
Я тоже помню такое, когда сделал в лоб. Посмотрел внимательнее — алгоритм на big-endian расчитан. Изменил генерацию раундовых ключей, что бы не было необходимости в лишних вычислениях для смены порядка байт. Ниже листинг после 2008, но и на 2003й должно похоже быть — тогда вполне устроило, проиграло те самые 10-20% Intel'у и реализации на ассемблере от Brian Gladman (выиграв у почти всех из бенчмарка Christophe Devine). Главное, что получился компактный исходник
Кстати, развёрнутые руками циклы (GNU Crypto?) давали очень заметный провал, а MSVC норовил это сделать сам
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Здравствуйте, gear nuke, Вы писали:
CC>>Да самая что ни на есть обычная. GN>То есть своя? (а обычно почему-то гора макросов )
Макросами там обычно статические таблицы генерят — очень удобно.
+ раунды разворачивать тоже самое оно.
GN>Изменил генерацию раундовых ключей, что бы не было необходимости в лишних вычислениях для смены порядка байт.
Этож простым bswap делается. Мне в свое время было сильно лень переделывать — вставил bswap-ы.
CC>>Я тогда от разницы сам офигел и полез смотреть сгенеренный код: все оказалось банально: МС компилер почти ничего в регистрах не закешировал и за каждым чихом лез в память. GN>Я тоже помню такое, когда сделал в лоб. Посмотрел внимательнее — алгоритм на big-endian расчитан.
Не, ну компилер то endian то сам не сменил при компиляции. На скорость не влияет для какого endian алгоритм. Влиять может только преобразование входных/выходных данных в нужную форму, но на фоне общих вычислений дополнительные 2*4 bswap-а погоды не делают.
GN>Кстати, развёрнутые руками циклы (GNU Crypto?) давали очень заметный провал, а MSVC норовил это сделать сам
Я сразу развернутый делал.
GN> Ниже листинг после 2008, но и на 2003й должно похоже быть — тогда вполне устроило, проиграло те самые 10-20% Intel'у и реализации на ассемблере от Brian Gladman (выиграв у почти всех из бенчмарка Christophe Devine). Главное, что получился компактный исходник
Здравствуйте, Комментатор, Вы писали:
К>Кстати если кто-знает а насколько интеловый компилятор лучше делает код чем МСовский?
От задачи зависит. Есть мнение что на многих реальных проектах MSовский может и побыстрее оказаться за счет генерации более компактного кода. Впрочем их же ж смешивать можно смотря по задаче )
Здравствуйте, CreatorCray, Вы писали:
CC>Этож простым bswap делается. Мне в свое время было сильно лень переделывать — вставил bswap-ы.
Делается, но в то время он жутко тормозил на 4м Пне. А с << | >> MSVC 2003 как раз и начинало активно использовать память. ICC, если правильно помню, догадывался вместо этого читать отдельные байты movzx.
CC>Не, ну компилер то endian то сам не сменил при компиляции.
Кстати, слабо представляю, как бы он смог сделать трансфармацию алгоритма подобного рода...
CC> На скорость не влияет для какого endian алгоритм. Влиять может только преобразование входных/выходных данных в нужную форму, но на фоне общих вычислений дополнительные 2*4 bswap-а погоды не делают.
Дело не столько в "оверхеде" от этих (по сути, лишних) команд. Я как раз на этом изучал необходимость ручных оптимизаций, смотрел асм листинги после компиляции нескольких известных реализаций . Замена endian'ства и выполнение раундов в естественном порядке (цикле) сильно помогло оптимизатору MSVC (вроде на ~50%, поэтому и удивило "в 2 раза"). bswap, возможно, отключает какие-то оптимизации, а вот в случае ручного разворачивания (макросами) получается сверхбольшая функция, у оптимизатора похоже заканчиваются какие-то лимиты и он начинает тупить. Результаты здесь
Цифры вроде для MSVC 2005, на CoreDuo (разумеется, тест только одного ядра) процентов на 20 быстрее. ICC обгонит, но не на много.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Ах, да, как всегда, забыл суть... вывод сделал такой же, что и Кнут
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Здравствуйте, gear nuke, Вы писали:
CC>>Этож простым bswap делается. Мне в свое время было сильно лень переделывать — вставил bswap-ы. GN>Делается, но в то время он жутко тормозил на 4м Пне.
дык на 4-м как раз и проверялось. Впрочем 8 bswapов на блок совершенно незаметны на фоне остальных преобразований.
CC>>Не, ну компилер то endian то сам не сменил при компиляции. GN>Кстати, слабо представляю, как бы он смог сделать трансфармацию алгоритма подобного рода...
Аналогично. Не могут пока компилеры делать подобное.
GN>Результаты здесь
на P4 + ICC. Мерялку только переделал на затрачиваемые тики а не на байт/сек. Т.е сейчас чем меньше тем лучше.
В принципе скорость такая же, кроме разворачивания ключа — у меня таблицы built-in а ты их строишь в реалтайме.