У меня есть программа pyopencl, которая делает длинный расчет (~ 3-5 часов за запуск). У меня несколько ядер запускаются один за другим в цикле. Так что у меня есть что-то вроде этого:Измерение и минимизация служебных данных OpenCL
prepare_kernels_and_data()
for i in range(big_number): # in my case big_number is 400000
load_data_to_device(i) # ~0.0002s
run_kernel1(i) # ~0.0086s
run_kernel2(i) # ~0.00028s
store_data_from_device(i) # ~0.0002s
я измерил время, и я получил следующее:
- времени Системы 4:30 часов (измеряются Linux
time
команды) - Pure OpenCL на основе событий выбор времени 3:30 часов (нагрузка + высчитывает + магазин)
Я хотел бы знать:
- Насколько велики минимальные накладные расходы для программы OpenCL? В моем случае это похоже на 35%
- Должен ли я доверять событиям на основе таймингов?
- Включает ли профилирование значительное время на выполнение всей программы?
Я знаю, что накладные расходы зависят от программы, и я знаю, что python не так быстро, как чистый C или CPP. Но я считаю, что, когда я переношу все свои тяжелые вычисления в ядра OpenCL, я могу потерять не более 5-7%. Пожалуйста, поправьте меня, если я ошибаюсь.
P.S. AMD OpenCL, AMD GPU