[image]

Что, господа суровые С++ программисты, поспорим быстродействием с отстойной Джавой? ;)

 
1 20 21 22 23 24 29
US Сергей-4030 #27.08.2008 21:13  @tarasv#27.08.2008 20:43
+
-
edit
 

Сергей-4030

исключающий третье
★★
tarasv> Можно подумать что write once debug anywhere это не джавовская поговорочка ;)

Не в данном случае. ;)

tarasv> Хочеш программку из 10 строк на джаве работающую под виндой и не работающую под Линукс? Никаких системно опасных вызовов, pure JDBC :D

Кривые JDBC драйвера?
   
CA tarasv #27.08.2008 21:24  @Сергей-4030#27.08.2008 21:13
+
-
edit
 

tarasv

аксакал

tarasv>> Можно подумать что write once debug anywhere это не джавовская поговорочка ;)
Сергей-4030> Не в данном случае. ;)

В данном случае и Сишный код после перекомпиляции пойдет на любой целевой платформе где stdio работает по спецификации

tarasv>> Хочеш программку из 10 строк на джаве работающую под виндой и не работающую под Линукс? Никаких системно опасных вызовов, pure JDBC :D
Сергей-4030> Кривые JDBC драйвера?

Нет драйвера добротные. Код с точки зрения всех стандартов абсолютно прямой, под виндой и маком идет, а под линукс вот не идет и все. А проблема в том что у MySQL имена таблиц под линкус case sensitiv что в стандарт не лезет, но такова жизнь.
   
US Сергей-4030 #27.08.2008 21:34  @tarasv#27.08.2008 21:24
+
-
edit
 

Сергей-4030

исключающий третье
★★
tarasv>>> Можно подумать что write once debug anywhere это не джавовская поговорочка ;)
Сергей-4030>> Не в данном случае. ;)
tarasv> В данном случае и Сишный код после перекомпиляции пойдет на любой целевой платформе где stdio работает по спецификации

Но перекомпиляция! ;)

tarasv> tarasv>> Хочеш программку из 10 строк на джаве работающую под виндой и не работающую под Линукс? Никаких системно опасных вызовов, pure JDBC :D
Сергей-4030>> Кривые JDBC драйвера?
tarasv> Нет драйвера добротные. Код с точки зрения всех стандартов абсолютно прямой, под виндой и маком идет, а под линукс вот не идет и все. А проблема в том что у MySQL имена таблиц под линкус case sensitiv что в стандарт не лезет, но такова жизнь.

Ну, это не Java виновата. Но вообще, конечно, перенос сколько-то большой системы на другую платформу - всегда геморрой.
   
US Сергей-4030 #27.08.2008 22:12  @Lester#27.08.2008 12:26
+
-
edit
 

Сергей-4030

исключающий третье
★★
Lester> "Точность результатов вычислений определяется точностью задания чисел" - это правило еще в силе?

Нет. Достаточно просто double с обычными операциями.
   

Mishka

модератор
★★★
tarasv> Нет драйвера добротные. Код с точки зрения всех стандартов абсолютно прямой, под виндой и маком идет, а под линукс вот не идет и все. А проблема в том что у MySQL имена таблиц под линкус case sensitiv что в стандарт не лезет, но такова жизнь.
Э, Тарас, это как-то не кошерно. Тут и я могу привести другой пример тогда — вот я написал программу, а она ни под вынью не идёт, ни под линем. И вообще нигде, т.к. такого API ещё не реализовано. :F
   
+
-
edit
 

Lester

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

Balancer

администратор
★★★★★
Сергей-4030, штраф за переход на личности.

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

...

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

tarasv

аксакал

Mishka> Э, Тарас, это как-то не кошерно. Тут и я могу привести другой пример тогда — вот я написал программу, а она ни под вынью не идёт, ни под линем. И вообще нигде, т.к. такого API ещё не реализовано. :F

Ок строки можно считать ресурсами не требующими перкомпиляции кода программы. А вот вопрос - IBM JDK он кошерный или трефной? ;)
   
+
-
edit
 

Lester

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

code text
  1. {
  2.     begin=time();
  3.  
  4.     i=0;
  5.     while(i<1000000) {
  6.         a=i+1;
  7.         c=i-1;
  8.         b=i*2E10B3;    
  9.         d=b^2-4*a*c;
  10.         if(d>0)
  11.         {
  12.             d=d^0.5;
  13.         };
  14.         i=i+1;
  15.     };
  16.  
  17.     end=time();
  18.     print(end -begin);
  19. }


