Скачать MetaTrader 5

Практические эксперименты на скорость(тесты, исходники, ссылки), на разных языках программирования выкладываем, сравниваем, делаем выводы - страница 3

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
unreal
475
unreal  
// Тест выделение и заполнение памяти много раз по 1-10 кб
// на "c++ vs2010 sp1" Intel® C++ Compiler XE 12.0   Time: 3.625000 (microsoft Compiler Time: 5.031000)

//#include <stdlib.h>
//#include "stdafx.h"
//#include <conio.h>
#include <stdio.h>
#include <time.h>
#include <Windows.h>

#define N 1000000
int main(void)
{
        typedef unsigned char byte;
        long count = 0;
        long double resTime;
        unsigned long size;
        byte *buf;

        clock_t start = clock();
        printf("Start! Now time: %lf \n", (long double) (start / CLOCKS_PER_SEC));
        for (int i = 0; i < N; i++)
        {
                for (byte n = 1; n < 11; n++)
                {
                        size = n * 1024;
                        count += size;
                        buf = new byte[size];
                        for (unsigned long j = 0; j < size; j++)
                        {
                                buf[j] = n;
                        }
                        delete []buf;
                }
        }
        resTime = (long double) (clock() - start) / CLOCKS_PER_SEC;

        printf(" All allocation: %d;\n Total volume: %d byte;\n Time: %lf", N * 10, count, resTime);
        printf("\n\n Press any key for exit...\n");
        //_getch();
        system("pause");
        return 0;
}
unreal
475
unreal  

Объектно-ориентированное и процедурное программирование(+ разные компиляторы)

// test oop 5.cpp: определяет точку входа для консольного приложения.
//
#include "stdafx.h"
#include <time.h>
#include <iostream> 
using namespace std;

class test
{
private:
        double data;
public:
        void sum (test,test);
        void razn(test,test);
        void umn (test,test);
        void del (test,test);
        void sum_i (test,int);

        void setdata(double z);
        void showdata();
};
//////////////////////////////////////////////////////////////////////////
double a, b, c, d, x, y;
const int N = 100000000; // 100000000 100млн

int main()
{
        system("chcp 1251 > nul");

        int start_time=0;
        test a1,b1,c1,d1,x1,y1;
        //////////////////////////////////////////////////////////////////////////
        cout << "--Процедурное--" << endl;

        x = 3.0f;
        y = 2.0f;

        for (int i=1;i<=10;i++)
        {
                start_time=clock();
                for (int n=0;n<=N;n++)
                {
                        y += n;
                        a = x + y;
                        b = x - y;
                        c = x * y;
                        d = x / y;
                }
                start_time=clock()-start_time;
                //cout << "Time: " << start_time <<" ms"<< endl;
                //cout << "d=    " << d << endl;
                cout << "Time: " << start_time <<" ms"<<  " d=    " << d << endl;
        }
        //////////////////////////////////////////////////////////////////////////
        cout << "--ООП--" << endl;

        x1.setdata(3.0f);
        y1.setdata(2.0f);

        for (int f=1;f<=10;f++)
        {
                start_time=clock();
                for (int i=0;i<=N;i++)
                {
                        y1.sum_i(y1,i);
                        a1.sum (x1,y1);
                        b1.razn(x1,y1);
                        c1.umn (x1,y1);
                        d1.del (x1,y1);
                }

                start_time=clock()-start_time;
                //cout << "Time: " << start_time <<" ms"<< endl;
                //d1.showdata();
                cout << "Time: " << start_time <<" ms ";d1.showdata();
        }
        cout << "------------end test--------------" << endl;
        cout << "d=    " << d << endl;
        d1.showdata();
        system("pause");
        return 0;
}
//////////////////////////////////////////////////////////////////////////
void test :: sum(test aa, test bb)
{
        data=aa.data+bb.data;
}
//////////////////////////////////////////////////////////////////////////
void test :: razn(test aa, test bb)
{
        data=aa.data-bb.data;
}
//////////////////////////////////////////////////////////////////////////
void test :: umn(test aa, test bb)
{
        data=aa.data*bb.data;
}
//////////////////////////////////////////////////////////////////////////
void test :: del(test aa, test bb)
{
        data=aa.data/bb.data;
}
//////////////////////////////////////////////////////////////////////////
void test :: setdata(double z) 
{ data = z; }
//////////////////////////////////////////////////////////////////////////
void test :: showdata() 
{ cout << "data= " << data << endl;}
//////////////////////////////////////////////////////////////////////////
void test :: sum_i(test aa, int bb)
{
        data=aa.data+bb;
}
//////////////////////////////////////////////////////////////////////////

если заменить double на float то:

Кто знает почему такие разные результаты особенно у intel compiler с double ?

Все на "c++ vs2010 sp1" Intel® C++ Compiler XE 12.0 и vs6 sp6.

123
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий