C ++ high_resolution_clock :: now (), показывающий противоречивые результаты со временем wallclock - PullRequest
0 голосов
/ 03 июня 2019

Я пытался вычислить время, необходимое для выборки 7680-битных простых чисел в библиотеке FLINT.У меня был цикл, работающий в течение 100 итераций, и, наконец, я рассчитал среднее требуемое время.На моем Mac приведенному ниже коду потребовалось более 5 часов для запуска (я оставил код, работающий на mac, в 2:00 без закрытия крышки. Когда я увидел снова в 7:00, код все еще работает).Но, наконец, он показал результат «33,3442» секунд.Как это возможно?

#include "fmpz.h"
#include <iostream>
#include <chrono>
using namespace std;
using namespace std::chrono;

int main() {  
    int count = 100;
    int length = 7680;

    fmpz_t primes[count];   
    flint_rand_t state;
    flint_randinit(state);

    for (int i = 0; i < count; i++)
        fmpz_init(primes[i]);


    auto start = high_resolution_clock::now(); 
    for (int i = 0; i < count; i++)
    {
        while (true)
        {
             fmpz_randbits(primes[i], state, length);
             if (fmpz_is_probabprime(primes[i]))
                  break;
        }
    }
    auto stop = high_resolution_clock::now(); 
    auto duration = duration_cast<microseconds>(stop - start); 
    cout << "Generating random primes of length " << length << " " << ((double)duration.count()/1000000)/count << endl; 
}
...