у меня выполняется уже за 2.0сек, программа Сергея ( без -server ) выполняется на этом тесте за 4.3сек, хотя честно признаюсь для оптимизации пришлось переписать критический код с С++ на голый С, так что аплодирую разработчикам Java - не думал, что Java настолька быстра
   
+
-
edit
 

Lester

новичок
кстати насчет производительности:

code text
  1.         double begin = clock();
  2.  
  3.         double i = 0;
  4.         while( i < 10000000 )
  5.         {
  6.                 double a = i + 1;
  7.                 double c = i - 1;
  8.                 double b = i * 1024;
  9.                 double d = pow( b, 2 ) - 4 * a * c;
  10.                 if( d > 0 )
  11.                 {
  12.                         d = pow( d, 0.5 );
  13.                 };
  14.  
  15.                 i = i + 1;
  16.         };
  17.  
  18.         double end = clock();
  19.         printf( "%f", 1.0 * ( end - begin ));


тут для 10 миллионов вместо одного цикл выполняется за 0.015сек -> оригинальный тест на 1 миллион за 0.0015сек, итого мой код приблизительно в 1333 раз медленнее нативного( вроде по божески ), и учитывая

> Ишшо немного про производительность. Тест, приведенный ниже исполняется за 3.702 секунды. Аналог на обычной Java, приведенный еще ниже выполняется за 0.344 секунды. Получается, всего в 11 раз интерпретация медленнее! Если допустить, что на С++ этот код будет выполняться еще в три раза быстрее, чем мой на Java,

получается, что ява в 4.3( время вашей программы у меня ) / 11( беру ваш коэффициент - у вас серверная JVM ) / 0.0015 ( нативное время С ) = 260.6 раз медленнее С, так?
   

tarasv

аксакал

Lester> кстати насчет производительности:
Lester> тут для 10 миллионов вместо одного цикл выполняется за 0.015сек -> оригинальный тест на 1 миллион за 0.0015сек, итого мой код приблизительно в 1333 раз медленнее нативного( вроде по божески ), и учитывая
>> Ишшо немного про производительность. Тест, приведенный ниже исполняется за 3.702 секунды. Аналог на обычной Java, приведенный еще ниже выполняется за 0.344 секунды. Получается, всего в 11 раз интерпретация медленнее! Если допустить, что на С++ этот код будет выполняться еще в три раза быстрее, чем мой на Java,
Lester> получается, что ява в 4.3( время вашей программы у меня ) / 11( беру ваш коэффициент - у вас серверная JVM ) / 0.0015 ( нативное время С ) = 260.6 раз медленнее С, так?

А если посмотреть в ассемблер который как известно критерий истины? Я процентов на 99% уверен что в вашем аналоге на С тело цикла пустое потому что результаты вычислений не используются за его пределами и оптимизатор просто выкинул содержимое или провел какуюто не менее лихую оптимизацию
   
US Сергей-4030 #28.08.2008 20:26  @Lester#28.08.2008 19:17
+
-
edit
 

Сергей-4030

исключающий третье
★★
Lester> только что выдалось пару часов свободного времени - опять прошелся по оптимизации, теперь пример
Lester> у меня выполняется уже за 2.0сек, программа Сергея ( без -server ) выполняется на этом тесте за 4.3сек, хотя честно признаюсь для оптимизации пришлось переписать критический код с С++ на голый С, так что аплодирую разработчикам Java - не думал, что Java настолька быстра

А почему без "-server"?

ЗЫ Чисто мое имхо такое, что вам надо не оптимизацией заниматься, а оператором goto - в вашем дизайне c хитрым стеком возвратов к сожалению, довольно явный изъян а потому goto выполняется совершенно неправильно (вернее, правильно выполняется тоже, но только когда стек возвратов не пользуется). А в нетривиальных случаях - хрена там.

ЗЗЫ Заметьте, товарищи, мою добрую волю. Мог бы и приберечь. ;)
   
US Сергей-4030 #28.08.2008 20:35  @Lester#28.08.2008 19:17
+
-
edit
 

Сергей-4030

исключающий третье
★★
Lester> только что выдалось пару часов свободного времени - опять прошелся по оптимизации, теперь пример
Lester> у меня выполняется уже за 2.0сек, программа Сергея ( без -server ) выполняется на этом тесте за 4.3сек, хотя честно признаюсь для оптимизации пришлось переписать критический код с С++ на голый С, так что аплодирую разработчикам Java - не думал, что Java настолька быстра

В такой редакции (т.е. без вызова random()) у меня выполняется в среднем за 760 тиков (с -server). Ваш последний выложенный вариант - за 2494.
   

Lester

