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

Как _ReadWriteBarrier распространяется вверх по дереву вызовов?
Я просматриваю этот фрагмент текста в документации для встроенного _ReadWriteBarrier Visual C++: В прошлых версиях компилятора Visual C++ функции _ReadWriteBarrier и _WriteBarrier применялись только локально и не влияли на функции выше по...
1154 просмотров

Компилятор переупорядочивает границы мьютекса?
Предположим, у меня есть собственные невстроенные функции LockMutex и UnlockMutex, которые используют какой-то правильный мьютекс, например boost, внутри. Как компилятор узнает, что не следует изменять порядок других операций в отношении вызовов...
1745 просмотров

Заборы в C ++ 0x, гарантии только на атомику или память в целом
В C ++ 0x draft есть понятие ограждений, которые кажется очень отличным от понятия ограждений на уровне процессора / микросхемы или того, что ребята из ядра Linux ожидают от ограждений . Вопрос в том, действительно ли проект подразумевает крайне...
2428 просмотров

Попытка понять связь между Thread.MemoryBarrier() и переключением контекста
Поскольку кажется, что переключение контекста может произойти в любой момент выполнения инструкций, мне теперь интересно, почему код «в рассматриваемой части» (эти две инструкции) имеет смысл, если переключение контекста может произойти между любыми...
541 просмотров

Неисправное выполнение и ограждения памяти
Я знаю, что современные процессоры могут работать не по порядку, однако они всегда удаляют результаты по порядку, как описано в Википедии. «Вне очереди процессоры заполняют эти« слоты »вовремя другими готовыми инструкциями, затем переупорядочивают...
3339 просмотров
schedule 24.12.2022

Обеспечивает ли _ReadWriteBarrier видимость динамически распределяемых буферов между потоками?
Я использую Visual C++ и Windows 7 и XP. У меня есть два потока в программе, где после создания обоих один поток динамически создает буфер и присваивает его адрес глобальному указателю, а затем записывает данные в этот буфер. Будет ли вызов...
512 просмотров

Каковы примеры барьеров памяти в C++?
Я вижу, что блокировка мьютексов С++ 11 не void lock() volatile . Как компилятор узнает, какие функции являются барьерами памяти, а какие нет? Все ли функции являются барьерами, даже если они не изменчивы? Какие менее известные барьеры памяти и...
797 просмотров
schedule 28.04.2023

Требуются ли барьеры памяти при присоединении к потоку?
Если поток A порождает другой поток B с единственной целью записи в переменную V, а затем ждет его завершения, требуются ли барьеры памяти, чтобы гарантировать, что последующие чтения V в потоке A будут свежими? Я не уверен, есть ли какие-либо...
759 просмотров

Как написать барьер памяти для DSP TMS320F2812?
Я просмотрел руководство пользователя компилятора TI C/C++ v6.1 ( spru514e ), но ничего не нашел. Оператор asm , кажется, ничего не дает в этом отношении, руководство даже предостерегает от изменения значений переменных (p132). Расширение GNU для...
942 просмотров

когерентность кэша защищенных блокировкой данных
Данные потоки TA и TB, конкурирующие в f() ниже: struct C { C(): a(0) {} int a; std::mutex mtx; void f() { ... // use 'a' in readonly mode std::lock_guard<std::mutex> lock(mtx); // assume TA gets the lock first, then TB a...
241 просмотров
schedule 10.08.2022

Spinlock.exit с барьером памяти или без него
Поскольку барьеры памяти являются для меня новой концепцией, я пытаюсь разобраться с ними, поэтому я написал следующую тестовую программу (C#): private static void Func1() { SpinLock sl = new SpinLock(); Action action = () => {...
440 просмотров
schedule 04.04.2022

C # / CLR: MemoryBarrier и разорванное чтение
Просто поигрался с параллелизмом в свободное время и хотел попытаться предотвратить разорванные чтения без использования блокировок на стороне считывателя, чтобы одновременные считыватели не мешали друг другу. Идея состоит в том, чтобы...
376 просмотров

Определение места для использования заграждений (заборов)
Инструкции x86 lfence / sfence / mfence используются для реализации механизмов rmb () / wmb () / mb () в ядре Linux. Легко понять, что они используются для сериализации обращений к памяти. Однако гораздо сложнее определить, когда и где их...
167 просмотров

Инструкция
У меня есть вопрос о переупорядочивании юридических инструкций в C#/.NET. Начнем с этого примера. У нас есть этот метод, определенный в каком-то классе, где _a, _b и _c — поля. int _a; int _b; int _c; void Foo() { _a = 1; // Write 1 _b =...
1287 просмотров
schedule 06.02.2023

Стек с блокировкой вращения и барьеры памяти (C ++)
У меня есть блокировка вращения реализации: class Spinlock { public: void Lock() { while (true) { if (!_lock.test_and_set(std::memory_order_acquire)) { return; } } } void...
166 просмотров

Наименьшее ограничение в памяти для спин-блокировки с двумя атомами
У меня есть рабочие потоки, выполняющие критичную по времени обработку с регулярными интервалами (примерно 1 кГц). В каждом цикле рабочих будят для выполнения работы, каждая из которых должна (в среднем) завершаться до начала следующего цикла. Они...
768 просмотров

Освобождать буфер после чтения из вычислительного шейдера GL
У меня есть реализация Marching Cubes на графическом процессоре, которая использует последовательность из 6 вычислительных шейдеров GL, при этом каждое чтение из буферов, записанных предыдущими шейдерами, после соответствующих барьеров памяти....
205 просмотров
schedule 17.06.2022

Переупорядочивание GCC при загрузке с помощью `memory_order_seq_cst`. Это разрешено?
Используя упрощенную версию базовой seqlock , gcc переупорядочивает неатомарную загрузку через атомарный load(memory_order_seq_cst) при компиляции код с -O3 . Такое переупорядочение не наблюдается при компиляции с другими уровнями оптимизации...
246 просмотров
schedule 22.03.2022

Запись в аппаратные регистры через /dev/mem требует дополнительной записи
Запись в аппаратные регистры через /dev/mem требует дополнительной записи Я хочу записать в некоторые аппаратные регистры, используя /dev/mem в Linux. Целевая плата — ZYBO (Zynq, ARM Cortex-A9), а аппаратное обеспечение — AXI4 Lite Slave с 4...
1685 просмотров

Есть ли какой-либо барьер компилятора, равный asm(:::memory) в С++ 11?
Мой тестовый код показан ниже, и я обнаружил, что только memory_order_seq_cst запрещает переупорядочивать компилятор. #include <atomic> using namespace std; int A, B = 1; void func(void) { A = B + 1;...
1759 просмотров
schedule 03.02.2023