Я пишу приложение на Python, которое обрабатывает много изображений.Скорость вычислений в приложении важна, поэтому я стараюсь минимизировать время выполнения, создавая ядра ядра.
Для простоты предположим, что ниже у меня есть простое сырое ядро.
import cupy as cp
add_kernel = cp.RawKernel(r'''
extern "C" __global__
void add_one(float* dimg, float* y) {
int j = threadIdx.x;
int i = blockIdx.x;
int k = blockDim.x;
int tid = k*i+j;
y[tid] = dimg[tid] + 1;
}
''', 'add_one')
if __name__ == '__main__':
h, w = 192, 256
dimg_cp = cp.zeros(shape=(h, w), dtype=cp.float32)
y = cp.zeros(shape=(h, w), dtype=cp.float32)
add_kernel((h,), (w,), (dimg_cp, y))
print(y)
Здесь add_kernel просто копирует входную матрицу и добавляет один к каждому элементу скопированногоМатрица затем вернуть его.Это прекрасно работает, но я считаю, что код можно дополнительно оптимизировать с точки зрения скорости выполнения.
В соответствии с ссылкой , когда ядро вызывается впервые (то есть не кэшируется),на компиляцию будут накладные расходы.
Я хочу избежать этого времени компиляции.Поэтому я хочу спросить, есть ли способ компиляции cp.RawKernel перед первым вызовом ядра?
Заранее спасибо.