Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Производительность кода разных компиляторов под разными платформами
|
|||
|---|---|---|---|
|
#18+
Написал простенькую программу (построчное чтение больших текстовых файлов, разбиение строки на составные части, преобразование текстовых значений в нужные форматы и их складирование в массив с последующим очищением массива). В ОС Debian сборка выполнялась в Qt Creator, а в ОС Windows- в Visual Studio 2017 (для третьего варианта также был выполнен замер времени выполнения программы собранной в Qt Creator- результаты практически те же). В ОС Windows предварительно полностью выключался антивирус. Программа при переносе между платформами НИКАК не модифицировалась, осуществлялась только перекомпиляция исходного кода. Отдельно делались замеры на скорость чтения строк из файлов (при этом код содержащий обработку полученных строк комментировалась). Чтение строк из файлов / полное время выполнения программы (приведены средние значения): Код: plaintext 1. 2. 3. Вывод команды time (у меня 4-ех ядерный процессор i5-4690, поэтому запускались 4 потока): Код: plaintext 1. 2. Почему под разными платформами для компилятора Intel C/C++ мы получаем настолько разные значения? Ведь если из полного времени выполнения вычесть время чтения данных (таким образом получив чистое время работы процессора), то получим отличие в 1,5 раза(!!!). По логике программный код должен исполняться напрямую без участия ОС (кроме кода ядра, разумеется), тогда не понятно почему один и тот же код, скомпилированный одним и тем же компилятором выполняется в 1,5 раза дольше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2018, 02:21 |
|
||
|
Производительность кода разных компиляторов под разными платформами
|
|||
|---|---|---|---|
|
#18+
Забыл написать, что в обоих случаях использовались Release- сборки. В Qt Creator использовались настройки оптимизации по- умолчанию для Release- сборки, а в Visual Studio- O2 максимальная скорость кода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2018, 02:41 |
|
||
|
Производительность кода разных компиляторов под разными платформами
|
|||
|---|---|---|---|
|
#18+
AlekseySQL, выбирай: так проц распределился между процессами так выпали звёзды в Dos пробовал? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2018, 06:47 |
|
||
|
Производительность кода разных компиляторов под разными платформами
|
|||
|---|---|---|---|
|
#18+
Есть еще ключи для использования различных наборов команд проца. Например MSVC по умолчанию использует только MMX2 от PentiumIII, а более современные не использует. Например в твоем i5-4690 есть поддержка SSE4.1, SSE4.2, AVX2. Попробуй разрешить компилятору их использовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2018, 08:25 |
|
||
|
Производительность кода разных компиляторов под разными платформами
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)AlekseySQL, выбирай: так проц распределился между процессами так выпали звёзды в Dos пробовал? Не думаю, что превосходство Debian сразу по двум компиляторам является следствием расположения звезд. Меня подмывает поставить Visual Studio 2015, чтобы проверить для компилятора Clang. У меня интерфейс построен на Qt, поэтому не думаю, что Dos позволит выполнить замеры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2018, 10:03 |
|
||
|
Производительность кода разных компиляторов под разными платформами
|
|||
|---|---|---|---|
|
#18+
AlekseySQL, конечно, ещё ГУИ добавь ну смешно же, кого оно беспокоит эти *2 *3 в десктопе? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2018, 10:08 |
|
||
|
Производительность кода разных компиляторов под разными платформами
|
|||
|---|---|---|---|
|
#18+
Вопрос к знатокам Linux: если я соберу ядро на своей машине приведет ли это к ускорению работы моей программы? Ведь возможно при сборке из исходников система как- либо анализирует аппаратную часть и использует те или иные куски кода для повышения производительности или такого нет и я все выдумал? Кстати, я правильно понимаю, что оптимизации ядра повлияют только на значение sys команды time (что в моем случае составляет очень маленькую долю выполнения программы)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2018, 10:20 |
|
||
|
Производительность кода разных компиляторов под разными платформами
|
|||
|---|---|---|---|
|
#18+
Dima TЕсть еще ключи для использования различных наборов команд проца. Например MSVC по умолчанию использует только MMX2 от PentiumIII, а более современные не использует. Например в твоем i5-4690 есть поддержка SSE4.1, SSE4.2, AVX2. Попробуй разрешить компилятору их использовать. Гугл сообщает , что подобные оптимизации интересовали пользователей только до 2013 версии. В настройках компилятора в Visual Studio я подобных настроек не нашел (в том числе перечитывая список "Все параметры"). Скорее всего эти наборы команд включены по умолчанию и никаких дополнительных действий программистам совершать не нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2018, 10:44 |
|
||
|
Производительность кода разных компиляторов под разными платформами
|
|||
|---|---|---|---|
|
#18+
AlekseySQLDima TЕсть еще ключи для использования различных наборов команд проца. Например MSVC по умолчанию использует только MMX2 от PentiumIII, а более современные не использует. Например в твоем i5-4690 есть поддержка SSE4.1, SSE4.2, AVX2. Попробуй разрешить компилятору их использовать. Гугл сообщает , что подобные оптимизации интересовали пользователей только до 2013 версии. В настройках компилятора в Visual Studio я подобных настроек не нашел (в том числе перечитывая список "Все параметры"). Скорее всего эти наборы команд включены по умолчанию и никаких дополнительных действий программистам совершать не нужно. В MSVC2015 есть ключ /arch и по дефолту SSE2 https://msdn.microsoft.com/en-us/library/7t5yh4fd.aspx /arch:SSE2 Enables the use of SSE2 instructions. This is the default instruction on x86 platforms if no /arch option is specified. Как в 2017 не знаю, у меня ее нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2018, 10:53 |
|
||
|
Производительность кода разных компиляторов под разными платформами
|
|||
|---|---|---|---|
|
#18+
AlekseySQLDima TЕсть еще ключи для использования различных наборов команд проца. Например MSVC по умолчанию использует только MMX2 от PentiumIII, а более современные не использует. Например в твоем i5-4690 есть поддержка SSE4.1, SSE4.2, AVX2. Попробуй разрешить компилятору их использовать. Гугл сообщает , что подобные оптимизации интересовали пользователей только до 2013 версии. В настройках компилятора в Visual Studio я подобных настроек не нашел (в том числе перечитывая список "Все параметры"). Скорее всего эти наборы команд включены по умолчанию и никаких дополнительных действий программистам совершать не нужно. 1.Гуглом еще надо уметь пользоваться. Гугли /arch 2.Вычеркнуто 3.Без опций компиляции результат ничего не показывает. Часто проблема в них. Нужна полная командная строка. 4.Разная скорость может объясняться реализацией библиотек на разных платформах. И компилятор будет ни при чем. 5.Забываешь про malloc - он тоже дергает сисколл'ы 6.Конечно,собранное ядро именно под твой процессор, будет быстрее :troll: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2018, 11:11 |
|
||
|
Производительность кода разных компиляторов под разными платформами
|
|||
|---|---|---|---|
|
#18+
То, что существуют специальные программы для профилирования кода (например Intel VTune) автору похоже даже не догадывается. Всем участникам форума предлагается погадать на кофейной гущи и написать, что же они там увидели. А у меня даже кофе нет (((, только чай. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2018, 11:37 |
|
||
|
Производительность кода разных компиляторов под разными платформами
|
|||
|---|---|---|---|
|
#18+
Dima TЕсть еще ключи для использования различных наборов команд проца. Например MSVC по умолчанию использует только MMX2 от PentiumIII, а более современные не использует. Например в твоем i5-4690 есть поддержка SSE4.1, SSE4.2, AVX2. Попробуй разрешить компилятору их использовать. Нашел где в настройках указывается использование расширенных наборов инструкций. Но, к сожалению, замеры показали, что никакого преимущества над дефолтными настройками нет (а кое- где даже небольшие просадки). Microsoft реализовал поддержку только sse2, а у компилятора intel также есть возможность выбора инструкций sse3. Дополнительно я пробовал выбрать набор команд AVX2- нет прироста производительности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2018, 12:07 |
|
||
|
Производительность кода разных компиляторов под разными платформами
|
|||
|---|---|---|---|
|
#18+
авторесли я соберу ядро на своей машине приведет ли это к ускорению работы моей программы? Тут вопроса 2. 1. Вы выкините всё лишнее из ядра и оставите только нужное вам в консоли. Сборка на основе, например, debian. 2. Вы мало того, что всё выкините, но ещё и перекомпиируете под свой проц "native". Вывод -- ваш выбор gentoo. --- У меня была иная задача, просмотр fhd на слабом пк. Даже установка calculate linux вместо: debian, ubuntu, win 7 64, значительно оживило ПК. Скомпилированный vlc под мой процессор (то есть с опциями для gcc компилятора) стал показывать fhd. Наверное, ядро перекомпилировал бы -- ваще взлетел бы. Но зато пол светового дня -- я компилирую обновления для системы :) зы я не знаток. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2018, 12:09 |
|
||
|
Производительность кода разных компиляторов под разными платформами
|
|||
|---|---|---|---|
|
#18+
AlekseySQLПочему под разными платформами для компилятора Intel C/C++ мы получаем настолько разные значения? Ведь если из полного времени выполнения вычесть время чтения данных (таким образом получив чистое время работы процессора), то получим отличие в 1,5 раза(!!!). По логике программный код должен исполняться напрямую без участия ОС (кроме кода ядра, разумеется), тогда не понятно почему один и тот же код, скомпилированный одним и тем же компилятором выполняется в 1,5 раза дольше.Эксперимент не чистый. Для начала, надо использовать один и тот же набор команд процессора. Например, на GCC можно задать -march="native" или -march="core2" для совместимости с предыдущим поколением процессоров (как задать на MSVC - не знаю). В качестве ФС попробуй в обоих вариантах FAT32. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2018, 12:09 |
|
||
|
Производительность кода разных компиляторов под разными платформами
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevТо, что существуют специальные программы для профилирования кода (например Intel VTune) автору похоже даже не догадывается. Всем участникам форума предлагается погадать на кофейной гущи и написать, что же они там увидели. А у меня даже кофе нет (((, только чай. Спасибо, сейчас буду профилировщиком пользоваться. Но мне не понятно в принципе: почему один и тот же код, скомпилированный одним и тем же компилятором выполняется сильно разное время (причем системное время очень мало)? Ведь у нас С++, который должен работать напрямую на железе, а не С# или Java с их дополнительными программными прокладками. Может я чего-то недопонимаю? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2018, 12:18 |
|
||
|
Производительность кода разных компиляторов под разными платформами
|
|||
|---|---|---|---|
|
#18+
AlekseySQL, как бы всё что на ПК работает, по определению работает на железе(кремнии?)... другое дело, что всеми ресурсами ПК монопольно владеет ОС, и как она их распределяет зависит от её реализации так же очень много зависит, как уже сказали, от качества системных либ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2018, 12:25 |
|
||
|
Производительность кода разных компиляторов под разными платформами
|
|||
|---|---|---|---|
|
#18+
azsxавторесли я соберу ядро на своей машине приведет ли это к ускорению работы моей программы? Тут вопроса 2. 1. Вы выкините всё лишнее из ядра и оставите только нужное вам в консоли. Сборка на основе, например, debian. 2. Вы мало того, что всё выкините, но ещё и перекомпиируете под свой проц "native". Вывод -- ваш выбор gentoo. --- У меня была иная задача, просмотр fhd на слабом пк. Даже установка calculate linux вместо: debian, ubuntu, win 7 64, значительно оживило ПК. Скомпилированный vlc под мой процессор (то есть с опциями для gcc компилятора) стал показывать fhd. Наверное, ядро перекомпилировал бы -- ваще взлетел бы. Но зато пол светового дня -- я компилирую обновления для системы :) зы я не знаток. Какой ресурс вы порекомендуете для изучения подобных оптимизаций? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2018, 12:39 |
|
||
|
Производительность кода разных компиляторов под разными платформами
|
|||
|---|---|---|---|
|
#18+
авторКакой ресурс вы порекомендуете для изучения подобных оптимизаций? Хотя вопрос явно не ко мне, отмечу. Я компилирую "linux" не потому, что мне жизненно необходима оптимизация под процессор, а потому, что комп домашний, время было -- настроил. Для дома самое то и видео теперь есть. Производительность очень интересная вещь. Если бы мне поручили вояджер куда то отправить или на форексе робота воткнуть -- я бы о полной компиляции ядра подумал. Но в обычных случаях лучше юзать уже кем то скомпилированными, а то вы так и linux from scratch читать начнёте, благо, что на русском есть :) В вашем случае я согласен с предыдущими ответами, начните с изучения опций компилятора, затем всякие няшки, например, профилирование. Например, вы толком опций не нашли, а ведь intel тем и плох (хорош), что у него немеряно всяких технологий внутри камня. Я то оптимизации по воспроизведению видео добился именно тем, что скомпилировал vlc именно под свой проц, а не под "общий" скачал бинарник. Затем, если понравится почитать Столярова про ассемблер и искать мануалы на нерусском. зы ну да, производительность считать в десятых долях секунд (и ваще в секундах) -- это что то из области java. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2018, 14:39 |
|
||
|
Производительность кода разных компиляторов под разными платформами
|
|||
|---|---|---|---|
|
#18+
AlekseySQLКакой ресурс вы порекомендуете для изучения подобных оптимизаций?JОсобых вариантов нет - http://gcc.gnu.org/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2018, 09:36 |
|
||
|
Производительность кода разных компиляторов под разными платформами
|
|||
|---|---|---|---|
|
#18+
Сделал замеры производительности для компилятора Clang на обоих платформах (приведено среднее время выполнения всей программы): 1. Debian 9.2.3, Qt Creator, Clang, ext4: 65,3 сек 2. Win 10 Pro 1709, Visual Studio 2015, Clang, ntfs: 97 сек Как видим ситуация аналогичная компилятору от Intel: сильная просадка производительности на платформе Windows. Так что это не "особенность" компилятора от Intel, а общая закономерность. Подумал, что причиной подобной просадки могут быть конкурирующие процессы, поэтому поднял приоритет потокам. К сожалению, это не принесло никаких улучшений. Расширенные наборы инструкций также никак не изменили ситуацию. Профайлер Intel Vtune Amplifier показал (Elapsed Time / CPU Time): 1. Debian 9.2.3, Qt Creator, Clang, ext4: 66,2 / 250,6 2. Win 10 Pro 1709, Visual Studio 2015, Clang, ntfs: 113,6 / 397 3. Debian 9.2.3, Qt Creator, Intel C/C++, ext4: 66,5 / 250,9 4. Win 10 Pro 1709, Visual Studio 2015, Intel C/C++, ntfs: 94 / 302 У меня 4-ех ядерный процессор, поэтому я запускаю 4 потока. Видно, что под Debian происходит асинхронное чтение данных с диска, поскольку Elapsed Time ~ CPU Time / 4 , а платформа Windows этим похвастаться не может. Хотя, просадка производительности больше, чем эта разница, так что скорее всего библиотеки у Windows- решения также проигрывают в производительности. Компилятор от корпорации зла оказался самым неудачным решением из 4 рассмотренных во время тестирования. Самое смешное, что я много раз слышал обратные утверждения: "gcc глючный, а Microsoft далеко впереди"... Думаю это был еще один пример недобросовестной рекламы от тех, кто очень боится наступления Linux- систем. Отпишусь, по изменению производительности когда задам опции для gcc. Может получится еще немного ускориться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2018, 17:55 |
|
||
|
Производительность кода разных компиляторов под разными платформами
|
|||
|---|---|---|---|
|
#18+
AlekseySQL, так ты же опять на винде по ntfs елозишь! Сделай уже нормальный тест - создай на СХД раздел с FAT32 и цепляй его по iSCSI для обоих тестов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2018, 19:07 |
|
||
|
Производительность кода разных компиляторов под разными платформами
|
|||
|---|---|---|---|
|
#18+
rdb_devAlekseySQL, так ты же опять на винде по ntfs елозишь! Сделай уже нормальный тест - создай на СХД раздел с FAT32 и цепляй его по iSCSI для обоих тестов. Я уже давно не видел использование fat32. Я проделал эксперимент для типовых конфигураций, используемых на каждой платформе. Поэтому мой эксперимент отражает реальность, а не синтетические циферки. К тому же я в свое дело ставил эксперимент (и тут приводил его результаты): Как же приятно себя цитировать!Оказалось, что ничего этого не нужно: система работает через буферы, которые и берут на себя задачу непрерывной подачи данных. Я сделал замеры когда на моем SSD были ФС ext4 и ntfs. В последнем случае сильно упала скорость чтения файла, но общая скорость работы программы практически сохранилась (привожу средние значения): Чтение ext4: 22,5 сек Чтение ntfs: 38 сек Чтение + Выполнение ext4: 65 сек Чтение + Выполнение ntfs: 66,5 сек По результатам видно, что падение скорости выполнения всей программы значительно меньше, чем падение скорости чисто файлового чтения. Так что отбой: умные дяденьки этот вопрос уже обдумали и дали нам готовое решение. http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1283738&msg=21162931 Будет fat32, ext4 или ntfs- результаты будут практически такие же (разумеется под Линаксом, который умеет асинхронно подтягивать данные с дисков). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2018, 20:04 |
|
||
|
Производительность кода разных компиляторов под разными платформами
|
|||
|---|---|---|---|
|
#18+
AlekseySQL, есть разница померить что-то в разных условиях и сделать вывод: 1. "Получилось вот что, объясните почему." 2. "Я думаю что так получилось потому что ...." Ты идешь по п.1. п.1 отличается от 2 тем что там спрашивающий просит не доказательства, а направления куда копать. Т.е. доказывать тут тебе никто не будет, не заслужил, но если пойдешь по п.2 то подскажут кучу направлений в которых покопать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2018, 20:47 |
|
||
|
Производительность кода разных компиляторов под разными платформами
|
|||
|---|---|---|---|
|
#18+
Dima TAlekseySQL, есть разница померить что-то в разных условиях и сделать вывод: 1. "Получилось вот что, объясните почему." 2. "Я думаю что так получилось потому что ...." Ты идешь по п.1. п.1 отличается от 2 тем что там спрашивающий просит не доказательства, а направления куда копать. Т.е. доказывать тут тебе никто не будет, не заслужил, но если пойдешь по п.2 то подскажут кучу направлений в которых покопать. Для себя я уже сделал вывод. Всем спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2018, 20:52 |
|
||
|
|

start [/forum/topic.php?fid=57&fpage=22&tid=2017976]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
37ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
| others: | 10ms |
| total: | 144ms |

| 0 / 0 |
