[image]

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

 
1 23 24 25 26 27 28 29

Lester

новичок
Lester>> Я спрашивал - Сергей написал, что этого не надо делать
Mishka> Не надо делать 100, обошлись double. А насчёт вычисления точности — я что-то пропустил? Татарин, Сергей, ау?
Lester>> это отдельный случай - и здесь конечно без поиска не обойтись


Lester>> "Точность результатов вычислений определяется точностью задания чисел" - это правило еще в силе?
Сергей-4030> Нет. Достаточно просто double с обычными операциями.
   
+
-
edit
 

Kernel3

аксакал

Mishka> Хых, вообще говоря, и у тебя вариант ill formed программы.
Хе. А ведь точно. Потом стал devExt NULL'ом ициализировать при определнии - прошло. Это, правда, не единственное: ещё дополнительную временную переменную ввёл.
Mishka> Вот в этом моменте у них как раз крыша и едет. :)
Ага. Я вообще не понял, нахрена компилятор в регистр её засунул в этом случае.
   
Это сообщение редактировалось 29.08.2008 в 17:21
US Сергей-4030 #29.08.2008 17:16  @Mishka#29.08.2008 17:07
+
-
edit
 

Сергей-4030

исключающий третье
★★
Lester>> Я спрашивал - Сергей написал, что этого не надо делать
Mishka> Не надо делать 100, обошлись double. А насчёт вычисления точности — я что-то пропустил? Татарин, Сергей, ау?

Я забил на точность, Реконструктор тоже. Татарин зааппрувил. :)
   
Это сообщение редактировалось 29.08.2008 в 17:28
US Сергей-4030 #29.08.2008 17:20  @Mishka#29.08.2008 16:57
+
-
edit
 

Сергей-4030

исключающий третье
★★
Lester>> да, и не сомневаюсь, что Сергей тоже - иначе не получить высокое быстродействие
Mishka> Оно подходит для всего, кроме подстановок. Тут появляется интерпретирующий элемент. Кстати, изначальное условие точности (не 100 циферок, а того, сколько значащих цифр и правила вычисления точности) сильно усложняют жизнь, т.к. это не просто место в памяти, а целый объект. Что сильно замедляет дело и уже промежуточный код не так сильно помогает.

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

bla[trah[a+b]-8]yopyop[18-r2]tratata=[25];

то можно не волноваться. Это, конечно, не статическая переменная получается, но ничего страшного. Всего-навсего массив произвольной размерности, так что "перекомпилировать" на ходу, слава богу, не надо. Вот если б у нас были строковые переменные, тогда да. Тогда был бы жопус вульгарис. А так - фигня, семечки.
   
Это сообщение редактировалось 29.08.2008 в 17:27
US Сергей-4030 #29.08.2008 17:26  @Mishka#29.08.2008 16:57
+
-
edit
 

Сергей-4030

исключающий третье
★★
Mishka> Оно подходит для всего, кроме подстановок. Тут появляется интерпретирующий элемент. Кстати, изначальное условие точности (не 100 циферок, а того, сколько значащих цифр и правила вычисления точности) сильно усложняют жизнь, т.к. это не просто место в памяти, а целый объект. Что сильно замедляет дело и уже промежуточный код не так сильно помогает.

Э, что за беда? У меня и так все переменные - объекты. И значения - тоже объекты, только Immutable. Джава это все понимает и при исполнении развертывает фактически к оптимальному коду. Конечно, все равно какой-то оверхед существует, но он ни грамма не критический, зато траха мозгов на порядок меньше.
   
US Сергей-4030 #29.08.2008 17:34  @Mishka#29.08.2008 16:57
+
-
edit
 

Сергей-4030

исключающий третье
★★
Mishka> А как тогда будет работать код:

У меня он будет работать так: если в скобочках константы, они статически разрешаются и в будущем не вычисляются. Оставшиеся скобочки вычисляются и компонуется новое имя (в runtime, разумеется, не статически). Потом это имя используется. У Лестера, наверное, в конце к тому же придет. Или он оценивает только выражения вида array[i][j]...[z] Если так - тестирование обломается.

ЗЫ Но это все фигня. На мой взгляд, прямо сейчас у него другие проблемы, с goto. ;) И сердце мне подсказывает, что с его текущим дизайном кода, работающего с goto эти проблемы надолго. Тем более, что на работе напрягают. ;)

Впрочем, может и не так печально, не вдавался в подробности. Сделает - поглядим. Его код много лучше, чем Реконструкторов.
   
