LINUX.ORG.RU

История изменений

Исправление soomrack, (текущая версия) :

Коротко: тест ничего не тестирует.

Судя по коду С++ проверяется первые 10000000 числе без какой-либо серьезной оптимизации (с этой т.з. этот тест на простоту это просто дно, ну да ладно, не в этом дело). С т.з. оптимизации программа может выкинуть главный цикл, т.к. результаты функции нигде не используются, поэтому с -O2 результат смотреть некорректно, а вот если бы выводилось количество найденных простых чисел, то тогда да.

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

Поэтому тест будет упираться в то, как микрокод процессора оптимизирует поток инструкций (видимо в большей степени, т.к. результат работы функции не используется, циклы параллелятся и пр.) и в частоту проца. Можно посмотреть в какие инструкции превращает компилятор эту программу без оптимизации…

Вывод: никаких выводов сделать нельзя ввиду некорректности теста.

Для Ъ (код из ссылки):

#include <iostream>
#include <cmath>
#include <time.h>

using namespace std;

bool isPrime(int num)
{
    if (num == 2) {
        return true;
    }
    if (num <= 1 || num % 2 == 0) {
        return false;
    }

    double sqrt_num = sqrt(double(num));
    for (int div = 3; div <= sqrt_num; div +=2)
    {
        if (num % div == 0) {
            return false;
        }
    }
    return true;
}


int main()
{
    int N = 10000000;
    clock_t start, end;
    start = clock();
    for (int i = 0; i < N; i++) {
        isPrime(i);
    }
    end = clock();
    cout << (end - start) / ((double) CLOCKS_PER_SEC);
    cout << " sec \n";
    return 0;
}

Исправление soomrack, :

Коротко: тест ничего не тестирует.

Судя по коду С++ проверяется первые 10000000 числе без какой-либо серьезной оптимизации (с этой т.з. этот тест на простоту это просто дно, ну да ладно, не в этом дело). С т.з. оптимизации программа может выкинуть главный цикл, т.к. результаты функции нигде не используются, поэтому с -O2 результат смотреть некорректно, а вот если бы выводилось количество найденных простых чисел, то тогда да.

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

Поэтому тест будет упираться в то, как микрокод процессора оптимизирует поток инструкций (видимо в большей степени, т.к. результат работы функции не используется, циклы параллелятся и пр.) и в частоту проца. Можно посмотреть в какие инструкции превращает компилятор эту программу без оптимизации…

Вывод: никаких выводов сделать нельзя ввиду некорректности теста.

Для Ъ (код из ссылки):

#include <iostream>
#include <cmath>
#include <time.h>

using namespace std;

bool isPrime(int num)
{
    if (num == 2) {
        return true;
    }
    if (num <= 1 || num % 2 == 0) {
        return false;
    }

    double sqrt_num = sqrt(double(num));
    for (int div = 3; div <= sqrt_num; div +=2)
    {
        if (num % div == 0) {
            return false;
        }
    }
    return true;
}


int main()
{
    int N = 10000000;
    clock_t start, end;
    start = clock();
    for (int i = 0; i < N; i++) {
        isPrime(i);
    }
    end = clock();
    cout << (end - start) / ((double) CLOCKS_PER_SEC);
    cout << " sec \n";
    return 0;
}

Исходная версия soomrack, :

Коротко: тест ничего не тестирует.

Судя по коду С++ проверяется первые 10000000 числе без какой-либо оптимизации (с т.з. тест на простоту это просто дно, ну да ладно, не в этом дело). С т.з. оптимизации программа может выкинуть главный цикл, т.к. результаты функции нигде не используются, поэтому с -O2 результат смотреть некорректно, а вот если бы выводилось количество найденных простых чисел, то тогда да.

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

Поэтому тест будет упираться в то, как микрокод процессора оптимизирует поток инструкций (видимо в большей степени, т.к. результат работы функции не используется, циклы параллелятся и пр.) и в частоту проца. Можно посмотреть в какие инструкции превращает компилятор эту программу без оптимизации…

Вывод: никаких выводов сделать нельзя ввиду некорректности теста.

Для Ъ (код из ссылки):

#include <iostream>
#include <cmath>
#include <time.h>

using namespace std;

bool isPrime(int num)
{
    if (num == 2) {
        return true;
    }
    if (num <= 1 || num % 2 == 0) {
        return false;
    }

    double sqrt_num = sqrt(double(num));
    for (int div = 3; div <= sqrt_num; div +=2)
    {
        if (num % div == 0) {
            return false;
        }
    }
    return true;
}


int main()
{
    int N = 10000000;
    clock_t start, end;
    start = clock();
    for (int i = 0; i < N; i++) {
        isPrime(i);
    }
    end = clock();
    cout << (end - start) / ((double) CLOCKS_PER_SEC);
    cout << " sec \n";
    return 0;
}