Модераторы: LSD

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> "Скорость" Delphi 
:(
    Опции темы
LSD
Дата 23.3.2008, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15711
Регистрация: 24.3.2004
Где: Dublin

Репутация: 9
Всего: 537



Цитата(Alexeis @  23.3.2008,  18:08 Найти цитируемый пост)
давайте для теста математический алгоритм. Реализуем его на вижуалке или делфях, а затем сравним.

Есть такой алгоритм smile
Предлагаю реализовать игру жизнь.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Zmiy
Дата 24.3.2008, 01:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 3.3.2007

Репутация: нет
Всего: 2



Цитата(Coder @  23.3.2008,  08:49 Найти цитируемый пост)
Если, например, использовать тип string и функции pos, insert, copy, delete для парсинга большого текстового заковыристого файла

ну, мы говорим не о строках, я имею ввиду оптимизацию, в основном, математических расчётов. С++ использует sse, inline функции, макросы. Вот я хотел бы понять, как на Делфи писать быстрый код без этого


Цитата(Alexeis @  23.3.2008,  18:08 Найти цитируемый пост)
Zmiy, давайте для теста математический алгоритм. Реализуем его на вижуалке или делфях, а затем сравним.

Отличная мысль! Сейчас подумаю над алгоритмом
PM MAIL   Вверх
Beltar
Дата 24.3.2008, 09:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 627
Регистрация: 11.1.2006

Репутация: 2
Всего: 7



Цитата

С++ использует sse, inline функции, макросы.


Нафиг макросы, когда inline есть?

Игры на Delphi действительно не пишут в частности из-за оптимизации, откуда там всяким SSE взяться, когда в VCL полно ассемблера. Уж не знаю насколько там SSE позволяет ускорить простейшую математику (посчитать новые координаты объекта, например) с 32-хбитными вещественными. Насчет скорости самого языка, для теоретического случая, что имеем C++ и Pascal компиляторы с одинаковой оптимизацией не скажу. Логично предположить, что разница будет в пределах 2-3%.
Всякие языковые сишные отимизации типа a+=b (упаси от них бог Delphi) вместо a:=a+b, критичные во времена "286 терпимо, 386SX хорошо, а 386DX-40 MHz круто" сейчас роли не играют, и компиляторы могут сами это оптимизировать.

Цитата

Предлагаю реализовать игру жизнь.


Просто посчитать с начальной конфигурации координаты всех "животных" в поколении X?


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. smile(с) я, хотя может и нет
Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере.
PM MAIL   Вверх
Lazin
Дата 24.3.2008, 09:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 4
Всего: 154



Цитата(CompWorm @  23.3.2008,  00:15 Найти цитируемый пост)
я знаю одно могучее приемущество Delphi перед многими другими языками - компиллер всё необходимое запихивает в exe файл, поэтому программы дельфи не требуют ничего дополнительного и прекрасно идут на ВСЕХ компах. 

неоспоримое приемущество
программы на Delphi настолько суровы, что работают на Linux, Mac OS и даже Plan9  smile 

Цитата(kemiisto @  22.3.2008,  23:22 Найти цитируемый пост)
Да ладно уж недостаток. 3 года пишу на Delphi и ни разу потребности в макросах не испытывал. Всегда можно написать функцию с нужным результатом действия. Чем она будет отличаться от макроса?

как всегда забавно читать о недостатках какого-то инструмента, то, что написано человеком, не владеющим этим инструментом )))

Цитата(Beltar @  24.3.2008,  09:01 Найти цитируемый пост)
Игры на Delphi действительно не пишут в частности из-за оптимизации, откуда там всяким SSE взяться, когда в VCL полно ассемблера.

Не один компилятор сам не будет использовать SIMD расширения процессора, это всегда ложится на плечи программиста...
а уж использовать SSE в коде GUI библиотеки (VCL) это нонсенс  smile 

Приемущество С++ в гибкости. Язык шаблонов в С++ Тьюринг полный, соответственно во время компиляции можно выполнить любые вычисления, например преобразовать число из бинарного представления можно с помощью этого шаблона
Код

    template <unsigned long N>
    struct binary {
        static const unsigned int value = (binary<N/10>::value << 1) | N%10;
    };

    template<>
    struct binary<0> {
        static const unsigned int value = 0;
    };

const unsigned i = binary<00001111>::value;
assert( i == 0x0f );

константа i будет вычислена во время компиляции, а не во время выполнения. Delphi так не умеет smile

PM MAIL Skype GTalk   Вверх
Alexeis
Дата 24.3.2008, 10:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 14
Всего: 459



Lazin, это не холивар о возможностях, а о скорости!

