Я профилирую приложение cuda на разных входных размерах 1d. Однако время выполнения ядра профилей NSIGHT аналогично для небольших размеров вектора. В качестве примера нет никакой разницы между размерами векторов 512 и 2048. Время выполнения ядра линейно возрастает для больших векторов, но нет разницы в меньших векторах, таких как размер вектора 512 и 2048. Является ли это ожидаемым результатом?Время выполнения ядра CUDA не изменяется на более крупном массиве
ответ
Предположим, для запуска ядра любого размера требуется 3 микросекунды времени выполнения, а после этого накладных расходов - 1 нс времени выполнения для каждой точки в вашем векторе. Теперь давайте спросим, какова процентная разница в исполнении ядер x
и 2x
баллов, когда x
мал (скажем 1024) и когда x
большой (скажем, 1048576)?
x
= 1024:
execution_time(x) = 3000+1024 = 4024ns
execution_time(2x) = 3000+2048 = 5048ns
%difference = (5048-4024)/4024 * 100% = 25.45%
x
= 1048576:
execution_time(x) = 3000+1048576 = 1051576ns
execution_time(2x) = 3000+2097152 = 2100152ns
%difference = (2100152-1051576)/1051576 * 100% = 99.71%
Это свидетельствует о том, что ожидать при выполнении измерений времени выполнения (и изменений во время выполнения), когда время выполнения малый по сравнению с фиксированными накладными расходами, если он большой по сравнению с фиксированными накладными расходами.
В маленьком корпусе время выполнения «затоплено» накладными расходами. Удвоение «работы» не приводит к удвоению времени исполнения. В большом случае накладные расходы незначительны по сравнению с временем выполнения. Поэтому в большом случае мы видим приблизительно ожидаемый результат, что удвоение «работы» (длина вектора) приблизительно удваивает время выполнения.
Обратите внимание, что здесь «фиксированные накладные расходы» могут состоять из нескольких элементов, «начальный запуск ядра» - всего лишь один. CUDA обычно имеет другие фиксированные «накладные расходы», связанные с инициализацией, которые также играют определенную роль.
- 1. Выходная переменная ядра ядра CUDA не изменяется
- 2. Память передачи CUDA во время выполнения ядра
- 3. Приоритет параллельного выполнения ядра CUDA
- 4. Оптимизация выполнения времени ядра Cuda
- 5. Как увеличить время выполнения ядра при более удобном расположении?
- 6. Почему время выполнения ядра CUDA увеличивается с последующими запусками?
- 7. CUDA: запись в общую память увеличивает время выполнения ядра много
- 8. Мотивация CUDA для многомерного выполнения ядра
- 9. операции на массиве 2D в CUDA ядра для MATLAB
- 10. Не удается понять поведение ядра ядра CUDA
- 11. CUDA и графические ядра Порядок выполнения
- 12. Cuda - значения устройства 0 после выполнения ядра
- 13. Ядра CUDA не перекрываются
- 14. Ошибка ядра: недействительный аргумент, ошибка выполнения cuda
- 15. Потоки CUDA, занимающие более длительное время
- 16. AppBarButton.Icon не изменяется во время выполнения
- 17. Сроки ядра cuda изнутри ядра?
- 18. JTableCombo значение не изменяется во время выполнения
- 19. Время выполнения в тестах CUDA
- 20. Как отображать значения каждого массива в более крупном массиве?
- 21. Размер GroupBox не изменяется во время выполнения?
- 22. Проверить, существует ли часть массива в более крупном массиве PHP
- 23. opencl длительное время выполнения ядра
- 24. ManagedCuda: IllegalAddress; Во время выполнения ядра
- 25. CUDA - событие изнутри ядра
- 26. Код ядра CUDA не работает
- 27. Профилирование CUDA внутри ядра
- 28. Вложенные ядра в CUDA
- 29. CUDA эффективный вызов ядра
- 30. Временные ядра CUDA, которые должны выполняться более одного раза
Да. В условиях неспециалиста: ниже определенного предела вы не обеспечиваете достаточно достаточной работы, чтобы сделать GPU полностью занятым, поэтому все вычисления занимают одно и то же время. –