Vulkan WaW опасность и память барьер - PullRequest
2 голосов
/ 06 июля 2019

Спецификация Vulkan гласит:

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

Я думал, что WaW может быть решен только с помощью барьера исполнения.Зачем нам нужен барьер памяти для устранения опасности WaW, если мы не собираемся читать данные?

1 Ответ

4 голосов
/ 06 июля 2019

Выполнение зависимостей обеспечивает порядок операций. Зависимости от памяти обеспечивают видимость операций с памятью. Это не одно и то же.

Для правильной работы записи после записи вторая запись должна произойти после первой записи, но вы также должны убедиться, что первая запись видима для операции, выполняющей вторую запись. В противном случае вторая запись может быть перезаписана первой, даже если вторая запись произошла после первой.

Если вам нужно более аппаратное объяснение, подумайте, что произойдет, если при первой записи используется один кэш, а при второй записи - отдельный кеш от первого (у графических процессоров много кешей). Зависимости выполнения не влияют на кэши. Таким образом, кэш второй записи может записывать свои данные раньше, чем кэш первой записи, что означает, что первая запись в конечном итоге перезапишет вторую.

Зависимости памяти вытесняют данные из кеша, таким образом гарантируя, что при второй записи не будет записи в кеше.

...