Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2002.04.01;
Скачать: [xml.tar.bz2];

Вниз

Помяните меня в своих молитвах - в ближайшее время меня обрекли на Фортран =(   Найти похожие ветки 

 
Fellomena   (2002-02-13 15:53) [0]

Да, братья по ремеслу, так вот мучают нас, приверженцев Delphi... Меня один дядька-извращенец заставляет на каком-то вонючем DigitalFortran-е программить.
Ему видите ли нужен синтетический тест производительности компа. Я ему говорю - давай на Delphi или на старом-добром OP 7 сделаю - так он как заплевался, распух весь - ну думаю, сейчас "мАсТ дАй, SUXXX, ламо" и т.д. понесётся, уже приготовилась в глаз ему дать, но он попыхтел-поплевался и презрительно изверг фразу о том, что мол Фортран с плавающей точкой лучше работает, а про Delphi он что-то слышал... но не стоит.
Тест этот ему для обучения его тупых студентов нужен.
Я Фортран в глаза не видела - он меня за него посадил и говорит - пиши, а сам, паскуда, смотрит и ухмыляется.
Всё что я из себя и из Help-а выдавить за 40 минут успела (прошу прощения у модераторов за такую сквернь в форуме ;):

program FELLOMENA01

USE DFPORT
implicit none

real i, j, k, f
REAL(8) elapsed_time


i = 10E+6
j = 0
k = 0

print *, "Enter param:"

read(*, *) f


elapsed_time = TIMEF( )

Do While(k.Le.i)
!print *, j + (sqrt(abs(sin(i*j) + cos(i+j)))+f)
j = j + (sqrt(abs(sin(i*j) + cos(i+j)))+f)
k = k+1
EndDo

elapsed_time = TIMEF( )
PRINT " "
PRINT *, elapsed_time
PRINT *, j

end program FELLOMENA01

Бредятина та ещё...
И мужик сказал - что бы, говорит, массивов побольше было, память виртуальная грузилась и вообще общёт посложнее !!!
А я синтаксиса даже не знаю 8(
Кто мне что посоветовать может - краткий курс молодова извра по DigitalFortran может кто даст ?
Пишу и плачу...


 
Юрий Зотов (M)   (2002-02-13 16:21) [1]

> Фортран с плавающей точкой лучше работает,

Вот в этом он прав, между прочим. А синтаксис в Фортранах всегда был на уровне табуретки, что там учить-то? Да и литературы по ним в всех библиотеках всегда было полно.


 
MBo   (2002-02-13 16:39) [2]

зная Паскаль, на фортране не так уж и трудно писать. И про плавающую точку, видимо верно - бывает, что переведенная на Си или паскаль подпрограмма теряет точность - замечал на сложной матричной арифметике, где это критично


 
Виктор Щербаков   (2002-02-13 16:40) [3]

Года два назад переводил с какого-то диалекта Фортрана на Паскаль достаточно большую программу. Оказалось достаточно просто (если не учитывать плохой стиль источника, где на каждом шагу были GOTO).

Я думаю, и ты разберешься без проблем. Ведь Фортран не объектно-ориентированный, следовательно и абстракции в синтаксисе там меньше.


 
Виктор Щербаков   (2002-02-13 16:43) [4]

MBo ©

> бывает, что переведенная на Си или паскаль подпрограмма
> теряет точность


Интересно, Фортран с плавающей точкой в обход FPU работает?


 
MBo   (2002-02-13 17:21) [5]

загадка - но бывает.
может, компилятор (MSVF) 8087CW умно ставит


 
Sergo   (2002-02-13 17:28) [6]

Да, дядька твой действительно извращенец, но радуйся, что он не копнул поглубже насчет массивов, предел фортрана семимерные массивы,там точно рехнешся. Рад бы помочь,но нечем, мы все записи по фортрану лет 5 назад уничтожили :(.


 
VuDZ   (2002-02-13 18:09) [7]

2Виктор Щербаков - хорошо подмечено :)
если не хватает стандартной точности, используйте не 32х битные переменные (они хороши только для 3dnow & SSE) ака single (float), а 80 битные aka extended или как их там...

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


 
wicked   (2002-02-13 18:27) [8]

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


 
Макс Черных   (2002-02-13 18:57) [9]

А мне вот тема ветки напомнила одну прикольную историю.
1987г. Москва, МВТУ им. Баумана (когда я там учился, оно так
называлось). Экзамен на кафедре П6 - выч. техника, естественно,
экзамен по фортрану (еще на ЕС 1047).
Один отличник (как звали, увы, забыл) пишет в проге:
...
A = 10
...


Переменная А у него при этом явно не обявлена. В остальном
программа была написана идеально. Так препод по фамилии Ваулин
выставил бедняге как вы думаете что? 2 балла.
Далее диалог:
- (С)За ЧТО?????
- (П)Как за что? Точка после 10 ГДЕ?
- (С)??
- (П)Фортран не строго типизированный язык, явно не объявленные переменные начинающиеся с I, J, K, L, M, N компилятор трактует как целые, а все остальные как REAL. Если написать А = 10.
то все OK, а если А = 10 (без точки) то при компиляции будет
добавлена процедура преобразования целого 10 в действительное 10.
- (С)Но ведь работать то будет.
- (П)Будет но не оптимально.
- (С)Но ведь процедура этого преобразования выполняется за
тысячную долю секунды.
- (П)А предположим, что эта строка в Вас выполняется в цикле
100000000 раз. Тогда потери времени составят около 2,7 часов.
Таким образом, при стоимости машиночаса 130руб., ущерб Родине
составит 350руб.! ОЦЕНКА - ДВА!

Студенты потом горько смеялись - Хитрый Шлоссер вырезал точку.
(Это в кино было "Вариант Омега", если кто не помнит)



 
evgeg   (2002-02-13 19:46) [10]

Фортран для численных расчетов лучший язык и по сей день.
Не один компилятор не может обогнать его в эффективности генерируемого кода. А всякие структуры в численных расчетах совсем и не нужны.


 
copyr25   (2002-02-13 19:47) [11]

Помянем, помянем... Только, по моему скромному мнению,
ну, раз хоть один высоко-уровневый язык знаком - научиться писАть на др. - два, три дня:))
Я сам на Фортране so long, long time ago:)) делал чего-то... Ну, нормальный.
А Pascal лучше:)))


 
Fellomena   (2002-02-14 10:51) [12]

