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

многопоточность python: модель памяти и видимость
Выявляет ли многопоточность python проблемы видимости памяти и переупорядочения операторов, как это делает Java? Поскольку я не могу найти никаких ссылок на «Модель памяти Python» или что-то в этом роде, несмотря на то, что многие люди пишут...
11566 просмотров
schedule 27.04.2024

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

Параллельный доступ Java к полю, трюк, чтобы не использовать volatile
Предисловие: я знаю, что в большинстве случаев использование volatile поля не приведет к измеримому снижению производительности, но этот вопрос более теоретический и нацелен на дизайн с чрезвычайно высокой поддержкой корректности. У меня есть поле...
784 просмотров

Как понять, что происходит, прежде чем последовательный
В главе 17 JLS , он вводит понятие: происходит - прежде, чем согласовано. Набор действий A является согласованным, если для всех чтений r в A, где W (r) - это действие записи, наблюдаемое r, то не так, что либо hb (r, W (r)), либо что там...
5745 просмотров
schedule 24.03.2022

Разрешается ли переупорядочивание этой инструкции JLS или нет?
Согласно Спецификации языка Java ( Пример 17.4 -1 ) следующий фрагмент (начиная с A == B == 0 )... Thread 1 Thread 2 -------- -------- r2 = A; r1 = B; B = 1; A = 2; ... может привести к r2...
178 просмотров
schedule 08.01.2023

Чем различаются порядки получения и потребления памяти и когда потребление предпочтительнее?
Стандарт C ++ 11 определяет модель памяти (1.7, 1.10), которая содержит порядок памяти , который, грубо говоря, является «последовательно согласованным», «приобретать», «потреблять», «выпускать», и «расслаблен». В равной степени программа является...
5043 просмотров
schedule 02.05.2023

Доступ к C++11 std atomic без каких-либо ограничений порядка памяти
Различные алгоритмы без блокировки не имеют требований к порядку загрузки или сохранения в быстром пути. Например, в этом краже работы http://www.cs.rice.edu/~vs3/PDF/ppopp.09/p45-michael.pdf операция кражи требует атомарного сравнения и замены, но...
379 просмотров

Гонки данных, UB и счетчики в C++11
Следующий шаблон является обычным для многих программ, которые хотят сообщить пользователю, сколько раз они выполняли различные действия: int num_times_done_it; // global void doit() { ++num_times_done_it; // do something } void...
968 просмотров
schedule 27.12.2022

Имеет ли пустое значение synchronized(this){} какое-либо значение для видимости памяти между потоками?
Я прочитал это в комментарии к StackOverflow, получившему одобрение: Но если вы хотите быть в безопасности, вы можете добавить простой synchronized(this) {} в конце @PostConstruct [метод] [обратите внимание, что переменные НЕ были...
823 просмотров

Ослабленная производительность упорядочивания x86?
Поскольку Intel предоставляет надежную аппаратную модель памяти, есть ли вообще какое-то преимущество в использовании memory_order_relaxed в программе на C ++ 11? Или просто оставьте значение по умолчанию «последовательное согласование», поскольку...
248 просмотров
schedule 06.08.2022

Применяет ли объект Java Lock отношение «происходит до»?
Java предоставляет объект Lock в пакете параллелизма, который согласно документации provides more extensive locking operations than can be obtained using synchronized methods and statements. Синхронизированные методы/блоки, помимо взаимного...
477 просмотров

Ручная синхронизация в OpenMP while loop
Недавно я начал работать с OpenMP, чтобы провести небольшое «исследование» для проекта в университете. У меня есть прямоугольная и равномерно распределенная сетка, на которой я решаю уравнение в частных производных с итерационной схемой. Таким...
583 просмотров
schedule 18.08.2022

Параллелизм С++ в действии
Это вопрос о порядке памяти, указанном в «параллелизме С++ в действии». Во-первых, в листинге 5.7; следствие может быть: Тема А: x.store(true, release) Поток B: x.load(acquire) возвращает true, y.load(acquire) возвращает false...
391 просмотров

Есть ли акаузальное поведение с циклами зависимости в расслабленной модели памяти C ++?
Предположим, что x и y являются атомарными целыми числами, инициализированными 0. Теперь поток A выполняет следующий код: if (x.load(memory_order_relaxed) == 1) { y.store(1, memory_order_relaxed); } и поток B запускает этот код:...
86 просмотров
schedule 19.04.2022

Как я могу обеспечить порядок между записью и чтением в глобальную память?
У меня есть ядро ​​CUDA следующей формы: Void launch_kernel(..Arguments...) { int i = threadIdx.x //Load required data int temp1 = A[i]; int temp2 = A[i+1]; int temp3= A[i+2]; // compute step int output1 = temp1...
692 просмотров
schedule 07.06.2023

Использование атомарной операции чтения-изменения-записи в последовательности выпуска
Скажем, я создаю объект типа Foo в потоке №1 и хочу иметь к нему доступ в потоке №3. Я могу попробовать что-то вроде: std::atomic<int> sync{10}; Foo *fp; // thread 1: modifies sync: 10 -> 11 fp = new Foo; sync.store(11,...
1231 просмотров

Может ли современное оборудование x86 не хранить в памяти ни одного байта?
Говоря о модели памяти C ++ для параллелизма, Страуструп язык программирования C ++ , 4-е изд., Разд. 41.2.1, говорит: ... (как и большинство современного оборудования) машина не могла загрузить или сохранить что-либо меньшее, чем слово....
3809 просмотров
schedule 14.09.2022

Приобретение/выпуск VS Sequential Consistency в C++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); }...
619 просмотров

Как кеши данных маршрутизируют объект в этом примере?
Рассмотрим схематическую архитектуру кэша данных. (Далее следует искусство ASCII.) -------------------------------------- | CPU core A | CPU core B | | |------------|------------| Devices | | Cache A1 | Cache B1 | with DMA...
114 просмотров

Увидит ли вызывающий поток изменения локальных переменных после thread.join()?
В простейшем возможном примере предположим, что у меня есть функция, которая запускает поток, который, в свою очередь, устанавливает значение локальной переменной в true. Мы присоединяемся к потоку, затем выходим из функции. bool func() {...
155 просмотров