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

Комментарии 13

Спасибо за статью.
Могу также посоветовать очень хорошую книгу для понимания многопоточки в С++ -
Энтони Уильямс: Параллельное программирование на С++ в действии.

Книга отличная, но как по мне, именно раздел по атомикам там написан очень непонятно

Абослютно согласен. Читаю сейчас как раз ее и, чтобы разобраться, открыл статью эту 😁

Спасибо за хорошую статью.
Очень понравилось про причиные некоторого поведения, например:
atomic2 = atomic1;
Где-то ещё можно такое почитать?

Ещё я бы немного поправил вот это место (чтобы было ясно, что новый код функционально эквивалентен, но только при однопоточной работе).

Компилятор и CPU могут переупорядочивать операции чтения/записи (при условии, что это переупорядочивание никак не затронет функциональность однопоточного кода), то есть могут быть фактически выполнены в порядке, отличном от того, который определен в коде. Проблема с этим может возникнуть в многопоточной среде,

Мне зашли лекции МФТИ от Константина Владимирова, про атомарность у него получилось целых три часовых занятия.
Многопоточность надо программировать так как она реализована в C++ (где один UB погоняет другим), а так как она реализована в opencl или cuda.

А если хочется заморачиваться зависимостями в графе исполнения, то лучше использовать taskflow

Жду вашу реализацию лок фри очереди так "как это делается в opencl и cuda"

Ваша задача не локфри очередь сделать, а раздать задания так что бы не было очередей.

вы полностью отрицаете существование не параллелящихся алгоритмов?

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

Отличный план! Осталось понять как раздавать задания без использования очередей...

other = atomicBool.load();

Искал по тексту но так и не нашел определения переменной atomicBool. Какой у нее тип хотя бы? Интуитивно я догадываюсь, что std::atomic<bool>, хотя может быть и ошибаюсь.

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

Зарегистрируйтесь на Хабре, чтобы оставить комментарий