новичок
Lester>> кстати насчет производительности:
Lester>> тут для 10 миллионов вместо одного цикл выполняется за 0.015сек -> оригинальный тест на 1 миллион за 0.0015сек, итого мой код приблизительно в 1333 раз медленнее нативного( вроде по божески ), и учитывая
tarasv> >> Ишшо немного про производительность. Тест, приведенный ниже исполняется за 3.702 секунды. Аналог на обычной Java, приведенный еще ниже выполняется за 0.344 секунды. Получается, всего в 11 раз интерпретация медленнее! Если допустить, что на С++ этот код будет выполняться еще в три раза быстрее, чем мой на Java,
Lester>> получается, что ява в 4.3( время вашей программы у меня ) / 11( беру ваш коэффициент - у вас серверная JVM ) / 0.0015 ( нативное время С ) = 260.6 раз медленнее С, так?
tarasv> А если посмотреть в ассемблер который как известно критерий истины? Я процентов на 99% уверен что в вашем аналоге на С тело цикла пустое потому что результаты вычислений не используются за его пределами и оптимизатор просто выкинул содержимое или провел какуюто не менее лихую оптимизацию

при росте ограничения растет время работы - следовательно содержимое выполняется
   
US Сергей-4030 #28.08.2008 20:36  @tarasv#28.08.2008 20:17
+
-
edit
 

Сергей-4030

исключающий третье
★★
Lester>> получается, что ява в 4.3( время вашей программы у меня ) / 11( беру ваш коэффициент - у вас серверная JVM ) / 0.0015 ( нативное время С ) = 260.6 раз медленнее С, так?

Очень вряд ли так получается. Скорее, прав tarasv.
   
US Сергей-4030 #28.08.2008 20:39  @Lester#28.08.2008 20:36
+
-
edit
 

Сергей-4030

исключающий третье
★★
Lester> при росте ограничения растет время работы - следовательно содержимое выполняется

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

tarasv

аксакал

Lester>> получается, что ява в 4.3( время вашей программы у меня ) / 11( беру ваш коэффициент - у вас серверная JVM ) / 0.0015 ( нативное время С ) = 260.6 раз медленнее С, так?
tarasv> А если посмотреть в ассемблер который как известно критерий истины? Я процентов на 99% уверен что в вашем аналоге на С тело цикла пустое потому что результаты вычислений не используются за его пределами и оптимизатор просто выкинул содержимое или провел какуюто не менее лихую оптимизацию

Просто посчитал и теперь уверен на все 100% что код на С не выполняет всех действий внутри цикла - в коде 10 операций не считая присваивания что дает 100млн операций и при времени выполнения 0.015 сек производительности вашего компа 6,6 млрд операций в секунду. Хочу такой-же ;)
   
UA Lester #28.08.2008 20:47  @Сергей-4030#28.08.2008 20:39
+
-
edit
 

Lester

новичок
Lester>> при росте ограничения растет время работы - следовательно содержимое выполняется
Сергей-4030> С чего бы это? С точки зрения компилятора, может быть важно одно действие - инкремент i, ибо оно участвует в сравнении. А остальные - спокойно может и выкинуть. Попробуйте завести какую-нибудь dsum и на каждом проходе прибавляйте туда текущую d.

таки да - так 0.11сек, следовательно Java всего лишь в два раза медленнее? ух :) а мой код( да - еще не полностью рабочий, теперь уйду на функциональность/тестирование/документирование/оформление, но время этого теста не должно будет измениться ) получается всего в 18 раз медленнее нативного
   
US Сергей-4030 #28.08.2008 20:49  @Lester#28.08.2008 19:17
+
-
edit
 

Сергей-4030

исключающий третье
★★
Lester> у меня выполняется уже за 2.0сек, программа Сергея ( без -server ) выполняется на этом тесте за 4.3сек, хотя честно признаюсь для оптимизации пришлось переписать критический код с С++ на голый С,

У меня без "-server" в среднем 2300, с "-server" - в среднем 750, т.е. примерно в три раза быстрее. На вашем компьютере, надо полагать, выполнится за примерно 1.3 сек. Есть еще место для оптимизации. ;) И для корректной работы goto.

Lester> так что аплодирую разработчикам Java - не думал, что Java настолька быстра

Ну, прогресс, то есть, unlike Реконструктор, к Java у вас претензий нет? Остались только к неумехам java-программистам? ;) Если так, то я б заметил, что так-таки пока что наличествует отставание почти в два раза при том, что все-таки Java уступает по быстродействию компилируемым языкам, хоть и не так много. Так что посмотрим, может и по второму пункту ишшо изменится мнение. ;)
   