2 All: разобраться в Фортране не сложно, но мне просто противно ! вот !

2 Виктор Щербаков © (13.02.02 16:40): ты удивишься, но даже в Микрософтовском Visual Fortran-е в заготовках и примерах до сих пор имеются GO TO
И ты, imho, путаешь старый Фортран и тот, что раньше Digital назывался, а сейчас в постановку VisualStudio входит - с помощью него даже окошки создавать можно... корявые

2 VuDZ: aka extended - это в новом Фортране (скажу я тебе как новоявленный специалист ;) REAL(8) вроде называется :\

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

2 All ещё раз: между прочим, новый Фортран (тот что визуальный) знаете что использовать может - MFC, да-да-да...

Ладненько, всем за поддержку спасибо...


 
Королев   (2002-02-14 11:35) [13]

я начинал с фортрана...очень страшно...очень глючно...
есть там много для работы с математикой, но это все тоже глючит...
фортран не нужен!!!


 
Юрий Зотов (M)   (2002-02-14 11:44) [14]

> Макс Черных

Да, в старых Фортранах так оно и было (хотя преподаватель, IMHO, все же перегнул палку - оценку можно было снизить, не не до двойки же). Но, думаю, современные компиляторы "поумнели" и подобные недостатки в них устранены.

По крайней мере, современные Фортран-компиляторы - оптимизирующие. Это уже о многом говорит.



> Виктор Щербаков © (13.02.02 16:43)

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


 
VuDZ   (2002-02-14 13:18) [15]

