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

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

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

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

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

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

Это возможно?

запустить событие в конце ядра, которое вы запускаете в потоке A. В потоке B выполните cudaStreamWaitEvent событие, запущенное в потоке A. После этого момента в потоке B все будет ждать, пока поток A доберется до события. Похоже, ваш вопрос является дубликатом Вот этот.

Robert Crovella 11.06.2019 16:35

@ Роберт, спасибо. Позвольте мне погрузиться в вашу страницу ссылок

sungjun cho 11.06.2019 16:45

Обычный (поточный) метод предотвращения перекрытия действий CUDA X и Y заключается в запуске этих действий в один и тот же поток.

Robert Crovella 11.06.2019 17:10

@ Роберт, я знаю, что это основное. Но проблема в том, что второе ядро ​​​​должно быть запущено после завершения memcpy. Это означает, что второй поток ядра должен отличаться от первого потока ядра, поскольку второе ядро ​​не должно ждать memcpy.

sungjun cho 11.06.2019 17:37
"второе ядро ​​должно быть запущено после выполнения memcpy" против "второе ядро ​​не должно ждать memcpy" - мне это кажется противоречивым. Вы можете уточнить?
tera 11.06.2019 19:47

@tera Первая заключалась в том, что функция memcpy (предположим, поток 2) прямо перед запуском второго ядра (поток 2) копирует данные, необходимые во втором ядре. Последнее заключалось в том, что первое ядро ​​(поток 1) должно копировать данные с устройства на хост (поток 1) после его выполнения (в моем случае), а второе ядро ​​(поток 2) не должно ждать функцию memcpy (поток 1) если поток другой.

sungjun cho 11.06.2019 20:56
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
6
61
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

Другие вопросы по теме