У меня есть программа pyopencl, которая делает долгий расчет (~ 3-5 часов за прогон). У меня несколько ядер запускались одно за другим в цикле. Итак, у меня есть что-то вроде этого:
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
) - Чистое время, основанное на событиях opencl, составляет 3:30 часа (загрузка + расчет + сохранение).
Я хотел бы знать:
- Насколько велики минимальные накладные расходы для программы OpenCL? В моем случае это 35%
- Должен ли я доверять времени на основе событий?
- Увеличивает ли включение профилирования время выполнения всей программы?
Я знаю, что накладные расходы зависят от программы, и я знаю, что python не так быстр, как чистый C или CPP. Но я считаю, что когда я переведу все свои тяжелые вычисления на ядра OpenCL, я могу потерять не более 5-7%. Пожалуйста, поправьте меня, если я ошибаюсь.
P.S. AMD OpenCL, графический процессор AMD