скорость умножения для разных примитивных типов - PullRequest
0 голосов
/ 31 августа 2018

Одинакова ли скорость умножения для байтов, коротких, целых и длинных, или она растет логарифмически, линейно, экспоненциально? Я написал небольшую программу, чтобы проверить это. результат все возвращает 0;

#include <unistd.h>
#include <chrono>
#include <iostream>

using namespace std;
using namespace std::chrono;

int main()
{
    short a = 0xffea, b = 0xffaa;
    int result, ia = 0xffeaffae, ib = 0xeaffaeff;
    long iresult, la = 0xffeaffaeffdaffad, lb = 0xeaffaeffdaffadff;
    long long lresult;

    auto start = high_resolution_clock::now();
    result = a * b;
    auto end = high_resolution_clock::now();
    auto dur = duration_cast<microseconds>(end - start);

    cout << "short multiplication : " << dur.count() << endl;

    start = high_resolution_clock::now();
    iresult = ia * ib;
    end = high_resolution_clock::now();
    dur = duration_cast<microseconds>(end - start);

    cout << "int multiplication : " << dur.count() << endl;

    start = high_resolution_clock::now();
    lresult = la * lb;
    end = high_resolution_clock::now();
    dur = duration_cast<microseconds>(end - start);

    cout << "long multiplication : " << dur.count() << endl;

    return 0;
 }

Я предполагаю, что 64-битный процессор может вычислять примитивные типы с одинаковой скоростью;

Спасибо

1 Ответ

0 голосов
/ 31 августа 2018

Это зависит от машины. Для нативных типов данных релевантно количество циклов, использованных для инструкций умножения. Чтобы точно сказать используемые инструкции, используйте встроенную сборку или проверьте вывод сборки. Для процессоров Intel в этом документе перечислены циклы процессора для многих команд.

Инструкция rtdsc , среди прочего, например, cpuid, может дать вам приблизительное представление о том, сколько циклов процессора используется частями вашего кода, но вы, вероятно, лучше изучите сборку или профилирование своего приложения.

Но в большинстве случаев все это не имеет отношения к практике. Они занимают около одного цикла, то есть около 0,000000001 секунд.

В большинстве случаев вы можете придерживаться своего предположения и считать, что умножение будет иметь одинаковую стоимость для всех типов данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...