Как стать автором
Обновить
0
0

Пользователь

Отправить сообщение

Поговорим об оптимизирующих компиляторах. Сказ восьмой: размотка циклов

Уровень сложностиСредний
Время на прочтение12 мин
Количество просмотров8.7K

Есть оптимизации, польза от которых очевидна всегда или почти всегда. Например, не делать лишнюю проверку лучше, чем делать. Не считать два раза одно и то же обычно лучше, чем считать (если только мы не упёрлись в нехватку регистров или имеем другие подобные проблемы на нижнем уровне). Вычислять выражения вне цикла выгоднее, чем в цикле. И так далее.

Но есть оптимизации, применение которых имеет как плюсы, так и минусы. Выиграв в одном месте, мы можем получить отрицательные эффекты в другом. Например, сэкономив на количестве проверок, мы можем раздуть общий объём кода и поломать микрооптимизации. Каноничным примером такой оптимизации, решение вопроса об использовании которой больше похоже на искусство, чем на науку, является размотка циклов (Loop Unrolling), о которой мы сегодня поговорим. В статье я попробую осветить как можно больше (хотя, наверное, и не все) соображения о том, почему эту оптимизацию может быть нужно или не нужно применять.

Смысл размотки цикла заключается в том, чтобы за счёт дублирования тела цикла уменьшить количества его итераций. В зависимости от того, как много мы знаем об исполнении цикла, размотка может быть полной, частичной или динамической.

Читать далее
Всего голосов 55: ↑55 и ↓0+55
Комментарии6

Скрытые друзья в плюсах

Время на прочтение4 мин
Количество просмотров9.2K

Как известно, ключевое слово friend в C++ используется для предоставления доступа к закрытым членам класса внешним функциям и классам. Помимо этого, friend наделена еще одной фишкой, о которой знают далеко не все. В этой статье речь пойдет о hidden friends. Желающих разобраться в сабже, прошу под кат.

Читать далее
Всего голосов 14: ↑13 и ↓1+12
Комментарии13

Что делать, если в твоем тексте или коде нашли ошибку?

Время на прочтение4 мин
Количество просмотров7.3K

Ты написал код, отправил его на ревью. Во время ревью тебе указали на ошибку в коде и вернули задачу на доработку. Или текст, отправленный на проверку, получил фидбэк о пропущенной запятой или орфографической ошибке. 

Рассуждаем о том, почему не стоит сразу исправлять ошибку и отправлять на повторное ревью. Призываем делиться своим мнением по вопросу в комментариях.

Читать далее
Всего голосов 21: ↑18 и ↓3+15
Комментарии22

Просто о сложном — move в языке C++

Время на прочтение6 мин
Количество просмотров59K

Здравствуйте уважаемые читатели. Данная публикация адресована начинающим разработчикам С++ которые только становятся на путь высокой производительности и "отстрелянных конечностей". Опытные разработчики найдут здесь скорее повторение тех вещей, которые сами мучительно осваивали в те далекие времена, когда в языке С++ появилась возможность удобного перемещения объектов.

Многие из вас уже слышали и надеюсь использовали функцию move() в своих проектах. Если нет, то пришло время с ней познакомиться.

Вопрос: Опять этот move, сколько уже можно? Есть же множество опубликованного материала по этой теме?

Ответ: Да, есть много статей. В свое время учился по ним, в том числе и тут, на Хабре [1, 2]. Но мне все равно было не понятно, значит, учитывая статистику, непонятно также и некоторому количеству читателей.

Как обычно начинаются туториалы по move? Рассмотрим lvalue объект, ему соответствует rvalue объект, между ними есть оператор присваивания (=). Тут появляются ссылки, да не просто, а ссылки на lvalue, на rvalue и пошло-поехало. Мозг перегружается, статья пролистывается до конца. Поэтому попробую рассказать о move c другой стороны - в стиле "от практики к теории" - так, как хотел бы чтобы мне рассказали.

Читать далее
Всего голосов 18: ↑15 и ↓3+12
Комментарии69

Тренируемся дома по программе Пола Уэйда. Часть Четвёртая: Мостик или Секрет Бронированного Позвоночника

Время на прочтение23 мин
Количество просмотров55K

Программа Тюремных Тренировок — это эффективные методы обучения по работе со своим весом. Многие из этих забытых, но действенных техник — находятся на грани исчезновения. Современный бодибилдинг поменял наше мышление, навязав ложные убеждения. Поэтому мы сняли этот фильм в Алькатрасе, вернувшись во времена, когда «Скала» была крупнейшей тюрьмой для особо опасных преступников. Пожалуй, это самое правильное место, чтобы показать методы тренировок заключённых.

Приступить к тренировке
Всего голосов 38: ↑33 и ↓5+28
Комментарии15

C++ в Практикуме. Как обучить студентов плюсам, не отпугивая

Время на прочтение8 мин
Количество просмотров28K

Качественное образование — это не просто формальный диплом именитого вуза или парочка сертификатов о пройденных курсах. Это прежде всего новые навыки и уверенное желание применять их на практике. Такое возможно, если человек на самом деле хорошо учился и если его хорошо учили. Ведь даже самую интересную дисциплину можно преподавать так, что студентам будет откровенно скучно. 

Меня зовут Антон Полднев, я уже давно пишу в Яндексе на C++ и руковожу сервисом, написанным на этом языке. Параллельно я учу других людей навыкам разработки. С 2016 года я вёл курсы на Coursera, затем мы их прокачали и сделали на их основе курс для Практикума. В этом посте я расскажу, как мы учим людей C++, а также про основные особенности этого языка. 

Читать далее
Всего голосов 75: ↑58 и ↓17+41
Комментарии111

Абсурдный код или «как не стоит писать»

Время на прочтение5 мин
Количество просмотров13K

Совсем недавно я поделился постом, в котором собрал забавные комменты в исходном коде и читателям зашло. И я решил, а почему бы не сделать похожую подборку, только с кривым кодом? Кому интересно, добро пожаловать под кат.



