Страницы: 1 2 3 вся ветка
Форум: "Потрепаться";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.04;
Скачать: [xml.tar.bz2];




Вниз

Сравнение компиляторов - часть 2 


VuDZ   (2002-02-18 04:05) [0]

вот тут - http://vudz.by.ru/misc/flops.zip - есть исходник одного теста - вычисляет MFLOPS - если есть у кого желание - переводите на другие языки, сравним скорости...
Было бы интересно посмотреть Delphi 5 vs 6 :>



Фэ   (2002-02-18 09:25) [1]

Link не работает



Фэ   (2002-02-18 09:58) [2]

Что-то этуазизма не видно.
Видно батоны и лок кей интереснее обсуждать.
Тем не менее результаты будут выкладываться здесь

ftp.pi8plus.ru/pub/download/compare/



savva   (2002-02-18 10:04) [3]

я тоже не смог скачать.. а глянуть было бы интересно... может каким другим образом можно скачать?



Фэ   (2002-02-18 10:45) [4]

Вот этот не работает ?
ftp.pi8plus.ru/pub/download/compare/

А ты не только гляди, но и поучаствуй.
Первый алгоритм - "пузырьковая " сортировка.
Сам алгоритм и требования к выходному файлу
в каталоге см. выше.
Есть результат для D5, Free Pascal, BP7, Perl, Python.
Тестирование на разных машинах даст еще и статистику по hard



savva   (2002-02-18 11:34) [5]

>Фэ © (18.02.02 10:45)
я хотел поучаствовать - проделать на С это (для сравнения :)))
не получается что то.. может дело в прокси, через который я выхожу..



Фэ   (2002-02-18 12:33) [6]

to savva
Начни через ftp://ftp.pi8plus.ru

Выложил следующий алгоритм "Сортировка Шелла".
Так как работает быстрее, то увеличил размер массива до 100,000.
Free Pascal опять впереди D5.



savva   (2002-02-18 13:44) [7]

>Фэ © (18.02.02 12:33)
не вышло.. наверное админ наш прикалывается :))



VuDZ   (2002-02-18 13:55) [8]

у меня точно админ прикалывается - файл положил на сервер. а он не скачивается :( - вот это вроде работает <a> http://vudz.by.ru/files/flops.c</a>



Фэ   (2002-02-18 15:20) [9]

Да, доступ есть.

Но, често говоря, я бы хотел в это мероприятие внести и некоторый обучающий элемент. Выдать на гора сложные тесты (их достаточно наваяно) не проблема. Получим мы какой-то интегральный ответ или нет - еще "бабушка надвое сказала".
Хотя примерный ответ мне известен.

А вот если двигаться по "восходящей", то можно увидеть тонкости в работе компиляторов(интерпретаторов).
Кроме того, это позволит начинающим "держаться" столько, сколько смогут.
Надеюсь, что сайт этот образовательные цели тоже преследует.
Для этого, на самом деле, надо не много:
- не воспринимать это как блажь (времени у всех не много);
- уметь работать в команде (четко руководствоваться договоренностями; не бросать сырость - кто-то должен за Вас ?; не ставить свое Ego на первое место);
- не бросать начатое дело (ответственность);

Договоримся ?
Выложил исходник для образца

ftp://ftp.pi8plus.ru/pub/download/compare/source.pas (dpr)

P.S.
Кто-то здесь упомянул о сетовании иноземцев на то, что пока мы (ино) добиваемся очередных микронов, они(мы с Вами) берут алгоритмами. Вот и давайте свое брать и учить и учиться.



VuDZ   (2002-02-18 20:21) [10]

1. первые результаты весьма не однозначны: интеловкий компилятор, заточенный именно под мат. теты проиграл в некоторых местах старому доброму MS"овскому :<

Intel C++ Compiler -O3 -Og -G6
1 1.3358e-012 0.0193 727.2727
2 2.0517e-013 0.0174 402.8777
3 1.7542e-014 0.0224 759.7765
4 -5.4512e-014 0.0233 643.4316
5 3.3307e-016 0.0426 681.3510
6 -1.9040e-014 0.0424 683.8615
7 2.6034e-011 0.0524 228.9121
8 -5.4068e-014 0.0413 726.1725

CL -Og -G6
1 1.3429e-012 0.0250 559.3009
2 2.0517e-013 0.0175 399.6432
3 1.7542e-014 0.0239 710.1828
4 -5.4512e-014 0.0207 726.1725
5 3.3307e-016 0.0415 699.3218
6 -1.9040e-014 0.0350 827.4632
7 2.6034e-011 0.0562 213.6300
8 -5.4123e-014 0.0390 769.8476

results:
ICL
MFLOPS(1) = 475.9725
MFLOPS(2) = 422.6992
MFLOPS(3) = 599.2433
MFLOPS(4) = 703.2118

CL
MFLOPS(1) = 466.3024
MFLOPS(2) = 409.8934
MFLOPS(3) = 605.1030
MFLOPS(4) = 767.2243


тестовый файл тежит тут - <a href = http://vudz.by.ru/files/flops.c></a>...

2. результаты я не оформил как этого желали. в связи с разными причинами :>

3. пожелания:
все тесты делать консольными
перед началом теста ждать нажатия любой клавиши, что бы было можно выставить realtime приоритет



VuDZ   (2002-02-18 20:23) [11]

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



Фэ   (2002-02-19 13:16) [12]

Выложил "Решето эратосфена" для D5 и Free Pascal
Нос в нос.
ftp://ftp.pi8plus.ru/pub/download/compare



VuDZ   (2002-02-19 13:24) [13]

у меня было несколько другое решение, но похожее... но есть метод лучше и во много раз быстрее :)
я сейчас пытаюсть произвести reverse engenering своего же кода - с 3dNow перевести на С один очень мощный тест...