tarasv

аксакал

tarasv>> А если посмотреть в ассемблер который как известно критерий истины? Я процентов на 99% уверен что в вашем аналоге на С тело цикла пустое потому что результаты вычислений не используются за его пределами и оптимизатор просто выкинул содержимое или провел какуюто не менее лихую оптимизацию
Lester> при росте ограничения растет время работы - следовательно содержимое выполняется

Значит в обеих случаях используется одна и таже оптимизация. Не более того. Я этот оптимизатор не писал но из личной практики древний Ватком в начале 90х прекрасно делала из вот такого
code text
  1.  for(int i=0; i<100000; i++) {
  2.    if(!(i%1000)) {
  3.      some operators
  4.    }
  5.  }

вот такое
code text
  1.  for(int i=0; i<100000; i+=1000) {
  2.      some operators
  3.  }

с тех пор авторы оптимизаторов чтото делали.

Кстати что за компилятор?
   

Lester

новичок
tarasv>>> А если посмотреть в ассемблер который как известно критерий истины? Я процентов на 99% уверен что в вашем аналоге на С тело цикла пустое потому что результаты вычислений не используются за его пределами и оптимизатор просто выкинул содержимое или провел какуюто не менее лихую оптимизацию
Lester>> при росте ограничения растет время работы - следовательно содержимое выполняется
tarasv> Значит в обеих случаях используется одна и таже оптимизация. Не более того. Я этот оптимизатор не писал но из личной практики древний Ватком в начале 90х прекрасно делала из вот такого
tarasv> с тех пор авторы оптимизаторов чтото делали.
tarasv> Кстати что за компилятор?

да - я уже понял, что вы правы, собираю родным компилятором из Visual C++ 2005, пробовал mingw - код в два раза медленнее под виндой получается, думаю еще интеловский попробовать
   
US Сергей-4030 #28.08.2008 20:54  @Lester#28.08.2008 20:47
+
-
edit
 

Сергей-4030

исключающий третье
★★
Lester> таки да - так 0.11сек, следовательно Java всего лишь в два раза медленнее? ух :) а мой код( да - еще не полностью рабочий, теперь уйду на функциональность/тестирование/документирование/оформление, но время этого теста не должно будет измениться ) получается всего в 18 раз медленнее нативного

Ага. И в два раза медленнее моего. ;) А с учетом того, что по вашим вычисления Java в два раза медленнее C++, то ваш алгоритм в четыре раза менее эффективен, чем мой. Я, конечно, не ожидаю, что вы мне будете аплодировать так, как вы к разработчикам Java благосклонны... ;)

ЗЫ Но вы действительно превосходите Реконструктора по способностям к программированию.

ЗЗЫ Но ваш дизайн таки хромает. И заметьте - поскольку мой вариант пока что выглядит получше вашего - это не пустые слова.
   
UA Lester #28.08.2008 21:02  @Сергей-4030#28.08.2008 20:54
+
-
edit
 

Lester

новичок
> Сергей-4030> Ага. И в два раза медленнее моего. ;)

ваш тест без -server у меня отрабатывает за 4.3сек, у вас - 2.3сек, значит мои 2 секунды это около 1.05сек на вашем железе, а 0.75 и 1.05 это не в два раза ;)
   
UA Lester #28.08.2008 21:17  @Сергей-4030#28.08.2008 20:54
+
-
edit
 

Lester

новичок
> А с учетом того, что по вашим вычисления Java в два раза медленнее C++, то ваш алгоритм в четыре раза менее эффективен, чем мой

опять же я сравнивал Java без -server, вы говорите у вас она в три раза быстрее, значит мой алгоритм в 1.43 раза быстрее вашего :Р

П.С. конечно это все не точно - сейчас поставлю на закачку JDK и сравню
П.П.С. опс, сорри - получается у нас алгоритмы работают с одинаковой скоростью
   
Это сообщение редактировалось 28.08.2008 в 21:26

Mishka

модератор
★★★
Lester> при росте ограничения растет время работы - следовательно содержимое выполняется

Может просто гоняться цикл. Но сравнение всё рано не корректное. Надо такой же код на Джаве писать. Плюс С/С++ или Джавы по сравнению с интерпретатором в том, что они имеет оптимизацию, да и посмотри на то же размещение переменных и обращение к ним. В С/С++ и Джаве это делается раз, а обращение к ним происходит практически статически — смещение относительно регистра стека. А в интерпретаторе — поиск по таблице.
   
1 20 21 22 23 24 29

в начало страницы | новое
 
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru