Потоки CUDA отрезаны по времени. Что это значит? - PullRequest
2 голосов
/ 28 марта 2012

Раздел B.10 Руководство по программированию CUDA 4.1 объясняет, что:

[...] количество тактов, которые устройство выполнило для полного выполнения потока,[отличается от] количества тактов, которые устройство фактически потратило на выполнение инструкций потока.Первое число больше последнего [...]

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

Затем руководство продолжает говорить, что:

Первое число больше последнего, поскольку потоки разделены по времени.

Что означает отрезанное по времени в этом контексте?Что значит сказать, что потоки разделены по времени?

Обратите внимание, что этот термин больше нигде не встречается в руководстве.(Простите, если я что-то упускаю из контекста, я не являюсь носителем английского языка.)

Ответы [ 3 ]

1 голос
/ 07 сентября 2012

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

Если у вас есть такой код:

if (threadIdx.x == 0 && blockIdx.x == 0) x = clock();

// other work done by all threads

if (threadIdx.x == 0 && blockIdx.x == 0) y = clock();

Если на SM запущено несколько деформаций, значение y-x будет больше, чем фактическое время, потраченное на выполнение в потоке 0 (== деформация 0). И это не только потому, что потоку 0 приходится ждать результатов от инструкций или обращений к памяти, это также связано с временем, затрачиваемым на выполнение других деформаций.

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

0 голосов
/ 28 марта 2012

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

0 голосов
/ 28 марта 2012

Time Slicing в этом контексте также означает preemption .

Вы можете рассматривать интервал времени как некоторый процент от общего доступного времени выполнения.

Эффективно, ваш поток запланирован для запуска в течение некоторого периода времени, однако планировщик может дать вам меньший интервал времени, если нужно выполнить другие потоки.

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