2013-08-19 3 views
0

Я сравнивал некоторые программы CUDA (2D и 3D решетки boltzmann solvers) и столкнулся с чем-то необычным; Я ожидал бы случайного изменения производительности решателя с течением времени, но по множеству различных размеров проблем, размеров блоков, ОС и графических процессоров (не говоря уже о том, что 2D и 3D коды являются полностью отдельными, а не разными конфигурациями одна и та же программа). Я вижу сильную синусоидальную флуктуацию во время выполнения ядра. Для двух графических процессоров, на которых я тестировал (K5000m и K20c), изменение, по-видимому, имеет частоту в диапазоне 10-12 Гц.Временные изменения в производительности ядра CUDA

Есть ли какие-либо известные объяснения этому? Моя идея - это управление температурой/мощностью, но я не смог это доказать. Кто-нибудь еще испытал это?

ДАЛЕЕ ИНФОРМАЦИЯ И ПРИМЕР

MSVC2010 проект для небольшой пример кода можно найти по адресу https://docs.google.com/viewer?a=v&pid=sites&srcid=ZGVmYXVsdGRvbWFpbnxtYXJram1hd3NvbnxneDplOWMwNWNhNDA4MmMwMjg Проект требует CUDA 5.0 и sm_30 устройство, хотя есть только один файл, так построения проекта вручную было бы тривиально , Код достаточно понятен, 100 итераций простого ядра (ядра для чтения из нескольких массивов и записи в несколько массивов выполняются по умолчанию) синхронизируются и их результаты печатаются в файл. Выполнение БПФ времени выполнения дает видимый пик около 11 Гц на K5000m. Я бы опубликовал изображение, но у меня нет репутации.

+0

Какова амплитуда изменения времени выполнения? – talonmies

+0

В порядке 10 секунд в микросекундах я изначально считал, что это ошибка округления с использованием cudaEvents, но они должны иметь разрешение около 0,5 микросекунды. – mjm26

+0

Было ли движение жидкости синусоидальным ускоренным узором? Есть If-предложения в таких ядрах и изменения производительности, поскольку состояние ухудшается (полное случайное ветвление по потокам) и хорошее (есть порядок в потоках о ветвлении) –

ответ

1

Windows имеет поведенческие эффекты в отношении подробного времени выполнения ядра GPU, особенно при работе GPU в режиме WDDM. Повторно запустите ваше наблюдение и БПФ предпочтительно в среде Linux, где X также не работает на графическом процессоре. Это даст вам наиболее последовательное поведение. Драйвер CUDA в настройке WDDM в какой-то степени подчиняется операционной системе Windows.

Я побежал код на SM35 устройстве, CentOS 5.5, CUDA 5.5, и получил следующий результат: Times.dat

0,007648 0,0024 0,001888 0,001888 0,001888 0,001888 0,001888 0,00192 0,001888 0,001888 0,00192 0,00192 0,001856 0,00192 0,001888 0.00192 0,001888 0,001888 0,001888 0,001888 0,00192 0,001888 0,001888 0,001888 0,001856 0,001888 0,001888 0,001888 0,001888 0,001888 0,001888 0,002016 0,001888 0,001888 0,00192 0,001952 0,001888 0,001888 0,001888 0,001888 0,00192 0,00192 0,001888 0,00192 0,001888 0,001888 0,001888 0,001888 0,001888 0,001888 0,001888 0,001888 0,001888 0,00192 0,001888 0,001888 0,001856 0,001888 0,00192 0,001888 0,001888 0,001888 0,001888 0,001888 0,001888 0,001888 0,001888 0,001888 0,00 1888 0.001888 0,001888 0.003904 0,001888 0,001888 0,001888 0,001888 0,001888 0,001888 0,00192 0,001888 0,001888 0,001888 0,001888 0,001888 0,001888 0,001888 0,001888 0,00192 0,001888 0,001888 0,001888 0,001888 0,00192 0,001888 0,00192 0,001888 0,001888 0,001888 0,001888 0,001888 0,00192 0,001888 0,00192 0,001856 0,001888 0,001856 0,001888 0,001888 0,001888 0,001888 0,001888 0,001888 0,001952 0,001888 0,001888 0,00192 0,00192 0,00192 0,001888 0,001888 0,001952 0,001888 0,00192 0,001888 0,001856 0,001888 0,00192 0,001888 0,001888 0,001888 0,00192 0,001856 0,001888 0,001888 0,001888 0,001888 0,00192 0,00192 0,001888 0,001888 0,00192 0,001888 0,001888 0,001888 0,001888 0,001888 0,00192 0,001888 0,00192 0,001888 0,001888 0,00192 0,001888 0,00192 0,001888 0,001888 0,001888 0,001888 0,001888 0,00192 0,004448 0,001888 0,001952 0,001888 0,001888 0,001888 0,001888 0,001888 0,001856 0,001888 0,001888 0,001888 0,001888 0,001888 0,001888 0,001888 0,00192 0,001856 0,0 01888 0.001888 0.001888 0.001888 0.001856 0.001888 0.001888 0.001856 0.001888 0.001888 0.001888 0.001888 0.001888 0.001888 0.001888 0.001888 0.001888 0.001888 0.001888 0.001888

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

Выбрасывая первое число, самая большая вариация, которую я вижу, составляет около 2-3 микросекунд в нескольких случаях. Учитывая, что измеренное время выполнения составляет менее 2 микросекунд, это большой вариант, но он все еще находится в шуме, а не что-то вроде 10-ти микросекунд, о которых вы сообщаете.

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

+0

Время штамповки выполняется суммированием времени выполнения предыдущих итераций; это явно не точно, поскольку он игнорирует время, затрачиваемое на синхронизацию ядра, но это была согласованность результатов, которые касались меня, а не точной частоты. Ваши результаты, похоже, не демонстрируют такого поведения, у меня создалось впечатление, что K20c, который я использовал, не использовал x. Возможно, я ошибаюсь, я запустил свой образец на этой машине и подтвержу. – mjm26

+0

Что касается порядка вариации, я не считаю, что образец произведет это, поскольку он очень убран, чтобы воспроизвести синусоидальное поведение, а не величину. – mjm26

Смежные вопросы