Я сравнивал некоторые программы 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. Я бы опубликовал изображение, но у меня нет репутации.
Какова амплитуда изменения времени выполнения? – talonmies
В порядке 10 секунд в микросекундах я изначально считал, что это ошибка округления с использованием cudaEvents, но они должны иметь разрешение около 0,5 микросекунды. – mjm26
Было ли движение жидкости синусоидальным ускоренным узором? Есть If-предложения в таких ядрах и изменения производительности, поскольку состояние ухудшается (полное случайное ветвление по потокам) и хорошее (есть порядок в потоках о ветвлении) –