Выше коммент с флагами компилятора для оптимизаций циклов. Так вот с них и надо было статью начинать. Без них никаких подмен и ускорений не будет даже -O3
Кстати, подобное оформление цикла, как у автора:
for (size_t i = 0; i < 1024 / 4; i += 4)
даст обработку массива до 255 элемента, а не до 1023 включительно.
Есть инструменты статического анализа, проверки стилистической нормы, флаги компилятора на выявление таких штук, как неиспользуемые переменные. В GCC, например:
gcc -std=* -pedantic -Wall
-Wextra -Werror
Есть ещё много других полезных штук, например, -Wstack-protector
С расширениями подсветки синтаксиса и форматирования структуры даже несколько if () {} else {} смотрятся отлично и отлично читаются, если ветвление умещается на экран.
Раз уж далее речь о замене умножения сложением, то и здесь надо побитовый сдвиг применить. Ещё, если вам нужна обработка всего массива, то делить на 4 лист массива — ошибочное решение.
Самая затратная операция в этом примере не присваивание ячейке массива какого-либо значения и не инкремент счетчика, а именно операция сравнения
Чем же инструкция сравнения "дороже"любой другой операции?
Да, за один проход цикла обрабатывать 4 ячейки массива будет быстрее, чем одну, но это из-за микроархитектуры современных процов, а не отсутствия "лишних" сравнений.
пример, в котором имеем массив символов, с помощью цикла проходим по всей строке
for(size_t i = 0; i < strlen(str); i++)
{
...
}
В Си строка и массив байтового размера — несколько разные вещи. Для массива надо проходить именно по длине, а для циклов по символам строки достаточно:
while (*str) {...}
Правда, если у вас массив char не имеет последним символом '\0', то и strlen(char* str) работать не будет.
Чем же не угодило 11 поколение, кроме ограниченного числа ядер? Температуры ок за счёт огромного кристалла, производительность тоже не уступает Zen 3. 11700К, например, быстрее 5800х. Даже на меньшей частоте.
Если тдп смущает, то в стоке с лёгким андервольтингом тот же 11к ест около 100 Вт.
Платы для АМД дешевле только на старых чипсетах и с никакущим VRM. А если брать самую дешёвую плату с pcie4.0, то и вовсе Интел дешевле. А если 5.0 и ддр5, то здесь ответа АМД всё ещё нет.
А про мидл и топ сегмент вовсе нечего обсуждать. Там платы под АМД не дешевле, а процессоры как раз дороже. 5950х только недавно спустился до ценника 12900К.
Про 5600х совсем смешно. На Али стоит ок, но на старте он продавался от 38 к.
g++ для .cpp gcc для .c отдельно собираем объектники .o для .cpp-кода через g++, и отдельно объектники сишек. Потом собираем общий elf a.out. Поправьте, если что не так, я еще плохо шарю.
Неприменимость SIMD к коду — лучший аргумент против break в циклах, а не какие-то там принципы структурного программирования.
Побалуюсь на Си с simd. Писал свое сравнение строк и памяти. Вроде бы уже получилось быстрее по скорости, чем версии из glibc, но посмотрю, что ещё можно выжать, убрав ветвления и выход из циклов.
На Винде 16 лет. С вирусней лёгкие проблемы были в последний раз ещё на ХР. Баги встречаются только в кривых сборках инди-софта, а нестабильность и вовсе только при разгоне или неисправном железе. Ну или на амд-платформах.
Win 11 топ. Лучшая ос. На Mac os работать можно, но не сказка-мечта. Линукс хорош и достаточен под wsl.
Сложилось впечатление, что статья - просто хвастовство человека, который осилил убунту. Критика недостатков винды смешная, как и фактологические ошибки, что Macos = Linux и что на XP не работает интернет. На хр отлично все работает. Включая интернет на файрфоксе 52.9. Установил на нетбук с хардом, 1 Гб ддр-400 и одноядерным Атомом. Потребление памяти 127 МБ. (Посмотрите это значение на своей убунте.) И отлично грузится с жесткого диска. На сильно дольше, чем ультрабук 21 года с ссд грузит вин 11.
Теперь про вин 11. Телеметрия отключается при установке за 5 секунд. Никаких обновлений система сама не ставит. Разве что в простое. И уж точно сама не перезагружается, если не установить такой пункт в настройках. Никаких проблем с 32-битным софтом и вин 11 нет.
Имел шальные мысли поставить Линукс. Почитал Интернеты. Автономность на Линуксе хромает против винды. Драйверов тоже не валяется на каждом шагу. Не хочу остаться без какой-нибудь не очень нужной, но удобной мелочи типа фингерпринта или жестов тачпада или fn-клавиш. В общем, просто накатил дебиан на wsl2 и всё отлично работает. Пока что не попадалось ничего нужного мне, что не работало бы под wsl. Разве что man не встал с первого раза.
Итог: Линукс с виртуалкой винды — для больных сектантов. Винда с wsl или виртуалкой линукса — выбор здорового человека.
Повышенная утилизация в побочные необязательные процессы — это нехорошо, но если процессор перегревается, наверное, стоит обеспечить нормальное охлаждение и CPU internal power management, нет?
Интеловские процессоры вовсе принято измерять на жор и нагрев в прайме или хотя бы cbr23. (Да ещё с кривым разгоном, чтоб потом орать про 400 Вт потребления).
Заголовок кликбейтный и глупый, даже в большей степени, чем мой коммент.
Может есть что-то по существу? Утечки, инсайдерская инфа? За счёт чего бы АМД снова вырвались вперёд? За счёт ддр5, которая уже есть у Интел? За счёт эволюции микроархитектуры? Вот и получится очередные +20%, которые Интел обгонит уже осенью в Раптор Лейк.
Минусите на здоровье мой коммент, но сейчас Интел ведёт себя вполне, как корпорация добра, за исключением блокировки не особо нужных AVX-512. (В конце-концов, можете купить предыдущий HEDT, где это есть, или 11700К, если Вам достаточно 8 ядер, но обязательно нужен AVX-512.)
12th gen получился очень удачным и по очень хорошим ценам. 12900К на 15 к дешевле 5950x и почти везде быстрее, за исключением VRay и может архивирования какого-то.
Мне кажется, Интел просто хотят сделать всем хорошо. Себе доп. прибыль, пользователю — увеличение производительности процессора без покупки и установки нового.
А всем противникам всего нового... Ехайте в Магаданскую тундру и живите там по-первобытному. Извращённые у вас фантазии о подписочных моделях для железа. Адиос.
Потому что топовые процессоры в разгоне со снятыми лимитами уходят за 250 Вт. Что 5950х, что 11900к/12900К. Ещё кушает скоростная память. У кого-то жёсткие диски стоят. У меня, например, 3 штуки. Ссд едят не так уж мало. Помпа сжо 10-15 Вт. Комплект вентиляторов ещё 15-50. Сюда же накинуть запас по мощности, чтобы БП работал ближе к пиковосу КПД и поменьше грелся. Вот так уже и 1000+ Вт по 12V+ наберётся.
У меня 3070+11700к+пачка переферии. Когда проц на 250 Вт работает в 16 потоков AVX-2 и видяха на 300 Вт греет, то БП на 850 Вт вовсе не чувствует себя избыточно мощным и хорошенько так выдувает теплый воздух, хотя сам имеет сертификат 80+ gold.
Выше коммент с флагами компилятора для оптимизаций циклов. Так вот с них и надо было статью начинать. Без них никаких подмен и ускорений не будет даже -O3
Кстати, подобное оформление цикла, как у автора:
даст обработку массива до 255 элемента, а не до 1023 включительно.
else if — вполне себе адекватная замена switch case, только без goto "под капотом".
Например, парсинг **argv.
Что здесь не читабельного???
Есть инструменты статического анализа, проверки стилистической нормы, флаги компилятора на выявление таких штук, как неиспользуемые переменные. В GCC, например:
Есть ещё много других полезных штук, например, -Wstack-protector
С расширениями подсветки синтаксиса и форматирования структуры даже несколько if () {} else {} смотрятся отлично и отлично читаются, если ветвление умещается на экран.
Обрабатывает прерывание,а в простое продолжает дефрагментацию аллоцированной памяти? (Ваш кэп(?))
Раз уж далее речь о замене умножения сложением, то и здесь надо побитовый сдвиг применить. Ещё, если вам нужна обработка всего массива, то делить на 4 лист массива — ошибочное решение.
Видимо, вы хотели как-то вот так;
Проверял. Нет, GCC не настолько крут.
Чем же инструкция сравнения "дороже"любой другой операции?
Да, за один проход цикла обрабатывать 4 ячейки массива будет быстрее, чем одну, но это из-за микроархитектуры современных процов, а не отсутствия "лишних" сравнений.
В Си строка и массив байтового размера — несколько разные вещи. Для массива надо проходить именно по длине, а для циклов по символам строки достаточно:
Правда, если у вас массив char не имеет последним символом '\0', то и strlen(char* str) работать не будет.
Чем же не угодило 11 поколение, кроме ограниченного числа ядер? Температуры ок за счёт огромного кристалла, производительность тоже не уступает Zen 3. 11700К, например, быстрее 5800х. Даже на меньшей частоте.
Если тдп смущает, то в стоке с лёгким андервольтингом тот же 11к ест около 100 Вт.
Платы для АМД дешевле только на старых чипсетах и с никакущим VRM. А если брать самую дешёвую плату с pcie4.0, то и вовсе Интел дешевле. А если 5.0 и ддр5, то здесь ответа АМД всё ещё нет.
А про мидл и топ сегмент вовсе нечего обсуждать. Там платы под АМД не дешевле, а процессоры как раз дороже. 5950х только недавно спустился до ценника 12900К.
Про 5600х совсем смешно. На Али стоит ок, но на старте он продавался от 38 к.
g++ для .cpp
gcc для .c
отдельно собираем объектники .o для .cpp-кода через g++, и отдельно объектники сишек. Потом собираем общий elf a.out.
Поправьте, если что не так, я еще плохо шарю.
Спасибо, очень интересная статья.
Неприменимость SIMD к коду — лучший аргумент против break в циклах, а не какие-то там принципы структурного программирования.
Побалуюсь на Си с simd. Писал свое сравнение строк и памяти. Вроде бы уже получилось быстрее по скорости, чем версии из glibc, но посмотрю, что ещё можно выжать, убрав ветвления и выход из циклов.
Фу, пробелов нет между // и комментом.
Фу, длина строки больше 110 символов.
Фу, табы не наглядные, в стиле кланг-формат.
Фу, комменты на русском.
/* Что это? Душность в ответ на душность, наверное. */
Хорошая идея, посмотрю-ка "Интерстеллар" с ч/б фильтром, мьютом и субтитрами. Должно быть круто.
На Винде 16 лет. С вирусней лёгкие проблемы были в последний раз ещё на ХР. Баги встречаются только в кривых сборках инди-софта, а нестабильность и вовсе только при разгоне или неисправном железе. Ну или на амд-платформах.
Win 11 топ. Лучшая ос. На Mac os работать можно, но не сказка-мечта. Линукс хорош и достаточен под wsl.
Сложилось впечатление, что статья - просто хвастовство человека, который осилил убунту. Критика недостатков винды смешная, как и фактологические ошибки, что Macos = Linux и что на XP не работает интернет. На хр отлично все работает. Включая интернет на файрфоксе 52.9. Установил на нетбук с хардом, 1 Гб ддр-400 и одноядерным Атомом. Потребление памяти 127 МБ. (Посмотрите это значение на своей убунте.) И отлично грузится с жесткого диска. На сильно дольше, чем ультрабук 21 года с ссд грузит вин 11.
Теперь про вин 11. Телеметрия отключается при установке за 5 секунд. Никаких обновлений система сама не ставит. Разве что в простое. И уж точно сама не перезагружается, если не установить такой пункт в настройках. Никаких проблем с 32-битным софтом и вин 11 нет.
Имел шальные мысли поставить Линукс. Почитал Интернеты. Автономность на Линуксе хромает против винды. Драйверов тоже не валяется на каждом шагу. Не хочу остаться без какой-нибудь не очень нужной, но удобной мелочи типа фингерпринта или жестов тачпада или fn-клавиш. В общем, просто накатил дебиан на wsl2 и всё отлично работает. Пока что не попадалось ничего нужного мне, что не работало бы под wsl. Разве что man не встал с первого раза.
Итог: Линукс с виртуалкой винды — для больных сектантов. Винда с wsl или виртуалкой линукса — выбор здорового человека.
В 2022-м бы сравнивать нанометры и верить в двухкратную разницу между 10ESF и TSMC 7N/6N.
Впрочем, так бывает, когда всех подряд пускают на сайт. Это уже не Хабр, а филиал Пикабу или имджбордов.
Кроме 12 поколения у Интел полно других удачных и выгодных процессоров. 10400ф и 10100ф до сих пор остаются отличным выбором.
Повышенная утилизация в побочные необязательные процессы — это нехорошо, но если процессор перегревается, наверное, стоит обеспечить нормальное охлаждение и CPU internal power management, нет?
Интеловские процессоры вовсе принято измерять на жор и нагрев в прайме или хотя бы cbr23. (Да ещё с кривым разгоном, чтоб потом орать про 400 Вт потребления).
Заголовок кликбейтный и глупый, даже в большей степени, чем мой коммент.
Комментарий, полностью достойный никнейма.
Может есть что-то по существу? Утечки, инсайдерская инфа? За счёт чего бы АМД снова вырвались вперёд? За счёт ддр5, которая уже есть у Интел? За счёт эволюции микроархитектуры? Вот и получится очередные +20%, которые Интел обгонит уже осенью в Раптор Лейк.
Минусите на здоровье мой коммент, но сейчас Интел ведёт себя вполне, как корпорация добра, за исключением блокировки не особо нужных AVX-512. (В конце-концов, можете купить предыдущий HEDT, где это есть, или 11700К, если Вам достаточно 8 ядер, но обязательно нужен AVX-512.)
12th gen получился очень удачным и по очень хорошим ценам. 12900К на 15 к дешевле 5950x и почти везде быстрее, за исключением VRay и может архивирования какого-то.
Мне кажется, Интел просто хотят сделать всем хорошо. Себе доп. прибыль, пользователю — увеличение производительности процессора без покупки и установки нового.
А всем противникам всего нового... Ехайте в Магаданскую тундру и живите там по-первобытному. Извращённые у вас фантазии о подписочных моделях для железа. Адиос.
Потому что топовые процессоры в разгоне со снятыми лимитами уходят за 250 Вт. Что 5950х, что 11900к/12900К. Ещё кушает скоростная память. У кого-то жёсткие диски стоят. У меня, например, 3 штуки. Ссд едят не так уж мало. Помпа сжо 10-15 Вт. Комплект вентиляторов ещё 15-50. Сюда же накинуть запас по мощности, чтобы БП работал ближе к пиковосу КПД и поменьше грелся. Вот так уже и 1000+ Вт по 12V+ наберётся.
У меня 3070+11700к+пачка переферии. Когда проц на 250 Вт работает в 16 потоков AVX-2 и видяха на 300 Вт греет, то БП на 850 Вт вовсе не чувствует себя избыточно мощным и хорошенько так выдувает теплый воздух, хотя сам имеет сертификат 80+ gold.