US Сергей-4030 #29.08.2008 17:39  @Lester#29.08.2008 16:58
+
-
edit
 

Сергей-4030

исключающий третье
★★
Lester> поставил JDK - у Сергея 1.42сек против моих 2-х

А вот так! ;)

ЗЫ Впрочем, все знают, что тормозная Java не подходит для написания интерпретаторов.
   
US Mishka #29.08.2008 21:41  @Сергей-4030#29.08.2008 17:20
+
-
edit
 

Mishka

модератор
★★★
Сергей-4030> Да не, в подстановках тоже не все так плохо. Потому как по спецификациям единственное место, где могут появиться подстановки - это константы и переменные. Т.е прямо это не указано, но следует из описания. Так что если твой код правильно интерпретирует это:
Сергей-4030> bla[trah[a+b]-8]yopyop[18-r2]tratata=[25];

Ну, дык, правильно. Получается введение переменной.

Сергей-4030> то можно не волноваться. Это, конечно, не статическая переменная получается, но ничего страшного. Всего-навсего массив произвольной размерности, так что "перекомпилировать" на ходу, слава богу, не надо. Вот если б у нас были строковые переменные, тогда да. Тогда был бы жопус вульгарис. А так - фигня, семечки.

Т.е. ты тоже выделяешь на ходу память под все элементы? Простой тест на на 10 мерный массив на 10 уже не пройдёт? А как ты проинтерпретируешь это?
code text
  1. {
  2.   i1=101.1E0B10;
  3.   i2=101.1E0B2
  4.   i3=101.1E0B3;
  5.  
  6.   a[i1]=15;
  7.   print(a[i1]);
  8.   a[i2]=16;
  9.   print(a[i2]);
  10.   a[i3]=a[i1]+a[i2];
  11.   print(a[i3]);
  12.   print(a[i2]):
  13.   print(a[i3])
  14. }


Я понимаю, что все a-чего-то должны ссылаться на одну и ту же переменную - a101.
   
US Mishka #29.08.2008 21:43  @Сергей-4030#29.08.2008 17:26
+
-
edit
 

Mishka

модератор
★★★
Сергей-4030> Э, что за беда? У меня и так все переменные - объекты. И значения - тоже объекты, только Immutable. Джава это все понимает и при исполнении развертывает фактически к оптимальному коду. Конечно, все равно какой-то оверхед существует, но он ни грамма не критический, зато траха мозгов на порядок меньше.

Это скорость исполнения. :) Компилятор с С/С++ для даблов генерит одну команду для доступа, а не вызов метода объекта.
   
US Mishka #29.08.2008 21:54  @Сергей-4030#29.08.2008 17:34
+
-
edit
 

Mishka

модератор
★★★
Сергей-4030> У меня он будет работать так: если в скобочках константы, они статически разрешаются и в будущем не вычисляются. Оставшиеся скобочки вычисляются и компонуется новое имя (в runtime, разумеется, не статически). Потом это имя используется. У Лестера, наверное, в конце к тому же придет. Или он оценивает только выражения вида array[i][j]...[z] Если так - тестирование обломается.

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


Сергей-4030> ЗЫ Но это все фигня. На мой взгляд, прямо сейчас у него другие проблемы, с goto. ;) И сердце мне подсказывает, что с его текущим дизайном кода, работающего с goto эти проблемы надолго. Тем более, что на работе напрягают. ;)

Ну, я код не смотрел вообще, поэтому тут не копенгаген. Но проблем с польской записью может и не быть, если провести некоторые действия. :)

Сергей-4030> Впрочем, может и не так печально, не вдавался в подробности. Сделает - поглядим. Его код много лучше, чем Реконструкторов.

Я Гошин видел только то, что тут цитировали. :)
   
US Сергей-4030 #29.08.2008 22:23  @Mishka#29.08.2008 21:41
+
-
edit
 

Сергей-4030

исключающий третье
★★
Mishka> Т.е. ты тоже выделяешь на ходу память под все элементы? Простой тест на на 10 мерный массив на 10 уже не пройдёт? А как ты проинтерпретируешь это?

Нет конечно, бог с тобой, нахрена? :) Только отдельные элементы, по мере надобности.

Mishka> Я понимаю, что все a-чего-то должны ссылаться на одну и ту же переменную - a101.

Да, конечно.
   
US Сергей-4030 #29.08.2008 22:27  @Mishka#29.08.2008 21:43
+
-
edit
 

Сергей-4030

исключающий третье
★★
Сергей-4030>> Э, что за беда? У меня и так все переменные - объекты. И значения - тоже объекты, только Immutable. Джава это все понимает и при исполнении развертывает фактически к оптимальному коду. Конечно, все равно какой-то оверхед существует, но он ни грамма не критический, зато траха мозгов на порядок меньше.
Mishka> Это скорость исполнения. :) Компилятор с С/С++ для даблов генерит одну команду для доступа, а не вызов метода объекта.

Не, тут все нормально. Если Java видит, что это хотспот, она его и прекомпилирует и даже развернет в инлайн функцию. Т.е.

a=a+1;

где a - объект типа Integer (именно объект, а не int) на практике развернется в одну команду, чего-то типа

inc @a

Java в этом смысле очень умная. :) Развертывание в инлайн она делает на раз.
   
US Сергей-4030 #29.08.2008 22:34  @Mishka#29.08.2008 21:54
+
-
edit
 

Сергей-4030

исключающий третье
★★
Сергей-4030>> У меня он будет работать так: если в скобочках константы, они статически разрешаются и в будущем не вычисляются. Оставшиеся скобочки вычисляются и компонуется новое имя (в runtime, разумеется, не статически). Потом это имя используется. У Лестера, наверное, в конце к тому же придет. Или он оценивает только выражения вида array[i][j]...[z] Если так - тестирование обломается.
Mishka> Тогда, если имя новое, то индексом не обойтись в промежуточном коде. Т.е., ты реально узнаёшь имя переменной только на шаге исполнения. Значит, если не использовать индексы в многомерном массиве, придётся искать имя переменной в таблице.

Да, конечно, вне сомнений. Я и сказал - новое имя компонуется runtime. Но это все равно не такая большая проблема - объединить несколько строк и по хэш-коду получившейся строки найти переменную. Но, конечно, на порядок как минимум медленнее чем просто взять статическую переменную по адресу.

Сергей-4030>> ЗЫ Но это все фигня. На мой взгляд, прямо сейчас у него другие проблемы, с goto. ;) И сердце мне подсказывает, что с его текущим дизайном кода, работающего с goto эти проблемы надолго. Тем более, что на работе напрягают. ;)
Mishka> Ну, я код не смотрел вообще, поэтому тут не копенгаген. Но проблем с польской записью может и не быть, если провести некоторые действия. :)

Не, там не с польской записью, там с goto. Типа:

code text
  1. {
  2.       i=0;
  3.       i=20;
  4.       while(i<10) {
  5.            tralala;
  6.            :next:;
  7.            i=i+1;
  8.            print(i);
  9.       }
  10.       while(i<30) {
  11.            tralala;
  12.            i=i+1;
  13.            if(i==25)
  14.                goto next;
  15.            print(i);
  16.       }
  17. }



Сергей-4030>> Впрочем, может и не так печально, не вдавался в подробности. Сделает - поглядим. Его код много лучше, чем Реконструкторов.
Mishka> Я Гошин видел только то, что тут цитировали. :)

Не гляди лучше, тебя, как старого компиляторщика, кондрашка хватит. ;)
   
US Mishka #30.08.2008 01:41  @Сергей-4030#29.08.2008 22:27
+
-
edit
 

Mishka

модератор
★★★
Сергей-4030> Не, тут все нормально. Если Java видит, что это хотспот, она его и прекомпилирует и даже развернет в инлайн функцию. Т.е.
Сергей-4030> a=a+1;
Сергей-4030> где a - объект типа Integer (именно объект, а не int) на практике развернется в одну команду, чего-то типа
Сергей-4030> inc @a
Сергей-4030> Java в этом смысле очень умная. :) Развертывание в инлайн она делает на раз.

Ты уверен? ЕМНИА, Integer non-mutable.
   
US Сергей-4030 #30.08.2008 01:51  @Mishka#30.08.2008 01:41
+
-
edit
 

Сергей-4030

исключающий третье
★★
Mishka> Ты уверен? ЕМНИА, Integer non-mutable.

Да, не mutable, но в данном случае неважно, я имел в виду - раскладка в inline делается спокойно. Хотя, ты знаешь, не удивлюсь, если стандартные классы даже и поглубже оптимизируются и строчки

Integer i = new Integer();

i = i+1;


в Java 6 скомпилируются в точности в ту самую одну команду.
   

tarasv

аксакал