Фэ   (2002-02-19 13:31) [14]

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



VuDZ   (2002-02-19 13:51) [15]

ладно, так что у нас следующее по расписанию?



Фэ   (2002-02-19 13:59) [16]

Сегодня подготовлю "Регресионный анализ"
(аппроксимация по МНК)
6-7 тестов в одном
(линейная, гипербол, показат,эксп, логарифм, парабол, полином)



Фэ   (2002-02-19 14:06) [17]

Хотелось бы, чтобы кто-то еще присоединился. Я могу и С/Java/Fortran/Oberon параллельно делать, но давайте вместе.
Требования к выходному файлу не зря обозначены - смогу затем обработать их и выложить на сайт в разных разрезах.



VuDZ   (2002-02-19 14:16) [18]

я могу помочь с С, перевести на него с Java & Pascal



Фэ   (2002-02-19 14:29) [19]

Ну и давай - алгоритмы все там есть
ftp://ftp.pi8plus.ru/pub/download/compare
algorithm.txt для каждого случая.
sourse.pas - полный текст на паскале



VuDZ   (2002-02-19 14:44) [20]

переделать source.pas который в корне?



Фэ   (2002-02-19 15:21) [21]

Это для примера оформления под разные тесты.
Сами алгоритмы выложены в соотв. каталогах в файлах algorithm.text



VuDZ   (2002-02-19 16:44) [22]

я у себя выложил новую версию решета - http://vudz.by.ru/files/minus.zip

кое-что я поменял, надо будет немного или переделать мои исходники или другие. Есть два exe - один с 10000 числел, другой с 300"000 - у меня комп быстрый, н я хотел бы увидеть результаты сегодня, а не через недулю :) Исходники прилогаются.
Есть 2 варианта - первый - решето, второй мой. Правда, я думаю его уже кто-то открыл до меня, но не важно.
На ftp залить не смог - ftpguest|123 не работает :(

Вот, есть одно предложение - написать класс для работы с длинными числами и на его основе вычислть просты числа по малой теореме Ферма с одим из каймалловых числел, 531 для примера.
Этим мы убъём друх зайцев - проверка как разные компиляторы работают на оптимизацию и как происходит работа с членами классов.

Как мысль?



Фэ   (2002-02-19 16:57) [23]

Для того, чтобы сравнивать компиляторы а не алгоритмы, последние д.б. идентичны для разных платформ.
Вот и давай алгоритм.



Фэ   (2002-02-19 16:58) [24]

вход ftpquest я убрал, если надо то по мылу скажу - мали у кого ума хватит биб-ку Мошкова мне залить.



Фэ   (2002-02-19 17:00) [25]

Link твой не работает



VuDZ   (2002-02-19 17:04) [26]

vudz.by.ru/files/minus.zip - вот так работает. ничего не поимаю.... походу дела, http:// не надо писать

алгоритм есть, осталось его превести в нормальный вид.



VuDZ   (2002-02-19 17:51) [27]

vudz.by.ru/files/shell.zip - тут сортировка Шелла, два варианта - для long double 80bits & double 64bits.
Два exe - один с интеловским компилятором, другой - с MS compiler
исходники там же



Фэ   (2002-02-19 18:10) [28]

Ok



Фэ   (2002-02-19 18:12) [29]

Тормозной сервак у твоего п.



VuDZ   (2002-02-19 18:37) [30]

раньше был очень быстрый... может просто потому, что я ночью работал?



Fellomena   (2002-02-20 10:43) [31]

Ребята, при сортировке "Пузырьком" всех уделал Delphi6 - VFortran вообще не при делах:
****************************
Delphi6 Ent
Options: No debug info
Randomization array [1..100000] of real
Result:
First number 3.89129854738712E-0002
Last number 9.77562586776912E+0002
Time of sort: 430.041 sec
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

VFortran 6.1.0
Options: None
Randomization array [1..100000] of real
Result:
First number: 3.9208684E-05
Last number: 99.99982
Time of sort: 610.120000000000 sec

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

BorlandC++ 5.0
Options: None
Randomization array [1..100000] of real
Result:
First number: 2.4238182E-04
Last number: 89.79312
Time of sort: 501.230000000000 sec
*************************************

Вот такие пироги =)



Фэ   (2002-02-20 12:06) [32]

Смотрите результаты здесь

ftp://ftp.pi8plus.ru/pub/download/compare/compare.htm

To VuDZ: полученое от тебя для Сей просто уснуло на P-III 1000EB.
Поэтому и не включил в таблицы.
Ты навалился всей мощью ООП и STL на бедные алгоритмы и их просто не стало видно за гигантской работой классов.



Фэ   (2002-02-20 12:10) [33]

To Fellomena
Что-то очень низкие цифры в твоих тестах - на Cray тестила ?



VuDZ   (2002-02-20 12:42) [34]

у меня всё умерло и без STL. STL на скорость не влияет - возможно у меня руки скривились...

2Fellomena
А почему ненту моего варианта, который я послал тебе?



