Как CUDA узнает, когда нужно синхронизировать? - PullRequest
0 голосов
/ 20 февраля 2019

Предполагая, что у меня есть набор указателей с плавающей точкой gpu -> набор данных: [A, B, C, D]

Я повторяю его так, чтобы вычислить B, мне нужен A, для CI нужен B и т.д..

Если я сделаю

A = computeA()

for prevData, data in dataset:
    data = computeData(prevData)

Автоматически ли CUDA ставит их в очередь, чтобы один заканчивался за другим?Нужно ли делать deviceSynchronize ()?

1 Ответ

0 голосов
/ 20 февраля 2019

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

Вызовы ядра асинхронны,но это не означает, что они произойдут одновременно, это лишь означает, что ЦП не будет ждать завершения работы ядра, прежде чем поставить в очередь следующую операцию.Вы можете добавить deviceSynchronize(), если хотите, так как, если между вызовами нет значительных вычислений ЦП, это не повлияет на выполнение, оно просто остановит ЦП до завершения работы ядра.

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