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

Полный барьер памяти и ExclusiveReceiverGroup
Со следующим кодом: var dispatcherQueue = new DispatcherQueue(); long totalSum = 0; Arbiter.Activate( dispatcherQueue, Arbiter.Interleave( new TeardownReceiverGroup(), new ExclusiveReceiverGroup(...
176 просмотров
schedule 05.03.2023

Состояние гонки на x86
Кто-нибудь может объяснить это утверждение: shared variables x = 0, y = 0 Core 1 Core 2 x = 1; y = 1; r1 = y; r2 = x; Как возможно иметь r1 == 0 и r2 == 0 на процессорах x86? Источник "Язык параллелизма", Бартош...
2079 просмотров
schedule 25.06.2022

Имеет ли смысл барьер памяти только в SMP?
Я понимаю, зачем нужны барьеры памяти, но не понимаю в случае с Uniprocessor. Придется ли мне сталкиваться с препятствиями, даже когда я использую UP? Каждый документ объясняет их с помощью SMP, но не UP. В следующем коде есть вероятность, что...
355 просмотров
schedule 08.12.2023

Функционирует ли mutex_unlock как ограждение памяти?
Ситуация, которую я опишу, происходит на iPad 4 (ARMv7s), где используются библиотеки posix для блокировки / разблокировки мьютексов. Тем не менее, я видел похожие вещи на других устройствах ARMv7 (см. Ниже), поэтому я полагаю, что любое решение...
2020 просмотров
schedule 18.11.2022

почему MemoryBarrier можно реализовать как вызов xchg?
на msdn http://msdn.microsoft.com/en-us/library/windows/desktop/ms684208(v=vs.85).aspx , MemoryBarrier реализован как вызов xchg. // x86 FORCEINLINE VOID MemoryBarrier ( VOID ) { LONG Barrier; __asm { xchg Barrier, eax...
743 просмотров
schedule 02.04.2023

Сроки когерентности кешей памяти после барьера памяти и после взаимосвязанных операций
Есть ли разница во времени согласованности (или «сброса») кэшей памяти после операций с блокировкой и после вызова барьеров памяти? Давайте рассмотрим на C # - используя любые операции Interlocked vs Thread.MemoryBarrier () - идентично ли...
71 просмотров

Можно ли действительно переупорядочить память в процессоре OoOE?
Мы знаем, что две инструкции можно переупорядочить с помощью процессора OoOE . Например, есть две глобальные переменные, общие для разных потоков. int data; bool ready; Поток записи создает data и включает флаг ready , чтобы позволить...
643 просмотров

Почему SFENCE + LFENCE эквивалентно (или нет?) MFENCE?
Как мы знаем из предыдущего ответа на вопрос Имеет ли смысл инструкция LFENCE в процессорах x86 / x86_64? , что мы не можем использовать SFENCE вместо MFENCE для последовательной согласованности. Ответ там предполагает, что MFENCE = _4 _ + _...
2277 просмотров

Как я могу судить, где я должен поставить барьер памяти в коде?
Когда я читаю ldd3, я получаю представление о барьере памяти, говорится, что выполнение кода будет переупорядочено по причине, например, оптимизации кэширования и компиляции. Я думаю, что коды, которые не имеют зависимостей, могут быть...
116 просмотров
schedule 31.01.2023

Что я должен использовать в качестве барьера памяти для коллекции?
Скажем, у меня есть Java ArrayList , которая, очевидно, не может быть переменной volatile ( volatile в том смысле, что все ее внутренние переменные являются volatile ), и я хочу увидеть ее последнее состояние во втором потоке, учитывая, что я...
169 просмотров

Атомарность на x86
8.1.2 Блокировка шины Процессоры Intel 64 и IA-32 обеспечивают сигнал LOCK #, который автоматически устанавливается во время определенных критических операций с памятью для блокировки системной шины или эквивалентного канала. Пока этот...
11642 просмотров

Понимание использования барьеров памяти C++
Барьер std::memory_order_acquire гарантирует, что все операции, такие как чтение/запись, которые идут после барьера, будут выполняться после всех операций чтения (загрузки) перед барьером. Например, у меня есть следующий код: #include...
103 просмотров
schedule 05.09.2022

Предотвращает ли что-либо, кроме __syncthreads(), опасности чтения-после-записи совместно используемой памяти внутри деформации?
У меня есть деформация, которая записывает некоторые данные в общую память - без перезаписи и вскоре после этого читает из общей памяти. Хотя в моем блоке могут быть и другие варпы, они не будут касаться какой-либо части этой общей памяти или писать...
256 просмотров

Почему работает этот `std :: atomic_thread_fence`
Во-первых, я хочу перечислить некоторые из моих обязательств по этому поводу, поправьте меня, если я ошибаюсь. MFENCE в x86 может обеспечить полный барьер Последовательная согласованность предотвращает переупорядочивание STORE-STORE,...
1057 просмотров
schedule 05.08.2022

C # Shared Memory - риск кэширования ЦП (энергонезависимое чтение)?
Меня интересует реализация общей памяти в С#. MemoryMappedViewAccessor позволяет считывать данные из общей области памяти. Теперь memoryMappedViewAccessor наследуется от UnmanagedMemoryAccessor, который предоставляет доступ к таким методам, как...
233 просмотров

Отличается ли atomic_thread_fence (memory_order_release) от использования memory_order_acq_rel?
cppreference.com предоставляет это примечание о std::atomic_thread_fence (выделено мной): atomic_thread_fence накладывает более строгие ограничения синхронизации, чем операция атомарного хранилища с тем же std :: memory_order. В то...
1720 просмотров

Зачем atomic_thread_fence(memory_order_seq_cst) в незаблокированной очереди, которая уже использует seq_cst CAS?
Очередь без блокировки, только один поток выполняет push и pop, а другие выполняют кражу. Однако я не могу понять, зачем steal() нужен std::atomic_thread_fence(std::memory_order_seq_cst) . На мой взгляд, steal() имеет только одну операцию...
311 просмотров
schedule 07.02.2023

Google WorkStealingDequeue использует memory_order_seq_cst в качестве полного барьера памяти. Это действительно так?
Я изучаю систему работы Google Filament. В настоящее время я изучаю реализованный ими WorkStealingDequeue. Вы можете посмотреть полный исходный код здесь . Эта структура данных основана на этой работе . В своей реализации pop and steal они...
315 просмотров
schedule 25.05.2024

энергозависимость и барьер памяти для прерываний
Пусть x и y будут переменными, которые используются совместно основным кодом и кодом прерывания. Я считаю, что volatile всегда нужен только для аппаратных переменных и переменных прерывания, которые также используются в основном коде....
541 просмотров
schedule 15.06.2022

Как выразить в С++ 11 обычные хранилища (экспорт) и загрузки (импорт) барьеры (заборы)?
В следующем коде реализована некоторая свободная от блокировок (и атомарная!) связь между потоками, которая требует использования барьеров сохранения и загрузки памяти, но семантика освобождения-получения C++11 не подходит и не гарантирует...
238 просмотров