Fellomena   (2002-02-20 13:03) [35]

2 VuDZ:
ты мне не прислал исходник, а прога твоя массив размером 1E+4 обсчитывала, тогда как требование было 10E+4 - чувствуешь разницу ? ;)
real a[10000]обсчитывает за несколько секунд, тогда как 10E+4 за минуты - соответственно это даёт более точное представление о скорости и эффективности.



Фэ   (2002-02-20 13:15) [36]

To Fellomena:
Я задал вопрос о цифрах и хотелось бы ответ услышать.



Фэ   (2002-02-20 13:18) [37]

Сорри, не обратил внимание, что в сек, а не мсек.
Размер 100 тыс избыточен для точности.



Fellomena   (2002-02-20 13:25) [38]

2 Фэ:
=)
Насчёт избыточности можно поспорить 8)
А комп:

Chaintech7AJA VIA KT-133
Duron 650 (+ небольшой разгон по шине)
Win98Se
Hyndai pc133 192Mb (+тюнинг интерливов и CASL)



VuDZ   (2002-02-20 13:45) [39]

vudz.by.ru/files/shell.zip - еовый Шелл, без шаблонов
vudz.by.ru/files/math.zip - сортировка пузырьком для 100"000 элементов на IntelCC

PS мои глаза меня предали или проц умер, но интеловский компилер генерит более медленный код если нет вычислений. причём очень сильно медленный...



Фэ   (2002-02-20 14:18) [40]

Обновление системного времени по GetTickCount (100 Гц или 10 ms).
Принимая равновероятный характер потока запросов, получаем среднее время ошибки измерения 5 мс.
При интервале 2000 мс имеем среднюю относительную ошибку 0.25%.
Т.е. с этим все в порядке.
Большую погрешность будет вносить мультизадачность, но она проявиться одинаково на любом значительном интервале.
Поэтому я и делал 10-кратное повторение циклов измерения, чтобы увидеть разброс и отсечь "промахи". В таблицах это видно.

Что имеем
Размер массива, тыс. Время [сек] СКО [мсек] отн.ошибка %
10 1.2 142 11
20 4.3 144 3
30 21 138 1

Т.о. при 30 тыс получаем среднеквадратическую ошибку измерения 1% что вполне достаточно для качественного сравнения компиляторов



Фэ   (2002-02-20 14:22) [41]

Размер массива, тыс. Время [сек] СКО [мсек] отн.ошибка %
10_____________________1.2_________142_____________11
20_____________________4.3_________144______________3
30_____________________21 _________138______________1



Фэ   (2002-02-20 14:26) [42]

To VuDZ
shell.zip старый или прокси лютует. CRC32= 7a309177



VuDZ   (2002-02-20 14:34) [43]

давай я тебе всё на мыло сплавлю. оставь только адрес :)

PS для более точных измерений я предпочитаю использовать realtime приоритет, но: при длительной процедуре многозадачность нивелируется относительо малыми квантами времени перепадающими на долю стороних процессов находящихся практически в suspend mode



Fellomena   (2002-02-20 15:28) [44]

Народ, только что попробовала запустить тот же Фортрановский тест, но предварительно повозившись пол часика с help-ом по настройкам. В итоге, выставив, по-моему мнению, наилучшие настройки для раввёртки цыклов, работы с массивами и плавающей запятой - получилось, что VF6.1.0 уделал (не намного - 130 msec) Delphi6 (в Delphi файле никаких дополнительных настроек не было).
Вот... 8\



VuDZ   (2002-02-20 15:32) [45]

UNROLL вещь очень мощная для _коротких_ циклов



Fellomena   (2002-02-20 15:45) [46]

2 цикла по 100000 итераций, притом один вложен в другой:
(10E+4)+(10E+4)=10E+8; => 1 миллиард итераций !
Это можно назвать коротким цыклом ?
Или имелись ввиду циклы, содержащие небольшое кол-во операций в своём теле ?



VuDZ   (2002-02-20 15:53) [47]

имеется в виду короткий в машинных инструкциях код, когда задержки на выполнение jnz соизмеримы со временем исполнения цикла.



Фэ   (2002-02-20 15:57) [48]

Включил тест от VuDZ для C и скомпилировал на MS Visual C 6.0.
Результат сам за себя..

ftp://ftp.pi8plus.ru/pub/download/compare/compare.htm


Fellomena посчитай для 10 тыс Bubble Test для VF и Builder и я включу в таблицы с поправкой на проц (у меня есть соотношение)



Fellomena   (2002-02-20 15:57) [49]

В моей последней мессаге ошибка:
(10E+4) *(10E+4)=10E+8;

2 VuDZ: и в твоей тоже :)
j mp наверное :)



VuDZ   (2002-02-20 16:01) [50]

jnz - Jump if Not Zero
я на асме пишу достаточно долго, что бы не ошибаться да и не пил я ещё :))
просто вариантов написания jmp ~ 40 штук, в зависимости от установленных флагов



VuDZ   (2002-02-20 16:06) [51]

