ЦП: i7-9750 @ 2,6 ГГц (с оперативной памятью DDR4 16 ГБ); Графический процессор: Nvidia Geforce GTX 1600 TI (6G); ОС: Windows 10-64 бит
Я попытался увидеть, насколько быстро GPU выполняет базовые матричные операции по сравнению с CPU, и в основном следил за этим https://towardsdatascience.com/heres-how-to-use-cupy-to-make-numpy-700x-Fast-4b920dda1f56. Ниже приведен мой супер простой код.
import numpy as np
import cupy as cp
import time
### Numpy and CPU
s = time.time()
A = np.random.random([10000,10000]); B = np.random.random([10000,10000])
CPU = np.matmul(A,B); CPU *= 5
e = time.time()
print(f'CPU time: {e - s: .2f}')
### CuPy and GPU
s = time.time()
C= cp.random.random([10000,10000]); D = cp.random.random([10000,10000])
GPU = cp.matmul(C,D); GPU *= 5
cp.cuda.Stream.null.synchronize()
# to let the code finish executing on the GPU before calculating the time
e = time.time()
print(f'GPU time: {e - s: .2f}')
Как ни странно, он показывает время ЦП: 11,74 время графического процессора: 12,56
Это меня действительно смущает. Как GPU может быть даже медленнее CPU при операциях с большими матрицами? Обратите внимание, что я даже не применял параллельные вычисления (я новичок и не уверен, откроет ли система его для меня или нет). Я проверял аналогичные вопросы, такие как Почему мой процессор вместо этого выполняет матричные операции быстрее, чем графический процессор?. Но здесь я использую cupy, а не mxnet (cupy новее и предназначен для вычислений на GPU).
Может кто поможет? Я буду очень признателен!
C= cp.random.random([10000,10000])
в вашем примере) произойдет инициализация контекста CUDA, которая может занять несколько секунд. - person kmaehashi   schedule 18.10.2020