Вопросы по теме '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 просмотров
schedule
13.04.2022
Можно ли действительно переупорядочить память в процессоре OoOE?
Мы знаем, что две инструкции можно переупорядочить с помощью процессора OoOE . Например, есть две глобальные переменные, общие для разных потоков.
int data;
bool ready;
Поток записи создает data и включает флаг ready , чтобы позволить...
643 просмотров
schedule
18.08.2023
Почему SFENCE + LFENCE эквивалентно (или нет?) MFENCE?
Как мы знаем из предыдущего ответа на вопрос Имеет ли смысл инструкция LFENCE в процессорах x86 / x86_64? , что мы не можем использовать SFENCE вместо MFENCE для последовательной согласованности.
Ответ там предполагает, что MFENCE = _4 _ + _...
2277 просмотров
schedule
05.08.2023
Как я могу судить, где я должен поставить барьер памяти в коде?
Когда я читаю ldd3, я получаю представление о барьере памяти, говорится, что выполнение кода будет переупорядочено по причине, например, оптимизации кэширования и компиляции. Я думаю, что коды, которые не имеют зависимостей, могут быть...
116 просмотров
schedule
31.01.2023
Что я должен использовать в качестве барьера памяти для коллекции?
Скажем, у меня есть Java ArrayList , которая, очевидно, не может быть переменной volatile ( volatile в том смысле, что все ее внутренние переменные являются volatile ), и я хочу увидеть ее последнее состояние во втором потоке, учитывая, что я...
169 просмотров
schedule
20.04.2024
Атомарность на x86
8.1.2 Блокировка шины
Процессоры Intel 64 и IA-32 обеспечивают сигнал LOCK #, который автоматически устанавливается во время определенных критических операций с памятью для блокировки системной шины или эквивалентного канала. Пока этот...
11642 просмотров
schedule
07.07.2023
Понимание использования барьеров памяти C++
Барьер std::memory_order_acquire гарантирует, что все операции, такие как чтение/запись, которые идут после барьера, будут выполняться после всех операций чтения (загрузки) перед барьером.
Например, у меня есть следующий код:
#include...
103 просмотров
schedule
05.09.2022
Предотвращает ли что-либо, кроме __syncthreads(), опасности чтения-после-записи совместно используемой памяти внутри деформации?
У меня есть деформация, которая записывает некоторые данные в общую память - без перезаписи и вскоре после этого читает из общей памяти. Хотя в моем блоке могут быть и другие варпы, они не будут касаться какой-либо части этой общей памяти или писать...
256 просмотров
schedule
20.03.2023
Почему работает этот `std :: atomic_thread_fence`
Во-первых, я хочу перечислить некоторые из моих обязательств по этому поводу, поправьте меня, если я ошибаюсь.
MFENCE в x86 может обеспечить полный барьер
Последовательная согласованность предотвращает переупорядочивание STORE-STORE,...
1057 просмотров
schedule
05.08.2022
C # Shared Memory - риск кэширования ЦП (энергонезависимое чтение)?
Меня интересует реализация общей памяти в С#. MemoryMappedViewAccessor позволяет считывать данные из общей области памяти.
Теперь memoryMappedViewAccessor наследуется от UnmanagedMemoryAccessor, который предоставляет доступ к таким методам, как...
233 просмотров
schedule
17.05.2022
Отличается ли atomic_thread_fence (memory_order_release) от использования memory_order_acq_rel?
cppreference.com предоставляет это примечание о std::atomic_thread_fence (выделено мной):
atomic_thread_fence накладывает более строгие ограничения синхронизации, чем операция атомарного хранилища с тем же std :: memory_order.
В то...
1720 просмотров
schedule
03.10.2022
Зачем 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 просмотров
schedule
25.04.2023