на счёт результатов - VC присутствует только в одном тесте :(
выкладывайте exe в одно место, посмотрим-с...



Фэ   (2002-02-20 16:15) [52]

А разве во мне проблема ?
Пришли исходники по решету и шеллу - будут и другие цифры.



VuDZ   (2002-02-20 16:17) [53]

извени за наивный ворос, в куда я их пошлю? они лежат у меня на сайте, адреса мыла ты не дал...



Фэ   (2002-02-20 16:21) [54]

Шли на nesuda@freemail.ru



VuDZ   (2002-02-20 16:48) [55]

1. shellsort у меня реализован крайне криво - похоже я ошибся в алгоритме :(
2. buble sort:
[Header]
Cycle=10000
Repeat=10
[Time]
Time1=1652
Time2=1643
Time3=1652
Time4=1643
Time5=1642
Time6=1642
Time7=1643
Time8=1642
Time9=1632
Time10=1633

MidTime = 1642,4

IntelC++:
Filling array...
Working with 10000.
Writting to file...
Time to calc - 952

MicrosoftC++
Filling array...
Working with 10000...
Writting to file...
Time to calc - 1262

вот-с...



paul_shmakov   (2002-02-20 16:58) [56]

на злобу дня:
http://www.optim.ru/cs/2001/3/compar/compar.asp
не совсем согласен с процедурой проведения тестов, но все же кое-что в этом есть



Фэ   (2002-02-20 16:59) [57]

Возможно. Шли исходники nesuda@freemail.ru



VuDZ   (2002-02-20 17:01) [58]

уже выслал. для Эратосфена у тебя последнее число (в смысле до какого) ведуться расчёты?



VuDZ   (2002-02-20 17:03) [59]

http://www.optim.ru/cs/2001/3/compar/compar.asp - это достаточно старый тест, на RSDN.ru лежит то же самое, но с коментариями относительно делфи



VuDZ   (2002-02-20 17:06) [60]

[Header]
Test=Eratosphen
Cycle=3000000
Repeat=10
[Time]
Time1=5698
Time2=5909
Time3=5798
Time4=5789
Time5=5678
Time6=5678
Time7=5688
Time8=5749
Time9=5738
Time10=5788
[Result]
Res0=216816

MidTime = 5751.3
но я не понял алгоритма :(
вот мой вариант:

for (register BYTE b = 0; b < times; b++){
dw1 = GetTickCount();
for (register unsigned int i = 2; i < nums; i++)
for (register unsigned int _i = i + 1; _i < nums; _i++)
{
if ((_i % i) == 0)
vec[_i] = 0;
}

for (i = 0; i < nums; i++)
if (vec[i] != 0)
{
res1[sz] = vec[i];
sz++;
}

dw2 = GetTickCount() - dw1;
time1 += dw2;
printf("%i - %i\n", i, dw2);
}



Фэ   (2002-02-20 17:13) [61]

Да, читал.



Фэ   (2002-02-20 17:16) [62]

[Result]
Res0=216816
Это число найденных простых среди первых 3 млн ряда



Фэ   (2002-02-20 17:18) [63]

В алгоритме не ставилась задача получить весь ряд простых, а всего лишь подсчитать кол-во найденных



VuDZ   (2002-02-20 17:23) [64]

вот с этого и надо было начинать. я уже переделал



VuDZ   (2002-02-20 17:49) [65]

господа, я должен признать что я осёл :(
больше не буду писать послк пьянки...
еле-еле понял алгоритм Фе :(
но вот результаты:
Working...
0 - 5638
1 - 5638
2 - 5638
3 - 5639
4 - 5648
5 - 5648
6 - 5628
7 - 5629
8 - 5638
9 - 5638
Time for complete - 56382
Total numbers - 216816
Time for an iteration - 5638.200084

Delphi5 MidTime = 5751.3



VuDZ   (2002-02-20 18:42) [66]

и вот чего можно добиться, если изменить чуть-чуть программу, добавив один begin ... end блок:
Working...
0 - 1012
1 - 1001
2 - 1011
3 - 1012
4 - 1011
5 - 1012
6 - 1011
7 - 1012
8 - 1002
9 - 1011
Time for complete - 10095
Total numbers - 216816
Time for an iteration - 1009.500015


PS разброс в 10ms связан с тем, что на фоне играет музыка...



iZEN   (2002-02-20 18:43) [67]

Итак, тест быстродействия Java2 (SunJRE/JDK1.4).


package test;
/**
* Title: Тестовые вычисления
* Description:
* Copyright: Copyright (c) 2002
* Company:
* @author iZEN
* @version 1.0
*/
import java.util.*;
import java.io.*;

public class TestApplication {
protected static void printProperties(PrintStream out, String[] keys) {
int i = 0;
try {
for (i = 0; i < keys.length; i++) out.println(keys[i] + "=" + "\"" + System.getProperty(keys[i]) + "\"" + ";");
} catch(SecurityException sex) {
out.println(keys[i] + ": нет доступа к свойству");
}
}
public static final String[] JVM_PROPERTY_NAMES = {"java.vm.name", "java.vm.vendor", "java.vm.version"};
public static void printJVMProperties(PrintStream out) {
printProperties(out, JVM_PROPERTY_NAMES);
}
public static void printAllProperties(PrintStream out) {
Vector keys = new Vector();
try {
Properties p = System.getProperties();
Enumeration e = p.propertyNames();
while(e.hasMoreElements())
try {
String key = new String((String)e.nextElement());
keys.add(key);
} catch (SecurityException nosex) {//Не обрабатывается
}
} catch (NoSuchElementException nonseex) {//Не обрабатывается
}
String[] allkeys = new String[keys.size()];
for(int i = 0; i < keys.size(); i++) allkeys[i] = (String)keys.elementAt(i);
printProperties(out, allkeys);
}
/**
* Исходный код на ObjectPascal:
*
* function FloatTest(iInitVal: Integer): double;
* var
* f0, f1, f2, f3 : double;
* i : Integer;
* begin
* f0 := 0;
* f1 := 123.456789;
* f2 := 98765.12345678998765432;
* f3 := 12345678943.98;
* for i := 1 To iInitVal - 1 do begin
* f0 := (f1 / i) - f2 + (f3 * i);
* end;
* result := f0;
* end;
*/
public static double floatTest(int iInitVal) {
double f0 = 0d;
double f1 = 123.456789d;
double f2 = 98765.12345678998765432d;
double f3 = 12345678943.98d;
for (int i = 1; i < iInitVal - 1; i++) {
f0 = (f1 / i) - f2 + (f3 * i);
}
return f0;
}
/**
* Генератор массива размером length со случайно распределённоыми значениями
* типа float
*/
public static float[] getRandomFloatArray(int length) {
float[] result = new float[length];
///Random r = new Random();
for(int i = 0; i < length; i++) result[i] = (float)Math.random() - 0.5f;///r.nextFloat();
return result;
}
/**
* Печать элементов массива
*/
public static void printFloatArray(PrintStream out, float[] arr, int from, int length) {
for(int i = from; i < from + length - 1; i++) out.print(arr[i] + ";");
out.println(arr[from + length - 1] + ".");
}
/**
* BubbleSort -- сортировка методом пузырька
*/
public static void bubbleSort(float[] data) {
float temp = 0;
for(int i = data.length; --i >= 0;) {
boolean swapped = false;
for(int j = 0; j < i; j++) {
if(data[j] > data[j+1]) {
temp = data[j];
data[j] = data[j+1];
data[j+1] = temp;
swapped = true;
}
}
if(!swapped) return;
}
}
/**Main method -- точка входа*/
public static void main(String[] args) {
long startTime, endTime, delay;
//System.out.println("System: ");
//printAllProperties(System.out);
System.out.println("JVM: ");
printJVMProperties(System.out);
System.out.println();
/* BubbleSort-тест -- cортировка методом пузырька */
int length = 100000;
float[] rfa = getRandomFloatArray(length);
System.out.println("BubbleSort-тест: cортировка методом пузырька " + length + " элементов типа float.");
System.out.print("До сортировки (часть данных): ");
printFloatArray(System.out, rfa, 9990, 10);
startTime = System.currentTimeMillis();
bubbleSort(rfa);
endTime = System.currentTimeMillis();
delay = endTime - startTime;
System.out.print("После сортировки (часть данных): ");
printFloatArray(System.out, rfa, 9990, 10);
System.out.println("Длительность BubleSort-теста (миллисекунды): " + delay);
System.out.println();
/* Float-тест */
int someValue = 1000000000;
System.out.println("Float-тест с начальным значением=" + someValue);
startTime = System.currentTimeMillis();
double someResult = floatTest(someValue);
endTime = System.currentTimeMillis();
delay = endTime - startTime;
System.out.println("Float-тест закончен, результат=" + someResult);
System.out.println("Длительность Float-теста (миллисекунды): " + delay);
System.out.println();
}
}



iZEN   (2002-02-20 18:46) [68]

Реальные результаты.

Железо: Duron 700МГц, 128МБайт SDRAM133.
Программное обеспечение: Windows 2000 Professional RUS; Borland JBuilder6.0 Personal с Sun JRE/JDK1.4.0.
Условия тестирования: отладочная информация отключена, полная сборка (build all) перед каждым запуском.


Вывод на консоль (несколько запусков):

JVM:
java.vm.name="Java HotSpot(TM) Client VM";
java.vm.vendor="Sun Microsystems Inc.";
java.vm.version="1.4.0-b92";

BubbleSort-тест: cортировка методом пузырька 100000 элементов типа float.
До сортировки (часть данных): -0.20743817;0.42433405;-0.026971608;-0.3613428;0.23814881;-0.095044345;-0.2313191;-0.41837984;0.2855162;0.2153455.
После сортировки (часть данных): -0.40012056;-0.40011656;-0.40009293;-0.40007734;-0.40006626;-0.40005505;-0.4000522;-0.40004224;-0.40001923;-0.39999777.
Длительность BubleSort-теста (миллисекунды): 214559

Float-тест с начальным значением=1000000000
Float-тест закончен, результат=1.2345678919288543E19
Длительность Float-теста (миллисекунды): 26838

JVM:
java.vm.name="Java HotSpot(TM) Client VM";
java.vm.vendor="Sun Microsystems Inc.";
java.vm.version="1.4.0-b92";

BubbleSort-тест: cортировка методом пузырька 100000 элементов типа float.
До сортировки (часть данных): 0.39113837;-0.27484727;-0.4280536;0.37340558;-0.48770562;-0.31120205;0.07726008;0.16407555;-0.042036742;-0.45027137.
После сортировки (часть данных): -0.40100724;-0.40100354;-0.40097517;-0.4009507;-0.4009209;-0.40091097;-0.40089715;-0.40089545;-0.4008944;-0.40089306.
Длительность BubleSort-теста (миллисекунды): 212416

Float-тест с начальным значением=1000000000
Float-тест закончен, результат=1.2345678919288543E19
Длительность Float-теста (миллисекунды): 26869

JVM:
java.vm.name="Java HotSpot(TM) Client VM";
java.vm.vendor="Sun Microsystems Inc.";
java.vm.version="1.4.0-b92";

BubbleSort-тест: cортировка методом пузырька 100000 элементов типа float.
До сортировки (часть данных): -0.4443325;-0.25922766;0.4872929;-0.29503414;-0.28334635;-0.26456183;-0.20736563;0.3122543;0.43235898;-0.030510157.
После сортировки (часть данных): -0.4013865;-0.4013818;-0.4013561;-0.40134698;-0.40134087;-0.40131724;-0.4013105;-0.40127778;-0.40125465;-0.40124404.
Длительность BubleSort-теста (миллисекунды): 213287

Float-тест с начальным значением=1000000000
Float-тест закончен, результат=1.2345678919288543E19
Длительность Float-теста (миллисекунды): 26739

JVM:
java.vm.name="Java HotSpot(TM) Client VM";
java.vm.vendor="Sun Microsystems Inc.";
java.vm.version="1.4.0-b92";

BubbleSort-тест: cортировка методом пузырька 100000 элементов типа float.
До сортировки (часть данных): -0.31016558;-0.4022523;-0.4714901;-0.12545982;-0.17430124;0.04526925;-0.14471292;0.17425501;-0.4358193;0.11417931.
После сортировки (часть данных): -0.3982879;-0.39828393;-0.39828268;-0.3982797;-0.39826584;-0.39824674;-0.39822185;-0.39822096;-0.3982138;-0.3982054.
Длительность BubleSort-теста (миллисекунды): 211475

Float-тест с начальным значением=1000000000
Float-тест закончен, результат=1.2345678919288543E19
Длительность Float-теста (миллисекунды): 27299

JVM:
java.vm.name="Java HotSpot(TM) Client VM";
java.vm.vendor="Sun Microsystems Inc.";
java.vm.version="1.4.0-b92";

BubbleSort-тест: cортировка методом пузырька 100000 элементов типа float.
До сортировки (часть данных): 0.11877239;0.17907149;-0.19594985;0.36801875;0.007809818;-0.15974477;-0.4067;0.15205294;0.4026237;-0.44414395.
После сортировки (часть данных): -0.40063733;-0.40061754;-0.4006111;-0.40060538;-0.40060142;-0.40059537;-0.40058082;-0.4005679;-0.4005664;-0.40054452.
Длительность BubleSort-теста (миллисекунды): 213527

Float-тест с начальным значением=1000000000
Float-тест закончен, результат=1.2345678919288543E19
Длительность Float-теста (миллисекунды): 26628



VuDZ   (2002-02-20 19:18) [69]

я думаю, нужно только версия транлятора/конпилятора + время + размер для наглядности



VuDZ   (2002-02-20 21:02) [70]

PS я так и не понял: мы будем тесты проделывать на 64битными данными или 80битными с плавающей точкой? у меня используются именно такой тип данных. что сказывается на быстродействие из-за невыровненности данных в памяти



Фэ   (2002-02-21 00:27) [71]

Надо делать так как уже начали - 64 бита (double) для сортировки;
и longint для Решета Э.
Потом можно сортировку повторить и для других типов.
Поскольку я изменил размер массива до 20 и 200 тыс для повышения точности измерений (см на сайте) просьба это учесть.
Раз мы уж взялись за это- будем последовательны.

Я уже говорил, что буду предлагать алгоритмы, имеющие вполне понятную полезность.
Завтра (сегодня уже) выложу тест на плавающую точку.
Тема - регрессионный анализ.
Информацию по тестам прошу сократить до необходимого минимума.
Hard, OS, Compiler, Average time [ms].



VuDZ   (2002-02-21 00:39) [72]

в связи с делами, в ближайшие день-два врятли смогу принимать активное участие во всём, так что просьба: выложи файлик с описанием алгоритмов и точным указанием кол-ва элементов массива и повторов.

longint == 32 | 64bits ?

Я потом переделаю все исходники, так как был слегка не в кондиции последнии дни, результаты - потом



Фэ   (2002-02-21 00:52) [73]

To iZEN
Поскольку Java это скрипт-машина, я ее занесу в таблицу с интерпретаторами. Для них размер массива 10 тыс double (64)



Фэ   (2002-02-21 00:59) [74]

Delphi
Longint –2147483648..2147483647 signed 32-bit;
C
signed long;



iZEN   (2002-02-21 01:09) [75]

/**Фэ © (21.02.02 00:52):
To iZEN
Поскольку Java это скрипт-машина, я ее занесу в таблицу с интерпретаторами. Для них размер массива 10 тыс double (64)
*/

Java -- это не скрипт-машина! Не путайте с JavaScript.
Java == JVM + JIT;
Я привёл тест пузырьковой сортировки со 100000( сто тысяч) float-элементов (=real), и он длился в среднем 212 секунд на Duron700. Аналогичный тест на Delphi ObjectPascal:


Fellomena (20.02.02 10:43)

Ребята, при сортировке "Пузырьком" всех уделал Delphi6 - VFortran вообще не при делах:
****************************
Delphi6 Ent
Options: No debug info
Randomization array [1..100000] of real
Result:
First number 3.89129854738712E-0002
Last number 9.77562586776912E+0002
Time of sort: 430.041 sec
<...>


Комментарии излишни -- цифры говорят за себя...:)



iZEN   (2002-02-21 01:12) [76]

По поводу double: вечером, возможно, выложу результаты.



iZEN   (2002-02-21 01:45) [77]

Оопс...
/**
Я привёл тест пузырьковой сортировки со 100000(сто тысяч) float-элементов (=real)
*/
Нужно исправить:
Java.float != ObjectPascal.real;
Java.float -- 4 байта;
ObjectPascal.real -- 8 байтов;

Так что ObjectPascal.real(8 байт) == Java.double(8 байт) -- если не ошибаюсь.

Доработаю тест.



VuDZ   (2002-02-21 02:33) [78]

2Фе - просто int или long



Фэ   (2002-02-21 11:18) [79]

Я уже писал, что такие большие объемы не обязательны.
Для пузырьковой сортировки для компиляторов выбран объем
20 тыс double (64 bit).При этом время одного цикла около 5 сек.
Для усреднения - 10 циклов
Время тоже у всех не резиновое.


>Java -- это не скрипт-машина! Не путайте с JavaScript.
Я не обратил сразу внимание, что о JIT идет речь.
Ок.Поместим на одну полочку.



Фэ   (2002-02-21 12:39) [80]

Выложил регрессию и остальные обновил + исходники
ftp://ftp.pi8plus.ru/pub/download/compare/
ftp://ftp.pi8plus.ru/pub/download/compare/compare.htm



Romkin   (2002-02-21 14:17) [81]

Мда, все отлично, но самое прикольное, что у меня нет доступа к ftp, только http. Нет ли доступа через этот протокол?



Фэ   (2002-02-21 15:08) [82]

Чуть позже доофрмлю по человечески и выложу на сайт
Хотя лови.

http://www.pi8plus.ru/win/compare/compare.htm



Romkin   (2002-02-21 15:37) [83]

Спасибо. Не хватает только, на каком компьютере считалось



Фэ   (2002-02-21 16:50) [84]

Не спешите, все выложу.
P-III 1000EB,Epox i815EBP,256M, Win98SE



VuDZ   (2002-02-21 17:41) [85]

вот, забыл сразу сказать: есть код, достаточно старый, который вывод нужную инфу о проце в файл. Я думаю, что портировать его под Делфи или Java будет не сложно, хотя с Java могут быть проблемы

class CCPUInfo
{
public:
CCPUInfo();
~CCPUInfo();
bool WriteTo(LPSTR szFName);
bool m_bReady;
private:
char *m_cCPUName;
DWORD m_dwCPUClock,
m_dwMemtotal,
m_dwAval;
__int64 GetCpuTick();
int GetCpuFrequency();
};

CCPUInfo::CCPUInfo()
{
m_cCPUName = new char[13];
m_bReady = false;
if (!m_cCPUName)
return;
m_bReady = true;
ZeroMemory(m_cCPUName, 13);

void * v = m_cCPUName;
_asm
{
xor eax, eax
cpuid
mov esi, v
mov [esi], ebx
mov [esi + 4], edx
mov [esi + 8], ecx
}

m_dwCPUClock = GetCpuFrequency();

MEMORYSTATUS memstat;
GlobalMemoryStatus(&memstat);
m_dwMemtotal = memstat.dwTotalPhys;
m_dwAval = memstat.dwAvailPhys;

}

CCPUInfo::~CCPUInfo()
{
if (m_bReady)
delete m_cCPUName;
}

__declspec(naked)
__int64 CCPUInfo::GetCpuTick()
{ __asm {
rdtsc
ret
} }

int CCPUInfo::GetCpuFrequency()
{
__int64 Frequency,
TimerCount1,
TimerCount2,
CpuCount1,
CpuCount2; if (!QueryPerformanceFrequency ((LARGE_INTEGER*) &Frequency)) return 0;

QueryPerformanceCounter ((LARGE_INTEGER*) &TimerCount1);

CpuCount1 = GetCpuTick ();
Sleep (500);
CpuCount2 = GetCpuTick ();
QueryPerformanceCounter ((LARGE_INTEGER*) &TimerCount2);
if (TimerCount1 == TimerCount2) return 0;
return (int) ((double) ((CpuCount2 - CpuCount1) * Frequency) /
(double) (TimerCount2 - TimerCount1));
}

bool CCPUInfo::WriteTo(LPSTR szFName)
{
if (szFName == NULL)
return false;

ofstream ofs((const char*)szFName);
if (ofs.is_open() == 0)
return false;

ofs << "CPU Vendor: " << m_cCPUName << endl;
ofs << "CPU Frequency: " << m_dwCPUClock / 1000000 << "\tin MHz" << endl;
ofs << "Total physical memory: " << (m_dwMemtotal / 1048576) << "\tin Mb"<< endl;
ofs << "Physical memory available: " << (m_dwAval / 1048576) << "\tin Mb" << endl;

ofs.flush();
ofs.close();

return true;
}


использование:
CCPUInfo ci;
ci.WriteTo("C:\\info.txt");

есть ещё вариант, который выводит инфу о проце - Атлон, пень и пр., о он очень большой. Можно добавить фишки на фкус, типа, имя тестер, дата, время...

C.U.



Фэ   (2002-02-21 18:18) [86]

Все это есть, просто не хотелось засорять пока.



VuDZ   (2002-02-21 18:24) [87]

э... что-то каталог regression пуст... или у меня проблемы со зрением-с...



iZEN   (2002-02-22 00:34) [88]

Представляю тесты на сортировку массива методом пузырька для Delphi и Java.

Аппаратное обеспечение: AMD Duron 700МГц, 128МБайт SDRAM133.
Программное обеспечение: MS Windows 2000 Professional RUS; Borland Delphi 6.0 Enterprise; Borland JBuilder 6.0 Personal с Sun JRE/JDK1.4.0.
Условия тестирования: компиляция без отладочной информации; запуск программы из IDE.

Среда: Borland Delphi 6.0 Enterprise
Исходный код: Borland ObjectPascal

procedure BubbleSort (var a: array of Double);
var
I, J: Integer;
T: Double;
begin
for I := High(A) downto Low(A) do
for J := Low(A) to High(A) - 1 do
if A[J] > A[J + 1] then
begin
T := A[J];
A[J] := A[J + 1];
A[J + 1] := T;
end;
end;

Тип массива: заполненный элементами со значениями функции rand() на интервале (0;1.7e308)
Размер массива: 100000 элементов
Тип элемента массива: double (8 байт)
Среднее время сортировки (миллисекунды): 492338



iZEN   (2002-02-22 00:35) [89]

Аппаратное обеспечение: AMD Duron 700МГц, 128МБайт SDRAM133.
Условия тестирования: компиляция без отладочной информации; запуск программы из IDE.

Среда: Borland JBuilder 6.0 Personal с Sun JRE/JDK1.4.0.
Свойства среды:

System:
os.arch="x86";os.name="Windows 2000";os.version="5.0";
sun.os.patch.level="Service Pack 2";sun.arch.data.model="32";
JVM:
java.vm.name="Java HotSpot(TM) Client VM";java.vm.vendor="Sun Microsystems Inc.";
java.vm.version="1.4.0-b92";java.runtime.name="Java(TM) 2 Runtime Environment, Standard Edition";
java.runtime.version="1.4.0-b92";

Исходный код: Java

public static void bubbleSort(double[] data) {
double temp = 0;
for(int i = data.length; --i >= 0;) {
boolean swapped = false;
for(int j = 0; j < i; j++) {
if(data[j] > data[j+1]) {
temp = data[j];
data[j] = data[j+1];
data[j+1] = temp;
swapped = true;
}
}
if(!swapped) return;
}
}

Тип массива: заполненный элементами со значениями функции rand() на интервале (0;1.7e308)
Размер массива: 100000 элементов
Тип элемента массива: double (8 байт)
Среднее время сортировки (миллисекунды): 314745



iZEN   (2002-02-22 00:36) [90]

Аппаратное обеспечение: AMD Duron 700МГц, 128МБайт SDRAM133.
Условия тестирования: компиляция без отладочной информации; запуск программы из IDE.

Среда: Borland JBuilder 6.0 Personal с Sun JRE/JDK1.4.0.
Свойства среды:

System:
os.arch="x86";os.name="Windows 2000";os.version="5.0";
sun.os.patch.level="Service Pack 2";sun.arch.data.model="32";
JVM:
java.vm.name="Java HotSpot(TM) Client VM";java.vm.vendor="Sun Microsystems Inc.";
java.vm.version="1.4.0-b92";java.runtime.name="Java(TM) 2 Runtime Environment, Standard Edition";
java.runtime.version="1.4.0-b92";

Исходный код: Java

public static void bubbleSortStandart(double[] a) {
double t;
for(int i = a.length - 1; i >= 0; i--)
for(int j = 0; j < a.length - 1; j++)
if(a[j] > a[j + 1]) {
t = a[j];
a[j] = a[j + 1];
a[j + 1] = t;
}
}

Тип массива: заполненный элементами со значениями функции rand() на интервале (0;1.7e308)
Размер массива: 100000 элементов
Тип элемента массива: double (8 байт)
Среднее время сортировки (миллисекунды): 503667



iZEN   (2002-02-22 00:38) [91]

Так что оптимизация алгоритма много значит (сравните последние два теста Java).



VuDZ   (2002-02-22 00:54) [92]

на счт оптимизации:

for i := 2 to N-1 do begin
if A[i] <> 0 then begininc(num); // count prime
j := i + i;
while j <= N-1 do begin
A[j] := 0;
j := j + i;
end;
end
end;


вот с такой элементарной вставкой скорость увеличиватся в 5 раз :>



VuDZ   (2002-02-22 02:19) [93]

вот некоторые результаты, которые поразили мир (или по крайней мере меня :> )

BubbleSort:
10000 nums, 10 times
MS VC6.0 1181
C# 1220
IntelCCompiler 1062

Erratosphen:
300"000 nums, 10 times
MS VC6.0 984
MS C# 985
IntelCCompiler 1039

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

C.U.




Страницы: 1 2 3 вся ветка
Форум: "Потрепаться";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.04;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.96 MB
Время: 0.045 c
3-9399            konrads               2002-03-12 06:32  2002.04.04  
Работа с таблицами без BDE


14-9605           Alex12                2002-02-21 15:49  2002.04.04  
Струйный и лазерный. Характеристики и выгоды.


1-9578            michael_B             2002-03-24 22:18  2002.04.04  
Подскажите компоненту для создания плавающего меню под стиль OfficeXP


14-9628           Владимир Васильев     2002-02-22 18:04  2002.04.04  
---|Ветка была без названия|---


14-9596           valievrf              2002-02-20 17:25  2002.04.04  
СРОЧНО!!! ДЕЛО ИСКЛЮЧЕНИЯ И НЕ ИСКЛЮЧЕНИЯ!!!!