Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Разное > Флейм
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 05.01.2012, 17:12
Аватар для Dem0Men
Dem0Men Dem0Men вне форума
Прохожий
 
Регистрация: 06.02.2011
Адрес: г. Ярославль
Сообщения: 26
Версия Delphi: 2007, XE
Репутация: 10
По умолчанию Benchmark

Здраствуйте, я недавно начал изучать C++ и столкнулся с проблемой выбора IDE и компилятора. Остановился на 2-х IDE: VS2010 и Code::Blocks, решил посмотреть, какой из компиляторов: VS2010 или MinGW шустрее и скомпилировал 3 программки(+ Delphi 7). Вот код Delphi:
Код:
program D7Benchmark;

{$APPTYPE CONSOLE}

uses
  SysUtils, DateUtils;

const
  REPEAT_NUM = 100000;

function Fact(N: integer):integer;
begin
    if (N = 1) or (N = 0) then
        Result := 1
    else
        Result := N * Fact(N - 1);
end;

var
  i : integer;
  T1 : TDateTime;
begin
  T1 := Now;
  for i := 1 to REPEAT_NUM do
    Write(Fact(15));
  WriteLn('Num of calculatings:');
  WriteLn(REPEAT_NUM);
  WriteLn('Time of working is:');
  WriteLn(MilliSecondsBetween(Now, T1));
  WriteLn('PressEnter');
  ReadLn;
end.

Скорость поражает! VS сделал 10.000 итераций за 3с, Delphi 100.000 за 0.8с, MinGW 100.000 за 1с. Т.е Delphi на несколько порядков быстрее VS! Прокомментируйте
Вложения
Тип файла: 7z Benchmark.7z (131.8 Кбайт, 11 просмотров)
__________________
Итерация от человека. Рекурсия — от Бога.
Ответить с цитированием
  #2  
Старый 05.01.2012, 17:20
Аватар для ALexandr555
ALexandr555 ALexandr555 вне форума
Специалист
 
Регистрация: 09.10.2010
Адрес: Тольятти
Сообщения: 803
Версия Delphi: Delphi 7
Репутация: 2064
По умолчанию

мне тоже инетресно, правда ли)
Ответить с цитированием
  #3  
Старый 05.01.2012, 18:49
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Открой в отладке да погляди.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #4  
Старый 05.01.2012, 21:37
Аватар для ALexandr555
ALexandr555 ALexandr555 вне форума
Специалист
 
Регистрация: 09.10.2010
Адрес: Тольятти
Сообщения: 803
Версия Delphi: Delphi 7
Репутация: 2064
По умолчанию

мне не это интересно
Ответить с цитированием
  #5  
Старый 06.01.2012, 11:37
AlexSku AlexSku вне форума
Специалист
 
Регистрация: 07.05.2007
Адрес: Москва
Сообщения: 884
Репутация: 21699
По умолчанию

Скорость часто зависит от библиотеки (я уж не говорю об организации данных и алгоритме), напр., для скоростной графики просто сослаться на Direct3D и всё будет в ажуре, ведь весь код в dll.
Ответить с цитированием
  #6  
Старый 06.01.2012, 16:00
Аватар для Dem0Men
Dem0Men Dem0Men вне форума
Прохожий
 
Регистрация: 06.02.2011
Адрес: г. Ярославль
Сообщения: 26
Версия Delphi: 2007, XE
Репутация: 10
По умолчанию

В том и дело, что ссылаться на какие-то dll бессмысленно, MFC не использован -- только консоль. При этом супер компилер Microsoft оказался значительно хуже MinGW на очень простом алгоритме подсчета факториала. Мне интересно почему, ведь я включил все оптимизациии.
__________________
Итерация от человека. Рекурсия — от Бога.
Ответить с цитированием
  #7  
Старый 06.01.2012, 21:18
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Ну вроде уже подсказали, сравни полученный машинный код - то бишь ассемблер.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #8  
Старый 07.01.2012, 16:50
Аватар для Dem0Men
Dem0Men Dem0Men вне форума
Прохожий
 
Регистрация: 06.02.2011
Адрес: г. Ярославль
Сообщения: 26
Версия Delphi: 2007, XE
Репутация: 10
По умолчанию

