Обновить
2
0

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

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

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

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

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

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

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

Читать далее

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

Время на прочтение4 мин
Охват и читатели13K

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

Читать далее

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

Время на прочтение4 мин
Охват и читатели8.1K

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

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

Читать далее

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

Время на прочтение6 мин
Охват и читатели96K

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

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

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

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

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

Читать далее

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

Время на прочтение8 мин
Охват и читатели31K

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

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

Читать далее

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

Время на прочтение5 мин
Охват и читатели14K

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



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


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

Читать дальше →

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

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


Читать дальше →

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

Время на прочтение4 мин
Охват и читатели6.8K


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

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

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

Время на прочтение12 мин
Охват и читатели290K
Данная статья основана на материалах моего выступления перед студентами Южного Федерального Университета. Большинство примеров – из мира веб-разработки. Однако принципы, о которых я рассказываю, применимы к любой области деятельности.
Читать дальше →

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

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


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

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

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

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

Время на прочтение44 мин
Охват и читатели18K

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

Читать дальше →

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

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

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

Время на прочтение10 мин
Охват и читатели39K


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

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

читать дальше

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

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

Читать дальше →

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

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

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

Регистраторы доменов, естественно, должны по первому требованию правоперекупщиков разделегировать домены пиратских сайтов – таких, как The Pirate Bay.
Читать дальше →

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

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


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

#


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

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

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

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

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

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

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

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

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

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

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



Всех интересующихся прошу под кат, там вкратце описана история создания и трудности с которыми пришлось столкнуться, а так же видео работы гексапода. Ни каких графиков, схем и кода, только лирика.
Читать дальше →

Информация

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