Как и в предыдущий раз, вдохновился я на этот пост благодаря очень популярному вопросу на Quora, а именно: Какой самый абсурдный код вы когда-либо видели? (Ориг. What is the most absurd code you've ever seen?)


Вопрос размещен пару лет назад, но туда все продолжают прилетать ответы. Несколькими из них я и поделюсь ниже.

Читать дальше →
Всего голосов 26: ↑21 и ↓5+16
Комментарии33

С/С++ на Linux в Visual Studio Code для начинающих

Время на прочтение4 мин
Количество просмотров182K
Давайте начистоту, мало кто использует отладчик GDB на Linux в консольном варианте. Но что, если добавить в него красивый интерфейс? Под катом вы найдёте пошаговую инструкцию отладки кода С/С++ на Linux в Visual Studio Code.


Читать дальше →
Всего голосов 25: ↑19 и ↓6+13
Комментарии60

Специализированные чипы не спасут нас от «тупика ускорителей»

Время на прочтение4 мин
Количество просмотров6.7K


Усовершенствования в скорости работы ЦП замедляются, и мы наблюдаем, как полупроводниковая индустрия переходит на карточки ускорителей, чтобы результаты продолжали заметно улучшаться. Больше всего выгоды от этого перехода получила Nvidia, однако, это часть одной и той же тенденции, питающей исследования в области ускорителей нейросетей, FPGA, и таких продуктов, как TPU от Google. Эти ускорители невероятно увеличили быстродействие электроники в последние годы, и многие начали надеяться, что они представляют собой новый путь развития, в связи с подтормаживанием закона Мура. Но новая научная работа высказывает предположение, что на самом деле всё не так радужно, как хотелось бы некоторым.

Такие специальные архитектуры, как GPU, TPU, FPGA и ASIC если даже и работают совсем не так, как CPU общего назначения, то всё равно используют те же функциональные узлы, что и процессоры x86, ARM или POWER. А это значит, что увеличение быстродействия этих ускорителей тоже в какой-то мере зависит от улучшений, связанных с масштабированием транзисторов. Но какая доля этих улучшений зависела от улучшения технологий производства и увеличения плотности, связанной с законом Мура, а какая – от улучшений в целевых областях, для которых предназначены эти процессоры? Какая доля улучшений связана только с транзисторами?
Читать дальше →
Всего голосов 24: ↑20 и ↓4+16
Комментарии0

Идеальное резюме, которому будут рады рекрутер и работодатель

Время на прочтение12 мин
Количество просмотров230K
Данная статья основана на материалах моего выступления перед студентами Южного Федерального Университета. Большинство примеров – из мира веб-разработки. Однако принципы, о которых я рассказываю, применимы к любой области деятельности.
Читать дальше →
Всего голосов 34: ↑18 и ↓16+2
Комментарии78

Топ 20 ошибок при работе с многопоточностью на С++ и способы избежать их

Время на прочтение21 мин
Количество просмотров76K
Привет, Хабр! Предлагаю вашему вниманию перевод статьи «Top 20 C++ multithreading mistakes and how to avoid them» автора Deb Haldar.


Сцена из фильма «Петля времени» (2012)

Многопоточность— одна из наиболее сложных областей в программировании, особенно в C++. За годы разработки я совершил множество ошибок. К счастью, большинство из них были выявлены на код ревью и тестировании. Тем не менее, некоторые каким-то образом проскакивали на продуктив, и нам приходилось править эксплуатируемые системы, что всегда дорого.

В этой статье я попытался категоризировать все известные мне ошибки с возможными решениями. Если вам известны еще какие-то подводные камни, либо имеете предложения по решению описанных ошибок– пожалуйста, оставляйте свои комментарии под статьей.
Читать дальше →
Всего голосов 62: ↑60 и ↓2+58
Комментарии94

Подборка полезностей для программиста под Linux

Время на прочтение44 мин
Количество просмотров17K

Думаю, у каждого программиста есть набор любимых утилит, трюков и знаний. Некоторые он даже использует в работе. Скорее всего, у разных программистов они различаются. Значит, пришло время поделиться. Сегодня я расскажу о своей подборке того, что, вероятно, известно не настолько широко, как оно того заслуживает. Речь пойдёт преимущественно про платформу GNU/Linux.

Читать дальше →
Всего голосов 33: ↑33 и ↓0+33
Комментарии6

В чем набрать и чем собрать C++ проект

Время на прочтение14 мин
Количество просмотров76K
Задавшись этим вопросом я, в первую очередь, сформулировал требования: жесткие и опциональные (но желательные) для системы сборки и графической среды разработки.
Сразу хочу отметить что речь идет о написании C++ кода не под какую-то специфичную платформу типа Android или фреймворка, например Qt, — где все уже готово, как с построением так и с редактированием кода, а об generic коде не привязанному к конкретной платформе или фреймворку.
Читать дальше →
Всего голосов 57: ↑39 и ↓18+21
Комментарии111

OpenCL. Подробности технологии

Время на прочтение10 мин
Количество просмотров37K


Здравствуй, уважаемое хабрасообщество.

В предыдущей статье про OpenCL был сделан обзор этой технологии, возможностей, которые она может предложить пользователю и ее состояния на настоящий момент.
Теперь рассмотрим технологию более пристально. Постараемся понять, как OpenCL представляет гетерогенную систему, какие предоставляет возможности по взаимодействию с устройством и какой предлагает подход к созданию программ.

читать дальше
Всего голосов 45: ↑43 и ↓2+41
Комментарии10

Оптимальные опции для x86 GCC

Время на прочтение4 мин
Количество просмотров55K
      Распространено мнение, что GCC отстает по производительности от других компиляторов. В этой статье мы постараемся разобраться, какие базовые оптимизации GCC компилятора стоит применить для достижения приемлемой производительности.

Читать дальше →
Всего голосов 89: ↑85 и ↓4+81
Комментарии53

MPAA хочет, чтобы провайдеры отключали от интернета пиратов-рецидивистов

Время на прочтение2 мин
Количество просмотров7.5K
imageВ эпохальном материале на 50 страниц с приложением на 20 страницах Американская ассоциация кинокомпаний (MPAA) доказывает, что пиратов никак нельзя будет победить без активного участия интернет-провайдеров. В частности, по мнению Ассоциации, в идеале провайдеры должны попросту насовсем отключать пиратов-рецидивистов (получивших несколько уведомлений о скачивании нелегального контента) от интернета.

В работе описано множество проблемных, с точки зрения MPAA, мест в законах, и приводятся требования и пожелания к их усовершенствованию. Кроме провайдеров, в борьбе с ненавистным пиратством должны участвовать и поисковики – они не просто обязаны удалять ссылки на пиратский контент по первому требованию правообладателей, но и обеспечить препятствия к повторному появлению ссылок на эти же материалы, находящиеся на других URL.

Регистраторы доменов, естественно, должны по первому требованию правоперекупщиков разделегировать домены пиратских сайтов – таких, как The Pirate Bay.
Читать дальше →
Всего голосов 10: ↑9 и ↓1+8
Комментарии31

Джули Рубикон. Признание бывшего сотрудника Facebook

Время на прочтение9 мин
Количество просмотров66K


Примечание от Робина Слоана, который опубликовал запись в своём блоге 15 марта 2016 года: «Этот рассказ появился в моём защищённом ящике в конце прошлого месяца, вместе с просьбой опубликовать его на Facebook сегодня именно в таком формате. Я не могу поручиться за подлинность истории, но она показалась мне достаточно странной и интересной».

#


Записывать всё это — последнее, что мне хочется делать, но это необходимо. Частично ради людей, которые обязаны знать, что происходит с их публикациями на Facebook, но главным образом (99%) ради Джули Рубикон и того пика на графике.

Мои бывшие коллеги из Facebook Inc. в Менло-Парк, Калифорния — привет, Джейн, привет, Нил, привет… Марк? — немедленно поймут, кто это написал, и компания вероятно будет преследовать меня, но я думаю, они провернут всё тихо. Комиссия по ценным бумагам не ограничится тихим расследованием, если действительно нарушены соответствующие правила и нормы, но честно… вряд ли такие правила существуют.
Читать дальше →
Всего голосов 102: ↑68 и ↓34+34
Комментарии84

Парк куриного периода: учёные вырастили ногу динозавра у курицы

Время на прочтение2 мин
Количество просмотров17K
image

Генетики из Чилийского университета при помощи генетических манипуляций над куриным эмбрионом добились того, что у взрослой курицы ноги приобрели черты ног динозавров. При этом вместо введения в куриный геном новых генов потребовалось, наоборот, выключить некоторые из уже имевшихся.

У куриц в ногах сохранился рудимент под названием малоберцовой кости, напоминающей булавку. Её относительный размер меньше, чем у предков птиц, и она никак не связана с костями в ноге. Учёные выяснили, что подавление гена IHH (Indian hedgehog homolog), отвечающего за развитие костей, приводит к развитию полноценной малоберцовой кости, которая, к тому же, вырастает присоединённой к лодыжке. В результате анатомия ног птицы приблизилась к анатомии хищных динозавров.

У динозавров, предков птиц, большая берцовая и малоберцовая кости были сходного размера и соединялись вместе. В ходе эволюции последняя за ненадобностью уменьшилась и перестала быть соединённой с другими костями. Ещё в 19 веке учёные отметили, что ход эволюции сказывается на развитии эмбрионов птиц – у них обе кости сначала появляются одинаковыми, а затем одна отстаёт в развитии.
Читать дальше →
Всего голосов 27: ↑17 и ↓10+7
Комментарии27

До Марса за три дня?

Время на прочтение6 мин
Количество просмотров39K
В конце февраля многие СМИ опубликовали новость о том, что НАСА придумало способ летать к Марсу и другим планетам с околосветовыми скоростями. Речь шла о работе профессора физического факультета Калифорнийского университета в Санта-Барбаре Филипа Любина (Philip Lubin). Смысл сообщений сводился к тому, что НАСА, в лице вышеупомянутого профессора, собирается запускать зонды к планетам Солнечной системы и за пределами её при помощи подсветки лазерным лучом с Земли. Обещалась доставка 100-килограмового аппарата к Марсу за три дня и другие фантастические возможности. Видимо, по причине явной желтушности заголовков, никто не рискнул перепубликовать подобную новость здесь и на подобных ресурсах. Мне стало интересно, что же все-таки стоит за громкими заголовками и вот, что я выяснил.
Читать дальше →
Всего голосов 39: ↑38 и ↓1+37
Комментарии155

Гексапод Б.У.Н.Т

Время на прочтение3 мин
Количество просмотров81K
Насмотревшись на youtube видео про гексаподов (особенно впечатлил PhantomX), решил попробовать свои силы в роботостроении. Забегая вперёд — всё получилось и вот результат:



Всех интересующихся прошу под кат, там вкратце описана история создания и трудности с которыми пришлось столкнуться, а так же видео работы гексапода. Ни каких графиков, схем и кода, только лирика.
Читать дальше →
Всего голосов 77: ↑75 и ↓2+73
Комментарии35

Информация

В рейтинге
Не участвует
Откуда
Балашиха, Москва и Московская обл., Россия
Дата рождения
Зарегистрирован
Активность