Вопросы по теме 'memory-model'
многопоточность python: модель памяти и видимость
Выявляет ли многопоточность python проблемы видимости памяти и переупорядочения операторов, как это делает Java? Поскольку я не могу найти никаких ссылок на «Модель памяти Python» или что-то в этом роде, несмотря на то, что многие люди пишут...
11566 просмотров
schedule
27.04.2024
Заборы в C ++ 0x, гарантии только на атомику или память в целом
В C ++ 0x draft есть понятие ограждений, которые кажется очень отличным от понятия ограждений на уровне процессора / микросхемы или того, что ребята из ядра Linux ожидают от ограждений . Вопрос в том, действительно ли проект подразумевает крайне...
2428 просмотров
schedule
11.01.2024
Параллельный доступ Java к полю, трюк, чтобы не использовать volatile
Предисловие: я знаю, что в большинстве случаев использование volatile поля не приведет к измеримому снижению производительности, но этот вопрос более теоретический и нацелен на дизайн с чрезвычайно высокой поддержкой корректности.
У меня есть поле...
784 просмотров
schedule
06.05.2022
Как понять, что происходит, прежде чем последовательный
В главе 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 просмотров
schedule
29.08.2022
Гонки данных, 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 просмотров
schedule
23.11.2022
Ослабленная производительность упорядочивания 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 просмотров
schedule
22.04.2024
Ручная синхронизация в 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 просмотров
schedule
07.04.2023
Есть ли акаузальное поведение с циклами зависимости в расслабленной модели памяти 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 просмотров
schedule
25.03.2022
Может ли современное оборудование 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 просмотров
schedule
23.06.2023
Как кеши данных маршрутизируют объект в этом примере?
Рассмотрим схематическую архитектуру кэша данных. (Далее следует искусство ASCII.)
--------------------------------------
| CPU core A | CPU core B | |
|------------|------------| Devices |
| Cache A1 | Cache B1 | with DMA...
114 просмотров
schedule
18.09.2022
Увидит ли вызывающий поток изменения локальных переменных после thread.join()?
В простейшем возможном примере предположим, что у меня есть функция, которая запускает поток, который, в свою очередь, устанавливает значение локальной переменной в true. Мы присоединяемся к потоку, затем выходим из функции.
bool func() {...
155 просмотров
schedule
04.01.2023