Можно ли гарантировать, что каждый отдельный поток ядра не может чередоваться? - PullRequest
0 голосов
/ 11 июня 2019

Если ядро ​​запускается с разными потоками,

можем ли мы гарантировать, что каждый поток не чередуется?

Кажется, что разные потоки ядра чередуются вместе.

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

Причина, по которой я хочу, заключается в том, что другое ядро ​​потока не должно загрязнять данные L2cache, используемые текущим запущенным потоком ядра.

Возможно ли это?

1 Ответ

1 голос
/ 13 июня 2019

События позволяют синхронизировать потоки друг с другом без необходимости синхронизировать их с вызывающим потоком ЦП. Вы можете использовать cudaEventRecord(event1, stream1), чтобы записать событие в stream1, а затем использовать cudaStreamWaitEvent(stream2, event1), чтобы stream2 ожидал этого события, прежде чем продолжить. Затем, если вы изучите свое приложение в nvprof, вы заметите синхронизацию между потоками, которая всегда происходит при этом событии.

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

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