Цитата(LSD @  23.3.2008,  20:29 Найти цитируемый пост)
Предлагаю реализовать игру жизнь.

  Какие условия? Какое начальное состояние? Сколько ячеек? Какое графическое отображение? Сколько кадров в / сек? Чего можно юзать чего нет?


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Lazin
Дата 24.3.2008, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 4
Всего: 154



Цитата(Alexeis @  24.3.2008,  10:18 Найти цитируемый пост)
это не холивар о возможностях, а о скорости!

ну правильно, намного быстрее расчитать что-то в compile-time один раз, чем считать каждый раз в run-time  smile 
PM MAIL Skype GTalk   Вверх
Coder
Дата 24.3.2008, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 733
Регистрация: 13.12.2004

Репутация: нет
Всего: 11



Цитата(Lazin @  24.3.2008,  18:44 Найти цитируемый пост)
ну правильно, намного быстрее расчитать что-то в compile-time один раз, чем считать каждый раз в run-time

В таких случаях можно и в run-time одним разом обойтись.
PM MAIL   Вверх
Alexeis
Дата 24.3.2008, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 14
Всего: 459



Lazin, к твоему сведению считать умеют не только шаблоны, а еще и калькулятор smile . Константу можно любую забить и руками. Мне например хватает записи в HEXе. Для этого ничего не нужно преобразовывать. Факториал я могу и на калькуляторе вычислить и забить константу, в крайнем случае создать таблицу значений при старте программы. Ни как и ни на что это не влияет по скорости, а твой любимый билдер 90% бинарного кода реально код скомпилированный из делфийских сорцов делфийским компилятором слинкованный с билдеровским проектом. Так что когда хвалишь скорость билдера не забывай чьи 90% заслуги там  smile .


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
kemiisto
Дата 24.3.2008, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



Профиль
Группа: Участник Клуба
Сообщений: 3292
Регистрация: 29.7.2007

Репутация: 3
Всего: 160



Цитата(Lazin @  24.3.2008,  09:35 Найти цитируемый пост)
как всегда забавно читать о недостатках какого-то инструмента, то, что написано человеком, не владеющим этим инструментом )))

Ни слова о недостатках макросов я не произнес. Я действительно человек в C++ несведующий и посему задал конкретный вопрос: Всегда можно написать функцию с нужным результатом действия. Чем она будет отличаться от макроса? Я жду ответа...



--------------------
PM MAIL WWW GTalk Jabber   Вверх
Mayk
Дата 24.3.2008, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 2
Всего: 134



Цитата(Alexeis @  24.3.2008,  15:43 Найти цитируемый пост)
Ни как и ни на что это не влияет по скорости

Шаблоны могут успешно inline'ится. это влиет на скорость в коде  наподобие
Код

std::sort( arr, arr+arrLength, Comparator() );


Если в дельфи понадобится отсортировать что-либо, она способна заинлайнить компаратор? 
Или будет палить такты процессора на вызов ф-ций?
Как в современном дельфи с этим дело обстоит?

Добавлено @ 12:21
Цитата(kemiisto @  24.3.2008,  15:55 Найти цитируемый пост)

Ни слова о недостатках макросов я не произнес. Я действительно человек в C++ несведующий и посему задал конкретный вопрос: Всегда можно написать функцию с нужным результатом действия. Чем она будет отличаться от макроса? Я жду ответа...

Вызов функции занимает >0 тактов. Расчёт ф-ции занимает >0 тактов.  В отличие от расчетов с помощью шаблонов. Которых во время run-time'а вообще нет.

Хотя может оптимизатор дельфи и способен заменить вызов простых ф-ций на константы.

Это сообщение отредактировал(а) Mayk - 24.3.2008, 12:23


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
LSD
Дата 24.3.2008, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15711
Регистрация: 24.3.2004
Где: Dublin

Репутация: 9
Всего: 537



Цитата(Beltar @  24.3.2008,  09:01 Найти цитируемый пост)
Просто посчитать с начальной конфигурации координаты всех "животных" в поколении X?

Да.

Цитата(Alexeis @  24.3.2008,  10:18 Найти цитируемый пост)
Какие условия? Какое начальное состояние? Сколько ячеек? Какое графическое отображение? Сколько кадров в / сек? Чего можно юзать чего нет?

Графики нет. Просто прочитать начальную конфигурацию из файла, просчитать 1 000 000 циклов, и записать конечное состояние в другой файл. Начальная комбинация скажем планерное ружье (чтобы было постоянное изменение). Размер скажем 100х100. 
Начет того что можно использовать - о чем идет речь?


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Lazin
Дата 24.3.2008, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 4
Всего: 154



Цитата(kemiisto @  24.3.2008,  11:55 Найти цитируемый пост)
Всегда можно написать функцию с нужным результатом действия

