Почему мультипликация с фиксированной точкой происходит намного медленнее, чем с плавающей точкой?

#pytorch

#pytorch

Вопрос:

Недавно, когда я проводил сравнительный анализ операции «matmul» в Pytorch, и я понял, что умножение с фиксированной точкой (когда dytpe равно int) происходит намного медленнее, это выглядит нелогичным.

  n = 128 m = 1024 p = 512 
 t = []
ring_size=(2 ** 64)
for split in np.arange(2,64,2):
    mm =  m // split
    a = torch.randint(-(ring_size // 2), (ring_size - 1) // 2, (n, mm), dtype=torch.int64)
    b = torch.randint(-(ring_size // 2), (ring_size - 1) // 2, (mm, p), dtype=torch.int64)
    init_time = time.time()
    c  = getattr(torch, 'matmul')(a, b)
    t.append(time.time() - init_time)
plt.plot(t)
 

Ниже приведены результаты

 n = 128 m = 1024 p = 512 
t = [] 
for split in np.arange(2,64,2):
            mm =  m // split
            a = torch.tensor(np.random.normal(loc=100, scale=100, size=(n,mm)))
            b = torch.tensor(np.random.normal(loc=100, scale=100, size=(mm,p)))
            init_time = time.time()
            c  = getattr(torch, 'matmul')(a, b)
        t.append(time.time() - init_time) plt.plot(t)
 

Результат следующий

Комментарии:

1. int64 имеет 64 бита. float имеет 32…

2. при сравнении с int32, float все еще на порядок быстрее…………..