увы, но я не знаю ассемблер
__________________
Итерация от человека. Рекурсия — от Бога.
Ответить с цитированием
  #9  
Старый 07.01.2012, 17:07
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

На твой бенчхмарк могла повлиять банальная загрузка процессора, приоритет на процесс и т.д.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #10  
Старый 08.01.2012, 21:23
Аватар для Dem0Men
Dem0Men Dem0Men вне форума
Прохожий
 
Регистрация: 06.02.2011
Адрес: г. Ярославль
Сообщения: 26
Версия Delphi: 2007, XE
Репутация: 10
По умолчанию

очевидно, что они влияли, но:
1.приоритет одинаковый
2.загрузка минимальна
3.различие слишком велико!
Тем более архив я приложил, можете проверить сами.
__________________
Итерация от человека. Рекурсия — от Бога.
Ответить с цитированием
  #11  
Старый 08.01.2012, 21:32
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Да я на счет этого не парюсь. Главное чтоб работало правильно.
Если уж надо чтоб усцаться быстро работало, можно написать на чистом асме, работая только через регистры, оптимизировав код так, чтобы лишних действий небыло в принципе. Но как говорят у нас в Одессе: "А оно вам надо?".
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию

Последний раз редактировалось M.A.D.M.A.N., 08.01.2012 в 21:34.
Ответить с цитированием
  #12  
Старый 08.01.2012, 22:26
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Avast-у очень не понравился файл собранный в Дельфи, возможно из-за упаковщика, а может подменён файл SysConst.pas.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #13  
Старый 08.01.2012, 23:09
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Вы не то тестировали. Ни для кого не секрет, что вывод через COUT в студии невероятно медленный. Я провел другой тест на вашем же примере:
Делфа:
Код:
program D7Benchmark;

{$APPTYPE CONSOLE}

uses
  SysUtils, DateUtils;

const
  REPEAT_NUM = 10000000;

function Fact(N: integer):integer;
begin
    if (N = 1) or (N = 0) then
        Result := 1
    else
        Result := N * Fact(N - 1);
end;

type tin = array [0..0]of integer;
var
  i : integer;
  T1 : TDateTime;
  j:^tin;

begin
  getmem(j,100*sizeof(integer));
  T1 := Now;
  for i := 0 to REPEAT_NUM-1 do
    j[i mod 100]:=Fact(i mod 2 + 14);
  WriteLn('Num of calculatings:');
  WriteLn(REPEAT_NUM);
  WriteLn('Time of working is:');
  WriteLn(MilliSecondsBetween(Now, T1));
  WriteLn('PressEnter');
  ReadLn;
end.
Студия:
Код:
#include "stdafx.h"
#include <iostream>
#include <ctime>

using namespace std;

const int REPEAT_NUM = 10000000;
int Fact(int N);

int _tmain(int argc, _TCHAR* argv[])
{
	long c;
	int i,*j;
	j = new int[100];
	c=clock();
       for (i = 0; i < REPEAT_NUM; i++) 
		j[i%100] = Fact(i%2+14);

	c=clock()-c ;
	cout << "Time is: " << c << "\n";
	cout << "Press ENTER..";
	cin >> i;
	return 0;
}

int Fact(int N)
{
    if (N == 1 || N == 0)
        return 1;
    else
        return N * Fact(N - 1);
}
GCC у меня нет, его не тестил.
Результат:
Делфи ХЕ - 1.7 сек, Студия - 0.9 сек.
Такие сложности (с остатком от деления и записью в массив) для обмана оптимизации студии.
Было так:
Код:
for i:=1 to REPEAT_NUM do
 Fact(15);
Делфа такой код честно выполняла, студия же нагло пропустила.
Потом сделал так:
Код:
for i:=0 to REPEAT_NUM-1 do
 j[i mod 100]:=Fact(15);
Делфа опять честно выполняла, а студия посчитала один раз и потом вписала во все ячейки, смотрел дизасом (время было ~50мс).
В результате сделал такой извратский тест.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.

Последний раз редактировалось Bargest, 09.01.2012 в 15:19.
Ответить с цитированием
Этот пользователь сказал Спасибо Bargest за это полезное сообщение:
Dem0Men (03.02.2012)
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 18:21.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter