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

По вопросам моделей упорядочения памяти на уровне языка программирования (выше уровня ISA или машинного языка).
3

Насколько эффективным барьером является атомная запись, за которой следует атомное чтение той же переменной?

Рассмотрим следующее: #include <atomic> std::atomic<unsigned> var; unsigned foo; unsigned bar; unsigned is_this_a_full_fence() { var.store(1, std::memory_order_release); var.load(std::memory_order_acquire); bar = 5; ...
10 янв. '18 в 6:10
0

Какая из моделей памяти C++ позволяет и не позволяет загружать буферизацию?

Я читал, что буферизация хранилища допускается всеми существующими моделями слабых памяти. Что такое буферизация загрузки? Какие модели памяти не позволяют загружать буферизацию?
20 февр. '18 в 19:10
1

Модель памяти: записи активации

Я просто прочитал книгу, в которой говорится, что запись активации в верхней части стека (в памяти) всегда находится там, где находится точка исполнения. Итак, мой вопрос заключается в том, какая запись активации находится наверху во время параллель...
23 февр. '18 в 0:51
1

С++ простой мьютекс с использованием atomic_flag (код не работает)

Это упражнение с использованием atom_flag с моделью памяти покупки/выпуска для реализации очень простого мьютекса. Есть количество НИТОВ количество потоков, и каждый шаг потока увеличивается на LOOP число раз. Эти потоки синхронизируются с этим прос...
24 мар. '18 в 23:09
2

Приобретение/выпуск VS Последовательная согласованность в С++ 11?

#include <thread> #include <atomic> #include <cassert> std::atomic<bool> x = {false}; std::atomic<bool> y = {false}; std::atomic<int> z = {0}; void write_x() { x.store(true, std::memory_order_release); } vo...
22 мая '18 в 8:18
1

С++ 11 чтение bool одновременно

Когда у меня есть std::condition_variable cond и некоторый bool flag я могу дождаться его с помощью предиката: cond.wait_for(some_lock, std::chrono::milliseconds(100), { return flag; }) Теперь мне интересно: Технически C++ только получил правильну...
12 июн. '18 в 13:21
1

Совместное использование памяти с оптимизацией ядра и компилятора

frame делится с ядром. Код пользователя: read frame // read frame content _mm_mfence // prevent before "releasing" a frame before we read everything. frame.status = 0 // "release" a frame Код ядра: poll for frame.status // reads a frame status ...
22 июл. '18 в 19:03
1

Что произойдет, если два атома fetch_add выполняются одновременно?

Насколько я знаю, атомные операции атомного типа в cpp11 гарантированно являются аомматическими. Однако предположим, что в многоядерной системе, если два потока выполняют следующую операцию одновременно, будет ли результат равен 1? (Предположим, что...
29 июл. '18 в 12:51
4

Модели памяти и параллелизм

Я хотел знать о модели памяти C/C++, но во всех статьях, блогах, видеороликах YouTube я нашел, что "Модели памяти нужны только для параллелизма". Может ли кто-нибудь объяснить мне, почему это так? Я понимаю, что модель памяти - это абстракция, кот...
18 авг. '18 в 20:37
0

ARM слабый порядок памяти

Как работает следующий код для модели памяти со слабым упорядочением, такой как ARM? Примечание: я знаю, что порядок памяти относится только к многоядерным потокам, и что приведенный ниже код работает только в одном ядре, но все же есть вопросы ниж...
12 апр. '19 в 18:01
1

Как понять RELAXED ORDERING в std :: memory_order (C++)

Я прочитал много постов и посмотрел несколько видео на Youtube C++ с атомной моделью и моделью памяти (ConCpp 17, 14). Когда я читаю книгу "Параллельность в действии", раздел 5.3.3, РАССЛАБЛЕННЫЙ ЗАКАЗ, я все еще не могу понять пример, приведенный ...
14 апр. '19 в 22:39
1

По поводу порядка следования команд при выполнении на x86

Учитывая небольшую программу, показанную ниже (созданную вручную, чтобы выглядеть одинаково с точки зрения последовательной согласованности /tso), и предположим, что она выполняется суперскалярным процессором x86: Load A <-- A in main memory Load...
10 мая '19 в 3:03
1

С++ 11 memory_model_relaxed и memory_order_seq_cst отношение

Привет я пытаюсь понять реализацию блокировки украсть работу без блокировки. В настоящее время я читаю одну реализацию Google накаливания здесь. Меня больше всего беспокоит операция по краже. template <typename TYPE, size_t COUNT> TYPE WorkSte...
19 мая '19 в 15:33
0

READ_ONCE и WRITE_ONCE в реальном примере

int __thread theft = 0; static void flush_local_count_sig(int unused) { if (READ_ONCE(theft) != THEFT_REQ) (*) return; smp_mb(); WRITE_ONCE(theft, THEFT_ACK) if (!counting) { WRITE_ONCE(theft, THEFT_READY); } ...
06 июн. '19 в 11:33
2

Когда происходит UB и аннулирует ли он все ранее заключенные контракты?

Семантика языка C или C++ формирует контраст с пользователем. Некоторые конструкции не имеют каких-либо ограничений в своем поведении, либо из-за отсутствия определенного поведения в некоторых случаях (например, разыменование указателя, который не у...
10 июн. '19 в 18:39