обычно макросы не используют для того что-бы  что-то считать, для этого используют функции (компилятор С++ там где надо заинлайнит, а где не надо вызовет эту функцию). Макросы кроме как для условной компиляции использовать не стоит.

Цитата(Alexeis @  24.3.2008,  11:43 Найти цитируемый пост)
Так что когда хвалишь скорость билдера не забывай чьи 90% заслуги там  smile . 

Давно уже не пишу GUI приложения, так что  smile 

Цитата(Alexeis @  24.3.2008,  11:43 Найти цитируемый пост)
Константу можно любую забить и руками.

а лучше пускай компилятор сам за меня считает, а если я где накосячил даст по рукам (пошлет на йух нескончаемой чередой сообщений об ошибках)  smile 

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

P = U*I;

если тип переменной P - не мощность, то код просто не скомпилируется.  smile 
это всего лишь одно простейшее применение шаблонов

если заглянуть в реализацию стандартной библиотеки, то можно много чего интересного увидеть smile
PM MAIL Skype GTalk   Вверх
Beltar
Дата 24.3.2008, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 627
Регистрация: 11.1.2006

Репутация: 2
Всего: 7



В современном Delphi не хватает только шаблонов и не полностью реализована перегрузка операторов для Delphi 4 Win32.
Inline, статич. члены класса появились скорее всего в D 2005.

Цитата

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


Макрос в Си++ это замена в исходнике одного текста другим, что исключает вызов ф-ии. Inline - подстановка в код тела ф-ии с той же целью. Тоже жду комментов, что лучше. Я не пишу на Си++, но примеры, "оптимизации" макросом после которой ошибку ищешь больше времени, чем этот макрос за все время эксплуатации софтины сэкономил, есть в любой книжке по плюсам.

Цитата

ак что когда хвалишь скорость билдера не забывай чьи 90% заслуги там


Я сам как-то не интересовался, но мой знакомый пишущий на Builder'е, и для которого в Паскале тоже букофф много, говорил, что Билдер даже медленнее Delphi. smile 

Цитата

  Какие условия? Какое начальное состояние? Сколько ячеек? Какое графическое отображение? Сколько кадров в / сек? Чего можно юзать чего нет?


Насчет графики я как-то не понимаю, как ее строить и не съест-ли она 99% ресурсов. Что тогда мерить? Да и интересует в первую очередь вывод конечной позиции, которая после нескольких десятков тысяч поколений м/б 3756x5667 клеток, или считаем, что поле ограничено?

Цитата
константа i будет вычислена во время компиляции, а не во время выполнения. Delphi так не умеет 


Правда? И что же это при работе с API все охотно пишут:
Код

const
  WM_MYMESSAGE=WM_USER+1;


 smile 


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. smile(с) я, хотя может и нет
Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере.
PM MAIL   Вверх
Lazin
Дата 24.3.2008, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 4
Всего: 154



Цитата(Beltar @  24.3.2008,  12:51 Найти цитируемый пост)
Я сам как-то не интересовался, но мой знакомый пишущий на Builder'е, и для которого в Паскале тоже букофф много, говорил, что Билдер даже медленнее Delphi

и HelloWorld на билдере больше весит чем на Delphi))
PM MAIL Skype GTalk   Вверх
Beltar
Дата 24.3.2008, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 627
Регистрация: 11.1.2006

Репутация: 2
Всего: 7



Цитата

пошлет на йух нескончаемой чередой сообщений об ошибках


Я плакал со смеху, когда Microsoft Visual C++ в VS 2003 говорил мне, что Internal compile error и пошли вы к Билли, когда на самом деле был type mismatch. smile 

Код

var i:Integer
      f:Float;
begin
i:=f;{В 99% случаев явно бредовый и неоднозначный (можно округлить, а можно просто отсечь дробную часть) код, который C++ считает вполне нормальным}
end;


PS Блин, не могу понять кайфа от расстановки этих фигурных скобок. Это же неудобно. Что бы наСИльники не говорили.

Добавлено через 11 минут и 14 секунд
Цитата

Начальная комбинация скажем планерное ружье (чтобы было постоянное изменение). Размер скажем 100х100. 


Сорри пока писал свой ответ, ваш появился.
Планерное ружье просто генерит бесконечно планеры, которые, если я правильно понял, будут просто разбиваться о стенку. Можно взять, что-нить поинтереснее. Графику можно начальную фигуру мышкой по сетке набирать. В принципе при 100х100 можно попробовать вывести и конец.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. smile(с) я, хотя может и нет
Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила ведения Религиозных войн
Smartov
1. Уважайте собеседника
2. Собеседник != враг
3. Старайтесь воздерживаться от тем вида "Windows Rulez" или "Linux Rulez"

С уважением, Smartov.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Религиозные войны | Следующая тема »


 




[ Время генерации скрипта: 0.1957 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.