2014-12-08 2 views
-2

Я профилирую приложение cuda на разных входных размерах 1d. Однако время выполнения ядра профилей NSIGHT аналогично для небольших размеров вектора. В качестве примера нет никакой разницы между размерами векторов 512 и 2048. Время выполнения ядра линейно возрастает для больших векторов, но нет разницы в меньших векторах, таких как размер вектора 512 и 2048. Является ли это ожидаемым результатом?Время выполнения ядра CUDA не изменяется на более крупном массиве

+1

Да. В условиях неспециалиста: ниже определенного предела вы не обеспечиваете достаточно достаточной работы, чтобы сделать GPU полностью занятым, поэтому все вычисления занимают одно и то же время. –

ответ

2

Предположим, для запуска ядра любого размера требуется 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 обычно имеет другие фиксированные «накладные расходы», связанные с инициализацией, которые также играют определенную роль.

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