Может ли несколько процессоров одновременно выполнять запись в одну и ту же область памяти? - PullRequest
4 голосов
/ 05 февраля 2009

Серийно ли записывается размер машинного слова (или меньше)? Для копирования содержимого регистра в оперативную память требуется только один собственный код операции.

Ответы [ 6 ]

4 голосов
/ 05 февраля 2009

Запись данных в ОЗУ является атомарной. Если два процессора пытаются выполнить запись в одно и то же место одновременно, контроллер памяти определит порядок записи. Пока один ЦП выполняет запись в память, другой ЦП будет останавливаться столько циклов, сколько необходимо, пока первая запись не будет завершена; тогда он перезапишет свое значение. Это то, что известно как состояние гонки .

Записи, которые меньше, чем собственный размер слова, не являются атомарными - в этом случае ЦП должен прочитать старое значение памяти в регистр, записать новые байты в регистр, а затем записать это новое значение обратно в память .

У вас никогда не должно быть кода, который зависит от этого - если у вас есть несколько процессоров, которые пытаются одновременно записать в одну и ту же область памяти, вы делаете что-то не так.

Другим важным фактором является проблема когерентности кэша . Каждый процессор имеет свой кэш. Если процессор записывает данные в свой кэш, другие процессоры должны быть осведомлены об изменении этого значения данных, если они хотят его прочитать.

2 голосов
/ 05 февраля 2009

Ничто не мешает вам делать это на низком уровне. Однако записи в ОЗУ являются атомарными, поэтому контроллер памяти будет выполнять 2, казалось бы, одновременные записи с ядер.

0 голосов
/ 05 февраля 2009

Они могут попробовать, но аппаратное обеспечение будет окончательным определяющим фактором того, что происходит.

0 голосов
/ 05 февраля 2009

Разве этот собственный код операции с большей вероятностью будет записывать в кэш-память процессора, а не в ОЗУ?

0 голосов
/ 05 февраля 2009

Они не должны этого делать, потому что результирующее содержимое ОЗУ не будет указано, если будут записаны другие значения.

0 голосов
/ 05 февраля 2009

Два ЦП могут выдавать команду одновременно, но разве контроллер ОЗУ не должен обрабатывать каждую команду, которую он получает индивидуально? Так что, возможно, для ЦП это происходит одновременно, но контроллер ОЗУ определит, чья команда будет обработана первой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...