так же как и интеловские компиляторы - они иногда такое с кодом делают, что хоть стой, хоть падай. Да и процы то же извращаются как угодно - меняют поряд команд и прочеее :).
говорят, что Intel Fortran Compiler + прямые руки == гремучая смесь
хотя, когда нужны максимально быстрые расчёты - ассемблер спасёт отца русской демократии - только код нужно затачивать под определённый проц - iP2, iP3, K7. причём ещё иногда надо учитывать частоту системной шины, так как при этом можно выгодать до 10-15% прироста в скорости. Можно ещё добавить и SSE, но он только для 32х битных чисел. Обычно хватает, но не всегда.

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


 
VictorT   (2002-02-14 14:09) [16]

А моя начальница вот хочет, чтоб я на досовском FoxPro писал програму. Она видите ли, лет 20 назад на нём что-то ваять пыталась, и теперь считает что это самый крутой язык. А на моё робкое предложение писать на Дельфях или на Билде вообще выдала такое: "Ты уйдёшь, а кто програму сопровождать будет? FoxPro все знают, а твои Дельфи или Билдер никто не знает". Вот так вот.


 
Abajun   (2002-02-14 14:50) [17]

2Fellomena
Я вообще только и делаю, что пишу программы на смешанных языках: Fortran, Delphi и С++Builder. Самая лучшая информация по программированию на Фортран была получена из хелпа Compaq Visual Fortran Version 6.1 и еще немного из книг О.В. Бартьенева.
Но согласна - он противный.


 
Romkin   (2002-02-14 14:52) [18]

Думаю, сейчас на Интеловских процах уже все равно - объявил сопроцессорный тип (Double, REAL*8 и тд) - и считает уже сопроцессор, так что от языка мало зависит. Фортран хорош тем, что для него куча библиотек мат. расчетов. Да и работа с массивами удобная - историчекски можно в процедуру передать что-то вроде array of..., ,без размеров.
Что всегда нравилось в Фортране - встроенная поддержка комплексных чисел и арифметический оператор сравнения, плюс удобное задание блоков исходных данных.
Насчет учебников - рекомендую Пярнпуу "Программирование на Алголе и Фортране" - очень толковое древнее руководство, половина - Алгол, половина - Фортран IV. Сам когда-то учил, где-то дома валяется.
Собственно subj - фортран очень похож на Бейсик (точнее - наоборот :-))
Если не изменяет память - первые пять позиций в строке - для меток и если в первой позиции С, то вся строка - комментарий. Шестая позиция - если в ней любой символ, то это продолжение предыдущей строки (обычно ставят *). Собственно программа - с 7 по 80 позицию. Может быть, в этой версии все изменено, но вряд ли.
Есть типы чисел с плавающей точкой real и double precision, причем функции для real - sin, cos..., для double - dsin, dcos... для complex - csin, ccos. Для double в записи числа вместо E используется D.
И очень активно используются метки - в read/write, цикле DO (аналог for)


 
Fellomena   (2002-02-14 17:24) [19]

Ясн о мне отношение подавляющего числа людей к Фортрану... чтож... будем рвать 8E
А про Васик вспоминать не надо - до сих пор вспоминаю сцены из детства, как я за ZXSpectrum 48kb на этом Васике "программила", вспоминаю, как какое-то извращенство !

2 VuDZ: давай для начала попробуем метод пузырька для сортировки массива из 10E+4 элементов типа real. Массив предварительно создаём рандомайзом.

И ещё вопрос: вот в Фортране считается время, за которое выполняется код, стоящий между
elapsed_time = TIMEF( )
код
elapsed_time = TIMEF( )

В ObjectPascale есть нечто подобное ?
(я не о таймере говорю, а именно о Паскалевской ф-ии)


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

А что, было бы интересно сравнить имеющийся инструментарий по вычислительной мощности.


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

GetTickCount() - winAPI +/- 10ms
тэкс... 10000 записей, всего ~80кило.
может пусть будет ~100"000 записей?

приступим-с :>


 
VictorT   (2002-02-14 18:19) [22]

>А про Васик вспоминать не надо - до сих пор вспоминаю сцены из детства, как я за ZXSpectrum 48kb на этом Васике "программила", вспоминаю, как какое-то извращенство !
Попрошу не обижать Спектрум. Я между прочим тоже на Спектруме програмил, и между прочим на асме вообще дивные вещи творил. И вспоминаю об этом, в отличие от тебя, с ностальгией.


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

