Графический процессор (пока) не предназначен для переключения контекста между запусками ядра, поэтому ваше долго работающее ядро вызывает замедленное отображение.Разбивка ядра на несколько запусков, вероятно, поможет на платформах, отличных от Windows Vista / Windows 7. На этих платформах модель драйвера дисплея Windows требует дорогостоящего перехода от пользователя к ядру («ядро») каждый раз, когда драйвер CUDA хочет отправитьработать с графическим процессором.
Чтобы амортизировать затраты на ядро, драйвер CUDA ставит в очередь команды GPU и отправляет их пакетами.Драйвер использует эвристику, чтобы компенсировать снижение производительности от ядра ядра и увеличение задержки не немедленной отправки работы.Что происходит с вашим решением с несколькими ядрами, так это то, что драйвер передает ваше ядро или серии ядер на GPU одновременно.
Вы пробовали предложение cudaStreamQuery (0)?Причина, по которой это может помочь, заключается в том, что заставляет драйвер CUDA передавать работу на графический процессор, даже если очень мало работы ожидается.