Наверху барьера памяти / забор

У меня были эти проблемы также в течение многих лет в Windows, но я недавно нашел этот проект: Консоль

Это все еще требует "режима метки" для скопировать/вставить, но по крайней мере это доступно из контекстного меню щелчка правой кнопкой (таким образом, Вы не должны перемещать мышь в верхнее левое и затем перемещать ее снова в текст, который Вы хотите выбрать)

, пути UNC не поддерживаются cmd.exe, но они поддерживаются PowerShell. (Консоль может быть настроена для использования любой оболочки, включая cmd.exe и PowerShell)

6
задан Programmer 29 November 2009 в 11:24
поделиться

2 ответа

Я понимаю, что по сравнению с арифметическими и «обычными» инструкциями это очень дорого, но у меня нет цифр для подтверждения этого утверждения. Мне нравится ответ jalf, описывающий эффекты инструкций, и я хотел бы добавить немного.

В целом существует несколько различных типов препятствий, поэтому понимание различий может быть полезным. Барьер, подобный тому, о котором упоминал jalf, требуется, например, в реализации мьютекса перед очисткой слова блокировки (например, lwsync на ppc или st4.rel на ia64). Все операции чтения и записи должны быть завершены, и могут быть выполнены только инструкции, находящиеся на более позднем этапе конвейера, которые не имеют доступа к памяти и не зависят от текущих операций с памятью.

Другой тип барьера - это тот тип, который вы использовали бы в мьютексе. реализация при получении блокировки (примеры, isync на ppc или instr.acq на ia64). Это влияет на будущие инструкции, поэтому, если была предварительно загружена независимая нагрузка, ее необходимо отбросить. Пример:

if ( pSharedMem->atomic.bit_is_set() ) // use a bit to flag that somethingElse is "ready"
{
   foo( pSharedMem->somethingElse ) ;
}

Без барьера получения (заимствование ia64 lingo) ваша программа может иметь неожиданные результаты, если somethingElse внесет это в регистр до того, как проверка флагового бита будет завершена.

Существует третий тип барьера, обычно используется реже и требуется для обеспечения порядка загрузки магазина. Примеры инструкций для такой инструкции обеспечения порядка: sync on ppc (тяжелая синхронизация), MF на ia64 ,mbar #storeload on sparc (требуется даже для TSO).

Использование ia64 как псевдокода для иллюстрации, предположим, что у одного из них было

st4.rel
ld4.acq

без посредника нет гарантии, что груз следует за магазином. Вы знаете, что загрузка и сохранение до st4.

2
ответ дан 17 December 2019 в 18:17
поделиться

Попробуйте подумать, что делает инструкция. Это не заставляет ЦП делать что-то сложное с точки зрения логики, но заставляет его ждать, пока все операции чтения и записи не будут зафиксированы в основной памяти. Таким образом, стоимость действительно зависит от стоимости доступа к основной памяти (и количества невыполненных операций чтения / записи).

Доступ к основной памяти, как правило, довольно дорогостоящий (10-200 тактовых циклов), но в некотором смысле эта работа потребовала бы чтобы это можно было сделать без барьера, его можно было бы просто скрыть, выполняя некоторые другие инструкции одновременно, чтобы вы не чувствовали больших затрат.

Это также ограничивает способность ЦП (и компиляторов) перепланировать инструкции, так что там могут быть косвенными издержками, так как соседние инструкции не могут чередоваться, что в противном случае могло бы привести к более эффективному графику выполнения.

1
ответ дан 17 December 2019 в 18:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: