Время выполнения CUDA по сравнению с размером блока - PullRequest
1 голос
/ 25 марта 2019

Цель проста: составить график влияния размера блока на время выполнения с помощью CUDA. Можно ожидать, что для каждого размера блока, кратного 32, время выполнения будет наименьшим, а после умножения (например, 33, 65, 97, 129, ...) время выполнения должно увеличиться. Однако это не тот результат, который я получаю. Время выполнения просто уменьшается, а затем выравнивается. enter image description here

Я использую CUDA runtime 10.0 на NVIDIA GeForce 940M.

Я пробовал несколько способов получить время выполнения. Тот, который рекомендован в документации CUDA, говорит, что должно работать следующее:

cudaEventCreate(&gpu_execution_start);
cudaEventCreate(&gpu_execution_end);

cudaEventRecord(gpu_execution_start);
kernel<<<n_blocks,blocksize>>> (device_a, device_b, device_out, arraysize);
cudaEventRecord(gpu_execution_end);

cudaEventSynchronize(gpu_execution_end);

Этот способ синхронизации, однако, генерирует ранее упомянутый результат.

Проблема заключается в сроках исполнения? Или конкретный графический процессор вызывает проблемы в результате, может быть?

1 Ответ

1 голос
/ 25 марта 2019

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

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

Надеюсь, это поможет!

...