Блажен, кто может такое вспомнить.
Мне приходилось навигацинные системы на i8080(580) делать на asm,
включая такие вещи как весь мат.пакет по стат. обработке сигналов.


 
VuDZ   (2002-02-14 18:27) [24]

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


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

Ok.
Обращение матрицы 500х500 заполненной rnd extended


 
Фэ   (2002-02-14 18:31) [26]

200 sec на P-iii 1000EB 256M


 
Фэ   (2002-02-14 18:31) [27]

Sorry, 20 sec


 
VuDZ   (2002-02-14 18:34) [28]

что значит обращение?
если делать тест то с мат. расчётами, а не на сравнение и пр.


 
Romkin   (2002-02-14 18:38) [29]

Обращение матрицы компактным методом Гаусса с выбором эл-та по столбцу :-))


 
VuDZ   (2002-02-14 18:38) [30]

нечто вроде такого:
double CCMFCDlg::FloatTest(int iInitVal)
{
m_spIUtility->TimerStart();
double f0 = 0;
double f1 = 123.456789;
double f2 = 98765.12345678998765432;
double f3 = 12345678943.98;
for(int i = 0; i < iInitVal; i++)
{
f0 = (f1 / (double)i) - f2 + (f3 * (double)i);
}
m_spIUtility->TimerEnd(/*sbsInfo*/);
CString ss;
ss.Format("Result is %f", f0);
MessageBox(ss);
return f0;
}


э... я хотел сказать:
function TForm1.FloatTest(iInitVal: Integer): double;
var
f0, f1, f2, f3 : double;
i : Integer;
begin
Utility1.TimerStart();
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;
Utility1.TimerEnd();
ShowMessage(Format("Result is %n", [f0]));
FloatTest := f0;
end;


 
iZEN   (2002-02-15 01:36) [31]

Для VuDZ.
Можно заодно и Java протестировать.

Вот что и как я тестировал в Java.

package test;
/**
* Title: Тестовые вычисления в Java
* Description: Небольшой float-тест
* Copyright: Copyright (c) 2002
* @author iZEN
* @version 1.0
*/
public class TestApplication {
/**
* Исходный код на ObjectPascal:
*
* FloatTest(iInitVal: Integer): double;
* var
* f0, f1, f2, f3 : double;
* i : Integer;
* begin
* Utility1.TimerStart();
* 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;
* Utility1.TimerEnd();
* ShowMessage(Format("Result is %n", [f0]));
* FloatTest := f0;
* end;
*
* Код на Java:
*/
public static double floatTest(int iInitVal) {
System.out.println("Float-тест с начальным значением=" + iInitVal);
double f0, f1, f2, f3;
int i;
long startTime, endTime, delay;
startTime = System.currentTimeMillis();
f0 = 0d;
f1 = 123.456789d;
f2 = 98765.12345678998765432d;
f3 = 12345678943.98d;
for(i = 1; i < iInitVal - 1; i++) {
f0 = (f1 / i) - f2 + (f3 * i);
}
endTime = System.currentTimeMillis();
delay = endTime - startTime;
System.out.println("Длительность Float-теста(миллисекунды): " + delay);
return f0;
}
/**Main method*/
public static void main(String[] args) {
int someValue = 1000000000;
double someResult = floatTest(someValue);
System.out.println("Float-тест закончен, результат=" + someResult);
}
}