Mishka> Таки немного разная терминология. Смотри:
Mishka> Т.е. они называют индуктивной ту, которую Утпал называет индексной. Мы же называли индуктивной ту переменную, которая введена компилятором (индуктирована), а переменную цикла реальную — индексной.

Да, очередной раз подтверждается народная мудрость о том что для начала надо договориться о терминологии, а потом обсуждать проблему ;)
   
UA Lester #30.08.2008 09:17  @Сергей-4030#29.08.2008 22:34
+
-
edit
 

Lester

новичок
Сергей-4030> Не, там не с польской записью, там с goto. Типа:
code text
  1. {
  2.       i=0;
  3.       i=20;
  4.       while(i<10) {
  5.            tralala;
  6.            :next:;
  7.            i=i+1;
  8.            print(i);
  9.       }
  10.       while(i<30) {
  11.            tralala;
  12.            i=i+1;
  13.            if(i==25)
  14.                goto next;
  15.            print(i);
  16.       }
  17. }


у меня выдает

21.000000
22.000000
23.000000
24.000000
26.000000
27.000000
28.000000
29.000000
30.000000

вроде правильно, насчет работы - да ж%па полная, делаю редактор/генератор отчетов - сейчас надо реализовать вставку подотчетов, причем вложиться до понедельника, но зато потом будет больше свободного времени
   
UA Lester #30.08.2008 09:37  @Сергей-4030#29.08.2008 22:27
+
-
edit
 

Lester

новичок
Сергей-4030> Java в этом смысле очень умная. :) Развертывание в инлайн она делает на раз.

в отличие от msv c++ - явное указание, что это inline функция и директива компилятора делать inline все что можно - 0 результата, после выноса функции в макрос - стабильный прирост скорости в 0.2 сек( из таких ньюансов и приходится выдирать драгоценные доли секунды ), но если убрать оптимизацию inline работает и дает прирост скорости, но ес-но общая скорость значительно меньше
   
RU Balancer #30.08.2008 18:36  @Сергей-4030#30.08.2008 01:51
+
-
edit
 

Balancer

администратор
★★★★★
Сергей-4030> Да, не mutable, но в данном случае неважно, я имел в виду - раскладка в inline делается спокойно.

Замечу, что у нас в L2Fortress профайлинг показывает, что преобразования, типа Integer.value() или new Integer(int) жрут очень заметную часть ресурсов. Точных цифр не упомню...

При этом - ничего лишнего. Integer только там, где нужны ссылочные типы, всё остальное - int. Также дело обстоит с Short/short и Byte/byte.
   
US Сергей-4030 #30.08.2008 18:57  @Balancer#30.08.2008 18:36
+
-
edit
 

Сергей-4030

исключающий третье
★★
Сергей-4030>> Да, не mutable, но в данном случае неважно, я имел в виду - раскладка в inline делается спокойно.
Balancer> Замечу, что у нас в L2Fortress профайлинг показывает, что преобразования, типа Integer.value() или new Integer(int) жрут очень заметную часть ресурсов. Точных цифр не упомню...
Balancer> При этом - ничего лишнего. Integer только там, где нужны ссылочные типы, всё остальное - int. Также дело обстоит с Short/short и Byte/byte.

Может быть, стоит поэкспериментировать просто с автобохингом. Это же, теоретически, очень оптимизируемая область.

Впрочем, вот:

code text
  1.         public static void intObjects() {
  2.             long begin=(new Date()).getTime();
  3.  
  4.             Integer i=0;
  5.             while(i<numComparisons) {
  6.                 i++;
  7.                 if(i%10==0)
  8.                         i=i+2;
  9.             };
  10.  
  11.             long end=(new Date()).getTime();
  12.             System.out.println("intObjects:"+ (end-begin));
  13.         }
  14.        
  15.         public static void rawInts() {
  16.             long begin=(new Date()).getTime();
  17.  
  18.             int i=0;
  19.             while(i<numComparisons) {
  20.                 i++;
  21.                 if(i%10==0)
  22.                         i=i+2;
  23.             };
  24.  
  25.             long end=(new Date()).getTime();
  26.             System.out.println("rawInts:"+ (end-begin));
  27.         }
  28.        
  29.         public static void main(String[] args) {
  30.                 rawInts();
  31.                 intObjects();
  32.         }


Вывод программы:

rawInts:6453
intObjects:17735

Интересно, что если строку if(i%10==0) не вставлять, то первый вариант оптимизируется начисто, время исполнения - 0, а второй - остается вычисляемым.

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

