Я пытаюсь эффективно вычислить на gpus с помощью cupy.
В моем конкретном приложении время выполнения timeit зависит от количества запусков (конечно). Однако не линейно, а линейно, сначала с небольшим наклоном, а затем с большим. Убедитесь сами: Билинейное увеличение времени выполнения с количеством выполнений
Мой вопрос: почему?
Я не очень разбираюсь в вычислениях на GPU или numeri c внутреннее. Я просто подумал, что это будет интересный вопрос.
Вот код того, как я измерял время
import cupy as cp
n = 401
s = 100
p = 100
x = cp.linspace(-5, 5, n, dtype=cp.float32)[:, cp.newaxis].repeat(s, 1)
sig = cp.random.uniform(.2, .4, (s, p), dtype=cp.float32)
a = cp.random.uniform(1, 2, (s, p), dtype=cp.float32)
c = cp.random.uniform(-3, 3, (s, p), dtype=cp.float32)
def cp_g(x, a, c, s):
return cp.sum(cp.multiply(cp.exp(-cp.square(((x[...,cp.newaxis] - c) / s))), a * s / cp.sqrt(cp.float32(cp.pi))),axis=-1)
for i in cp.arange(10,1000,10):
timeit('y= cp_g(x,a,c,sig)', globals=globals(), number=int(i))
PS: Если интересно, я использую оборудование GeForce 1660 Супер. Cuda 10.2. Python 3.7.0 (v3.7.0: 1bf9cc5093, 27 июня 2018 г., 04:59:51) [MS C v.1914 64 бит (AMD64)]