/*
Железо: Duron 700МГц, 128МБайт SDRAM133.
Программное обеспечение: Borland JBuilder5.0 Enterprise с JRE/JDK1.3; JVM: java.vm.name="Java HotSpot(TM) Client VM"; java.vm.vendor="Sun Microsystems Inc."; java.vm.version="1.3.0_02".

Условия тестирования: компиляция без отладочной информации; запуск программы из IDE JBuilder.

Вывод в консоле JBuilder5.0 для нескольких запусков программы:

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

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

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

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

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

Статистики достаточно?
Может подкинете что-нибудь посложнее? Сравним.


 
VuDZ   (2002-02-15 02:54) [32]


#include "windows.h"
#include "stdio.h"
#include "conio.h"
#include "math.h"

long double inline foo()
{
return (long double)pow((long double)rand() * long double(rand()), (long double)rand());
}

long double inline check(long double ld)
{
if (((int)ld % 3) == 0)
ld *= pow(ld, 2);
else
ld *= pow (ld, 0.5);

return ld;
}

int main()
{
DWORD dw1 = GetTickCount();
long double ld;
for (int i = 0; i < 0xfffff; i++)
ld += (check(check(check(foo()) * check((long double)i) * pow (long double(i), foo()) / foo()) * foo()));
DWORD dw2 = GetTickCount() - dw1;
printf("result - %Lg\n", ld);
printf("Time to calc - %i\n", dw2);
getch();
}


Intel - 2000ms
with out inline 2100ms
MS Compiler with inline - 4600ms
-//- -//- with out inline - 4500ms

Athlon 1000/133 on ASUS a7v266 512Mb DDR
мну-с... кто меньше?


 
Фэ   (2002-02-15 13:59) [33]

Ну что тут сказать..
MVC 6.0 дал 8.5 сек на P-III 1000EB 256M


 
Fellomena   (2002-02-15 14:13) [34]

Давайте быть последовательными и ставить конкретные задачи.

1). Сортировка одномерного массива размером 10E+4 типам real методом "Пузырька" снизу-вверх.
Тестить скорость надо на 1 машине, что бы получить одекватные результаты.
Все желающие - высылайте мне *.EXE модули, результатом работы которых будет файл, в котором будет содержаться
название языка, первое и последние значение полученного массива (и, если использовались, оптимизационные настройки компилятора).
Я буду на своей машине тестить и оглашать результаты здесь. Когда с первой задачей разберёмся приступим к чему-нибудь посерьёзнее.

Алгоритм по которому ориентироваться :)

program RANDOM2

USE DFPORT
implicit none

! Variables

integer i, j
real a(10E+4), k, temp
REAL(8) elapsed_time

! Body of RANDOM2

print *, "Waiting for array to be formated..."

DO j = 1, 10E+4
call RANDOM_NUMBER(k)
a(j) = k*100
!print *, a(j), j
end do

print *, "Testing CPU... Please wait..."

elapsed_time = TIMEF( )

DO i = 1, 10E+4
DO j = 1, 10E+4
if (a(i).LE.a(j)) then
temp = a(i)
a(i) = a(j)
a(j) = temp
endif
END DO
END DO

elapsed_time = TIMEF( )

print *, ""
print *, "Work complete ! Time = ", elapsed_time
print *, ""

!DO i = 1, 10E+4
!print *, a(i)
!ENDDO

read(*, *)
end program RANDOM2


 
Romkin   (2002-02-15 15:05) [35]

Отправил 15 кил - лови!


 
Fellomena   (2002-02-15 15:13) [36]

ok !!!

Следующий




 
VuDZ   (2002-02-15 18:07) [37]

ушло мылом...


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

Тема действительно интересная.

Мне кажется, что стоит методически несколько по другому подойти.
Тема может растянуться надолго и, поскольку, Fellomena, взяла на себя труд тестировщика, а я бы сказал координатора, то для повыщения общности результатов предлагаю следующее.

1.На основе предложений Fellomena формирует очередной тест, приводя в псевдокоде (хоть бы и паскаль) алгоритм м давая ему имя TESTNAME.Тестровщики обязаны в точности его воспроизводить путем использования типовых языковых конструкций (не писать на асм в бейсике)

2.Для каждого теста полюбовно определяются:
- число циклов теста Cycle (напр 10 тыс);
- число циклов повторения теста Repeat (типовое 10);
Второй параметр обеспечит получение статистики от запуска
к запуску теста и позволит избежать "промахов" мультизадачности.

3.Каждый тестировщик обозначает свой псеводним <TESTER>.

4.Файл-ткст должен иметь структуру имени <exename>
TESTER_TESTNAME_CMP.EXE
TESTER - имя тестера;
TESTNAME - имя теста от Fellomena
CMP - наименование компилятора от Fellomena

5.На основе поступлений тестов Fellomena формирует список наименовани инструментария (Delphi 5.0 build 6.18 sp.1).
и краткое обозначение компилятора (Dx, MVC, BCx, JBx, ..)
Тестировщики обязаны им руководствоваться.
6.В результате работы теста должен формироваться текст файл <exename>.txt примерного содержания (на обсуждение).Его вместе с *.exe тестировщик высылает Fellomene.
7.Время измеряется в ms по GetTickCount.
8. При запуске теста д.б. минимизированы стронние процессы и задачи.

[Header]
Compiler=Delphi 5.0 build 6.18 sp.1
CPU=P-III 1000EB
RAM=256M
Chip=i815EP-B
Tester=Fe
Test=Bubble Sort
Cycle=10000
Repeat=10
[Time]
Time1=3380
Time2=2952
Time3=2975
Time4=2945
Time5=2960
Time6=2945
Time7=2955
Time8=2940
Time9=2955
Time10=2950

P.S. Думаю, что результаты всех заинтересуют.


 
Фэ   (2002-02-15 22:01) [39]

Отправил на почту


 
iZEN   (2002-02-15 23:51) [40]

Так Java будем тестить или как? Примеры кодов подходящие, я их могу легко адаптировать.

Гм...в Java нет такого понятия как exe-файл -- его заменяет JAR-Executable, который, например в Windows Explorer, по щелчку мыши загужается в виртуальную ява-машину, в памяти распаковывается и исполняется (можно запустить из bat-файла: java.exe -jar MyApplication.jar
и весь вывод на консоль производится как в обычном Win-приложении.


 
iZEN   (2002-02-15 23:53) [41]

Дополнение к предыдущему сообщению.

Только нужна Sun JRE1.3 (~9Мб в дистрибутиве), но лучше новую версию JRE1.4 (она быстрее).


 
Фэ   (2002-02-16 01:02) [42]

Конечно будем, а также все у кого чего может считать и рассчитывать.

Отправил тест на Free Pascal (занятно по ср. с Delphi)


 
Фэ   (2002-02-16 01:05) [43]

И еще..
По результатам тестов можно выложить типовые алгоритмы в кладовку и хотя сайт о Дельфи, это будет полезно для всех.
Так, что тесты желательны из актуальных задач.


 
VuDZ   (2002-02-16 12:04) [44]

во блин попал - из шутки переросло в производство :)
1. есть предложение выкладывать всё это на каком-нибудь сайте, что бы все желающие могли протестировать скорость разных вариантов на своём компе.
2. вот на счёт доловного перевода алгоритма с паскаля на другие языки - млжет не стОит, лучше или входные:выходные данные или алгоритм
3. может сегодня же придумать несколько тестов, а не один, что бы было проще их реализовывать
4. для софта выставлять внутри или в taskManger"e Real Time Priority, правда гонял у себя много тестов при играющем winAMP"e или MP8.0 и разброса почти не было (но они то и проца почти не потребляют-с)
5. GetTickCount() пригоден только для измерений, длящихся > 1s, иначе у него разброс большой. Можно было бы использовать rdtsc
, но это уже извращение будет :)


> По результатам тестов можно выложить типовые алгоритмы в
> кладовку и хотя сайт о Дельфи, это будет полезно для всех.

где это видно было, что бы алгоритмы были лишними...


 
Фэ   (2002-02-17 11:00) [45]

Если Мерлинам не захочется, то могу держать на своем сайте

Открыл доступ
ftp.pi8plus.ru
login: ftpguest
psw: 123

Выкладывать буду на
ftp.pi8plus.ru/pub/download/compare/

1.На сортировке стоит откатать технологию, а затем подобрать
следующие алгоритмы, на которых можно изучить особенности работы тех или иных компиляторов.
2.Не обязательно останавливаться на exe.
Языковый диапазон сегодня достаточно широк и его обозначение тоже полезно.
3.
> вот на счёт доловного перевода алгоритма
Конечно, речь не о дословном переводе. Но хороший программер может, зная особенности работы своего компилятора, так составить исходник, что оптимизатор будет отдыхать. Ну и не надо пользоваться inline, asm внутри языков высокого уровня.
Когда обозначен и согласован очередной алгоритм, паскаль может сойти за псевдоязык при его опубликовании - вот о чем речь.

Если кому-то удасться использованием типовых языковых конструкций улучшить показатели, то такие варианты можно выкладывать, как примеры.
4.
> GetTickCount() пригоден только для измерений
Подбирая за счет числа циклов время одного теста > 2 сек получим
разброс не более 1 %.
Кроме того, обязательно повторять тест раз 10 - тогда можно отсечь промахи и задержки.

Вот пример:

[Header]
Compiler=Delphi 5.0 build 6.18 sp.1
CPU=P-III 1000EB
RAM=256M
Chip=i815EP-B
Tester=Fe
Test=Bubble Sort
Cycle=10000
Repeat=10
[Time]
Time1=1912
Time2=1950
Time3=1931
Time4=1946
Time5=1940
Time6=1946
Time7=1950
Time8=1940
Time9=1951
Time10=1945
[Result]
0=1.2505566701293E-5
9999=0.999936824198812

5.Ввести в выходной файл секцию для контрольных результатов
[Result]
0=
Nmax=

это для массивов, а для однострочного результата 0=

6.Выложил результаты для Delphi5, Free Pascal и шутки ради BP7
ftp.pi8plus.ru/pub/download/compare/

Если кому интересно - присоединяйтесь.


 
Фэ   (2002-02-17 11:07) [46]

Что-то в этом роде для пузырьковой сортировки:

const
N = 10000;
Kmax = 10;
var
A: array [0..N-1] of double;
x: double;
first,last,i,j,k: integer;
F: TextFile;
fname: string;
......
Randomize;
for i:=0 to N-1 do A[i] := Random;

first := GetTickCount;
for i := 0 to N-1 do
for j := 0 to N-1 do begin
if (A[i] < A[j]) then begin
x := A[i]; A[i] := A[j]; A[j] := x;
end;
end;
last := GetTickCount;

P.S. Кстати уже на этом "примитивном" примере уже сделал интересные выводы в отношении D5 и Free Pascal.


 
Mbo   (2002-02-17 11:18) [47]

Каковы выводы?


 
Фэ   (2002-02-17 19:50) [48]

А выводы такие(по анализу deasm)
D5 сч.циклов переворачивает (т.е. фактически делает downto)
Free Pascal оставляет Ваш вариант.

Промежуточную переменную D5 вынес в память, а FP сделал dword(те же 8 байт) и разместил в регистре.

В итоге здесь D5 проиграл FP (см на сайте результаты)


 
Фэ   (2002-02-17 19:52) [49]

Суда же выложил результаты тестирования интерпретирующих систем
ActivePerl и ActivePython для Win платформы.
Тоже занятно:

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



 
Фэ   (2002-02-17 20:11) [50]

Так, что господа Сишники, Курильщики Явы и пр., где Ваши варианты ?
Или ломка ?
Да и Fellomena затихла со своим Fortran..



 
VuDZ   (2002-02-17 22:09) [51]

я свой вариант отослал Fellomen"e - я юзаю обычно Intel C++ Compiler, который является наибыстрейшим компилятором... будет врем я- выложу на сайте


 
Fellomena   (2002-02-19 10:57) [52]

Спасибо всем кто прислал свои варианты.
Уже готовы результаты для VisualFortran 6.1.0 без оптимизации и для компилятора Delphi 6 - забавненько получилось ;)
Сегодня протестю С-шный код и результаты, думаю завтра кину сюда.




Страницы: 1 2 вся ветка

Форум: "Потрепаться";
Текущий архив: 2002.04.01;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.62 MB
Время: 0.007 c
1-91
Yu
2002-03-21 12:06
2002.04.01
Что за ошибка?


3-32
Bill
2002-03-06 10:51
2002.04.01
Как программно отсортировать базу данных


14-300
fliz
2002-02-19 13:00
2002.04.01
подскажите, откуда можно скачать нормальную версию Internet Explorer 6 ?


14-313
madburro
2002-02-15 22:47
2002.04.01
Optical mouse


7-323
B1ADE
2001-12-25 00:46
2002.04.01
КАК Включить и ВЫКЛЮЧИТЬ КЛАВУ !!!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский