Я выполнил поэлементное умножение, используя Torch с поддержкой GPU, и Numpy, используя функции ниже, и обнаружил, что Numpy зацикливается быстрее, чем Torch, что не должно иметь место, я сомневаюсь.
Я хочу знать, какдля выполнения общих арифметических операций с Torch с использованием графического процессора.
Примечание: Я выполнил эти фрагменты кода в блокноте Google Colab
Определите тип тензора по умолчанию, чтобы включить глобальныйФлаг графического процессора
torch.set_default_tensor_type(torch.cuda.FloatTensor if
torch.cuda.is_available() else
torch.FloatTensor)
Инициализация переменных горелки
x = torch.Tensor(200, 100) # Is FloatTensor
y = torch.Tensor(200,100)
Соответствующая функция
def mul(d,f):
g = torch.mul(d,f).cuda() # I explicitly called cuda() which is not necessary
return g
При вызове указанной выше функции как %timeit mul(x,y)
Возвращает:
Самый медленный пробег занимал в 10,22 раза больше, чем самый быстрый.Это может означать, что промежуточный результат кэшируется.10000 циклов, лучшее из 3: 50,1 мкс на цикл
Теперь пробная версия с numpy,
Использованы те же значения из переменных горелки
x_ = x.data.cpu().numpy()
y_ = y.data.cpu().numpy()
def mul_(d,f):
g = d*f
return g
%timeit mul_(x_,y_)
Возвращает
Самый медленный пробег длился в 12,10 раз дольше, чем самый быстрый.Это может означать, что промежуточный результат кэшируется.100000 циклов, лучшее из 3: 7,73 мкс на цикл
Требуется некоторая помощь для понимания операций резака с поддержкой графического процессора.