ЗЫ Не, оказывается, в последнем варианте у меня и так уже Double не используется, только double. Абидна.
   
RU Alexandrc #01.09.2008 16:51
+
-
edit
 

Alexandrc

аксакал

Сорри за оффтоп, но это связано с последними постингами ;)
Скользкие места С++. Как избежать проблем при проектировании и компиляции ваших программ

Вы держите в руках руководство по тому, как не допускать и исправлять 99% типичных, разрушительных и просто любопытных ошибок при проектировании и реализации программ на языке C++. Эту книгу можно рассматривать также, как взгляд посвященного на нетривиальные особенности и приемы программирования на C++.
Обсуждаются как наиболее распространенные "ляпы", имеющиеся почти в любой программе на C++, так и сложные ошибки в использовании синтаксиса, препроцессора, преобразований типов, инициализации, управления памятью и ресурсами, полиморфизма, а также при проектировании классов и иерархий. Все ошибки и их последствия обсуждаются в контексте. Подробно описываются способы разрешения указанных проблем.

Автор знакомит читателей с идиомами и паттернами проектирования, с помощью которых можно решать типовые задачи. Читатель также узнает много нового о плохо понимаемых возможностях C++, которые применяются в продвинутых программах и проектах.
В книге рассказывается, как миновать наиболее серьезные опасности, подстерегающие программиста на C++.

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

Автор: Дьюхэрст С.Х.
Издательство: ДМК-Пресс
Год издания: 2006
Страниц: 264
ISBN: 5-94074-083-9
Язык: русский
Формат: DJVU
Размер: 9.41 Мб
 

Ссылка запрещена по требованию [показать]

Dewhurst_C__.rar http://alexnnn.rusfolder.net/files/7927796

alexnnn.rusfolder.net/files - бесплатный хостинг файлов. У нас вы можете бесплатно разместить файл до 1 Гб. Количество и время хранения файлов не ограничены. Файл номер 7927796 удален. File is removed. '; if ( $.browser.mozilla ) { var iframe = document.getElementById('custom-top-iframe'); iframe.contentWindow.location.href = iframe.src; iframe.src = iframe.src; } } function iframeDoc(iframeNode) { if ( iframeNode.contentDocument ) { return iframeNode.contentDocument; } if ( iframeNode.contentWindow ) { return iframeNode.contentWindow.document; } return iframeNode.document; } function writeToIframe(code) {… // Дальше — alexnnn.ifolder.ru
 
   
US Сергей-4030 #02.09.2008 23:16  @Lester#30.08.2008 09:17
+
-
edit
 

Сергей-4030

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

Уже вроде и не понедельник. Как, где же наконец-то бессмертное творение, которое докажет кошмарные преимущества C++ в интерпретаторостроении, возможности, рядом с которыми Java бледнеет и теряет сознание? ;)

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

PPS Хотя таки да, да, признаю - Лестер более квалифицирован, чем Реконструктор. Но все ж, когда будет результат, если уж подрядились? Для задачи, которая уже решена, мал-мала документирована и опубликована - чего-то подозрительная задержка... То есть, в смысле изначального пари уже ничего не поменяется, тут уже не про пари разговор а вообще.
   
US Сергей-4030 #04.09.2008 19:19
+
-
edit
 

Сергей-4030

исключающий третье
★★
Ну вот... Уже и изначальные реконструкторовы сроки прошли, и Лестеровские... а все тишина. М-да... ;)

ЗЫ C другой стороны, это нам, глупым джавистам, делать нехрен целый день, а сишники - они заняты производительным трудом. ;)
   
RU Alexandrc #05.09.2008 12:03
+
-
edit
 

Alexandrc

аксакал

Подожди, там наверняка сперва надо оптимизировать сам алгоритм, а потом еще раз, но уже под компилятор ;)

PS Я давно уж в руки С/С++ не брал, однако в спаме лиретатурка об оптимизации кода для компилятора регулярно пробегает :)
   
US Сергей-4030 #05.09.2008 18:23  @Alexandrc#05.09.2008 12:03
+
-
edit
 

Сергей-4030

исключающий третье
★★
Alexandrc> Подожди, там наверняка сперва надо оптимизировать сам алгоритм, а потом еще раз, но уже под компилятор ;)

Да, собственно, я не против ни грамма. Но показательно. ;)
   
1 23 24 25 26 27 28 29

в начало страницы | новое
 
Поиск
Поддержка
Поддержи форум!
ЯндексЯндекс. ДеньгиХочу такую же кнопку
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru