Вопросы по теме 'memory-barriers'

Барьеры памяти и большие структуры?
Допустим, у меня есть структура, состоящая из 100 байтов. Какие гарантии у меня есть по поводу следующего кода? m_myLargeStruct = someValue; // copying 100 bytes Thread.MemoryBarrier(); // Executed by another thread, after "Thread.MemoryBarrier"...
514 просмотров

Барьеры памяти и параллельные расширения
Нужно ли беспокоиться о MemoryBarriers при использовании параллельных расширений? Изменить - уточнить, поскольку исходный вопрос был открытым: ответ @xanatos был тем, что я искал) Чтобы привести конкретный пример: предположим, что я использую...
109 просмотров

Создает ли std::mutex забор?
Если я заблокирую std::mutex , всегда ли я буду получать ограничение памяти? Я не уверен, подразумевает ли это или заставляет вас получить забор. Обновлять: Нашел эту ссылку после комментариев RMF. Многопоточное программирование и...
5099 просмотров

Самая быстрая спин-блокировка при встроенной сборке
Я пишу многопоточное приложение на C ++, где производительность имеет решающее значение. Мне нужно использовать много блокировок при копировании небольших структур между потоками, для этого я решил использовать спин-блокировки. Я провел небольшое...
12521 просмотров
schedule 24.10.2022

asio неявная цепочка и синхронизация данных
Когда я читаю исходный код asio, мне любопытно, как asio синхронизирует данные между потоками, даже если была создана неявная цепочка. Это код в asio: io_service:: запустить mutex::scoped_lock lock(mutex_); std::size_t n = 0; for (;...
943 просмотров

Что такое барьер зависимости от данных: ядро ​​Linux
Как говорится в вопросе, я искал подробное объяснение барьера зависимости от данных в SMP, особенно в отношении ядра Linux. У меня есть определение и краткое описание по этой ссылке здесь. Документация по барьерам памяти ядра Linux Однако я...
657 просмотров

Как барьер / ограждение памяти препятствует переупорядочению команд, выполняемому процессором?
Насколько мне известно, и компилятор, и процессор могут выполнять переупорядочение инструкций. Под «выполняемым ЦП» я имею в виду, что меня не волнует переупорядочение инструкций, которое выполняется компилятором, и переупорядочение, вызванное...
504 просмотров
schedule 24.07.2023

Должен ли потокобезопасный класс иметь в конце конструктора барьер памяти?
При реализации класса, который должен быть потокобезопасным, должен ли я включать барьер памяти в конце его конструктора, чтобы гарантировать, что все внутренние структуры будут инициализированы до того, как к ним можно будет получить доступ? Или это...
947 просмотров

OpenGL Compute Shader — правильное использование барьера памяти
Я надеюсь, что смогу читать и записывать потенциально те же элементы SSBO как часть гибкого симулятора с использованием вычислительных шейдеров, но у меня проблемы с синхронизацией. У меня есть тестовый шейдер, который запускается 16 раз, с тремя...
909 просмотров

Возможен ли тупик в этом простом сценарии?
См. следующий код: std::mutex mutex; std::condition_variable cv; std::atomic<bool> terminate; // Worker thread routine void work() { while( !terminate ) { { std::unique_lock<std::mutex> lg{ mutex };...
276 просмотров
schedule 07.01.2024

Есть ли неявный барьер памяти с отношениями synchronized-with в thread :: join?
У меня есть работающий код, который запускает несколько потоков, выполняющих некоторые операции, и если какой-либо из них терпит неудачу, они устанавливают для общей переменной значение false . Затем основной поток присоединяется ко всем рабочим...
674 просмотров

Является ли барьер памяти инструкцией, которую выполняет процессор, или это просто маркер?
Пытаюсь понять, что такое барьер памяти. На основании того, что я знаю до сих пор, барьер памяти (например: mfence ) используется для предотвращения переупорядочения инструкций от до к после и от после до до барьера памяти. Это пример...
5393 просмотров

Есть ли что-нибудь, что мешает процессору долго ждать перед выполнением запланированных операций с наборами?
Допустим, у меня есть два потока, которые совместно используют глобальную переменную x . Задача Thread A — установить значение x , а задача Thread B — прочитать x . Теперь каждый поток (или, я полагаю, каждое ядро) будет иметь кэшированную...
67 просмотров

Атомарное приращение C ++ с упорядочением памяти
Прочитав главу 5 «Параллелизм в C ++ в действии», я попытался написать код, чтобы проверить свое понимание упорядочения памяти: #include <iostream> #include <vector> #include <thread> #include <atomic>...
1776 просмотров
schedule 23.03.2024

gcc и cpu_relax, smb_mb и т. д.?
Я читал об оптимизации компилятора по сравнению с оптимизацией ЦП и volatile по сравнению с барьерами памяти. Одна вещь, которая мне не ясна, заключается в том, что мое текущее понимание состоит в том, что оптимизация процессора и оптимизация...
2940 просмотров
schedule 08.04.2022

Какие именно ограждения предоставляются std :: memory_order в C ++?
Насколько я знаю, перечисление std :: memory_order обеспечивает ограждения памяти, но мне нужно быть уверенным в ограждениях, которые предоставляются каждым элементом перечисления std :: memory_order. Ниже я объясняю, как я понимаю каждый элемент...
422 просмотров

Оптимизация выделенных хранилищ памяти на процессоре x86
mov 0x0ff, 10 sfence mov 0x0ff, 12 sfence Может ли он выполняться x86-CPU как: mov 0x0ff, 12 sfence ?
92 просмотров
schedule 03.06.2022

Могу ли я в этом случае не использовать освобождение и получение барьеров?
В этом руководстве говорится следующее: каждая загрузка на x86/64 уже подразумевает семантику получения, а каждое сохранение подразумевает семантику выпуска. Теперь скажем, у меня есть следующий код (я написал свои вопросы в...
185 просмотров

Если я не использую ограждения, сколько времени может потребоваться ядру, чтобы увидеть записи другого ядра?
Я пытался погуглить свой вопрос, но, честно говоря, не знаю, как его кратко сформулировать. Предположим, у меня есть два потока в многоядерной системе Intel. Эти потоки работают на одном узле NUMA. Предположим, поток 1 записывает в X один раз, а...
411 просмотров

Выполняется ли сериализация LFENCE на процессорах AMD?
В последних документах Intel ISA инструкция lfence была определена как сериализация потока инструкций (предотвращение выполнения в нем вне очереди). В частности, описание инструкции включает следующую строку: В частности, LFENCE не...
1512 просмотров