Часовой пояс: UTC + 3 часа




Форум закрыт Новая тема / Эта тема закрыта, вы не можете редактировать и оставлять сообщения в ней. Закрыто  Сообщений: 77 • Страница 4 из 4<  1  2  3  4
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

Member
Статус: Не в сети
Регистрация: 15.02.2009
Откуда: Лангепас
Psilon писал(а):
В языках с норм jit'ом скорость выше, чем у компилируемых языков.

Смотря для каких языков и для каких задач.
Ещё в студенчестве мой сокурсник спаял себе Z-80 в мыльнице. В епромку вшил прогу для выполнения на нём lisp-программ (если кто не знает, то весь лисп можно реализовать в виде 5 элементарных (атомарных) инструкций), при этом эта мыльница была совместима с текущей версией common lisp`a по байт-коду. У него волосы на голове зашевелились, когда его мыльница выполняла lisp-проги быстрее реализации common-lisp на intel 286 12Mhz в пять раз. И всё это благодаря реализации базовых опреаций на asm`e, а не на С.



Партнер
 

Member
Статус: Не в сети
Регистрация: 20.03.2011
Откуда: Москва
oxy мы говорим про промышленность или про единичных энтузиастов? Если последнее, то я и сам на С пописываю иногда, а если о первом, то оптимизировать команды, переводя с высокоуровневых ЯП на асм никто не будет, т.к. а) геморрой, б) потеря совместимости (куча разных процессоров, синтаксис Intel, AT&T) и переносимости в) трудности в отладке.

_________________
I would tell you a joke about UDP, but you probably wouldn't get it.


 

Member
Статус: Не в сети
Регистрация: 30.01.2012
Psilon писал(а):
RomasAlmighty любой jit наголову быстрее любых двоичных компиляторов. Разве что JVM тормознутое Г, но это проблема самого языка. В языках с норм jit'ом скорость выше, чем у компилируемых языков.
скорость выполнения - не намного, скорость разработки - быстрее, если всё есть во фреймворке, память - пысэц сколько нужно

_________________
Считать ли близким каждого недалёкого человека?
Intel Inside is not trademark - it's a WARNING!!!


 

Member
Статус: Не в сети
Регистрация: 18.12.2003
Цитата:
jit наголову быстрее любых двоичных компиляторов

Это примерно также, как быть более католиком чем Папа Римский :D
Ох уж эти жертвы рекламы :D
А то что,
Цитата:
JVM тормознутое Г
- так вот она, правда жизни. А не реклама

_________________
Сам себе режиссёр


 

Member
Статус: Не в сети
Регистрация: 18.11.2006
Откуда: Арх-к - Москва
Я бы взял китайский J7-2499c какой-нить, который вставляется в ам2+ сокеты, да с производительностью большей чем у корки, а ценой как у 10 пар китайских носков))

Ну а про асм вы чет тут заговорили, асм сила, что уж тут, но кодить на нем уже почти никто не умеет

_________________
BF3, WoT - Kalasheg
Intel i3-8350К (5.0 1.38)\Archon\Asrock z370 pro4\16 Gb Hynix\RX480\Samsung SSD 850 EVO 250GB\Logitech G35 Headset\BenQ XL2420T


 

Member
Статус: Не в сети
Регистрация: 20.03.2011
Откуда: Москва
sop18 я уже привел выше пример, один и тот же код на C# и С++ - C# быстрее. Правда жрет в 10 раз больше памяти, но что поделать.
Цитата:
скорость выполнения - не намного, скорость разработки - быстрее, если всё есть во фреймворке, память - пысэц сколько нужно

скорость разработки - особенно гуи - быстрее на порядки, можно сказать (с применением ASP.Net, WPF, визуализация, которая тут делается за дни, на плюсах занимает месяцы, я не шучу). Конечно, на плюсах оно летало бы и жрало 640к, но багов в нем было бы побольше (не может человек наваять столько кода и не совершить ошибок). Что касается памяти: неприятно, но серьезной проблемой это я не считаю, учитывая, что плашка на 8гб стоит 700 рублей.
sop18 писал(а):
А то что,
Цитата:
JVM тормознутое Г
- так вот она, правда жизни. А не реклама

все jit'ы по-вашему тормознутое УГ? Так вот пруф (не считая вышеприведенной гонки между C# и С++) http://habrahabr.ru/post/143147/
алсо стена текста (короткое содержание: jit может компилировать учитывая такую информацию, которую в статическом компиляторе получить заранее невозможно [например, точная марка процессора и точное знание, какие инструкции он поддерживает]):
clr via C# писал(а):
Полезно также знать, что JITкомпилятор CLR оптимизирует машинный код
аналогично компилятору неуправляемого кода C++. И опять же: создание опти
мизированного кода занимает больше времени, но производительность его бу
дет гораздо выше, чем неоптимизированного.
Примечание Есть два параметра компилятора C#, влияющих на опти
мизацию кода — /optimize и /debug. В приведенной ниже таблице пока
зано их влияние на качество ILкода, созданного компилятором C#, и ма
шинного кода, сгенерированного JITкомпилятором.
Разработчики с опытом программирования на неуправляемых C/C++ наверняка
заинтересуются, как это сказывается на производительности. В конце концов,
неуправляемый код компилируется для конкретного процессора и при вызове
просто исполняется. В управляемой же среде компиляция производится в два этапа.
Сначала компилятор проходит исходный код и переводит его в IL. Но для испол
нения сам ILкод нужно перевести в машинные команды в период выполнения,
что требует дополнительной памяти и процессорного времени.
Поверьте: я сам из тех, кто программирует на C/C++, и, переходя на CLR, я до
статочно скептически рассматривал все эти дополнительные издержки. Вторая
стадия компиляции, имеющая место в период выполнения, снижает скорость и
требует дополнительной динамической памяти — с этим не поспоришь. Однако
Microsoft проделала большую работу, чтобы свести эти издержки к минимуму.
Примечание При создании неоптимизированного ILкода компилятор
C# создает в коде команды NOP (nooperation — «пустая команда») — они
нужны для поддержки функции «редактирование и продолжение выпол
нения» в процессе отладки. Также команды NOP облегчают отладку кода
за счет расстановки точек останова на управляющих командах, таких как
for, while, do, if, else, а также блоках try, catch и finally. Предполагают, что
это дополнительная возможность платформы, но лично меня эти коман
дыпустышки часто раздражали, когда при пошаговой отладке кода при
ходилось выполнять их по одной. Создавая оптимизированный код, ком
пилятор C# удаляет команды NOP.
При создании нового проекта на C# в Visual Studio отладочная вер
сия (Debug) собирается с параметрами /optimize и /debug:full, а версия
Release — с параметрами /optimize+ и /debug:pdbonly.
Впрочем, независимо от этих параметров при подключении отлад
чика кпроцессу, поддерживающему CLR, для облегчения отладки JIT
компилятор всегда создает неоптимизированный машинный код. Ясно,
что производительность такого кода ниже.
14 Часть I Основы CLR
Если вы тоже скептик, сами создайте приложение и проверьте его производи
тельность. Кроме того, можете взять для этих целей какоенибудь нетривиальное
приложение от Microsoft или другого разработчика. Я думаю, вас удивит, насколько
быстродействие высоко на самом деле.
Трудно поверить, но многие (включая меня) считают, что управляемые приложения могут работать производительнее неуправляемых, и тому есть масса
причин. Взять хотя бы тот факт, что превращая ILкод в команды процессора в
период выполнения, JITкомпилятор располагает более полными сведениями о
среде выполнения, чем компилятор неуправляемого кода. Вот особенности, ко
торые позволяют управляемому коду «опередить» неуправляемый.
JITкомпилятор может обнаружить факт выполнения приложения на Pentium 4
и сгенерировать машинный код, полностью использующий все преимущества
особых команд этого процессора. Неуправляемые приложения обычно ком
пилируют в расчете на среднестатистический процессор, избегая специ
фических команд, которые заметно повышают производительность приложе
ния на новейших процессорах.
JITкомпилятор может обнаружить, что определенное выражение на конкрет
ной машине всегда равно false. Например, посмотрим на метод с таким кодом:
if (numberOfCPUs > 1) {
...
}
Здесь numberOfCPUs — число процессоров. Код указывает JITкомпилято
ру, что для машины с одним процессором не нужно генерировать никаких
машинных команд. В этом случае машинный код оптимизирован для конкрет
ной машины: он короче и выполняется быстрее.CLR может проанализировать выполнение кода и перекомпилировать ILкод в
команды процессора во время выполнения приложения. Перекомпилирован
ный код может реорганизовываться с учетом обнаруженных некорректных
прогнозов ветвления.
Это лишь малая часть аргументов в пользу того, что управляемый код будуще
го будет исполняться лучше сегодняшнего неуправляемого. Как я сказал, произ
водительность и сейчас очень неплохая для большинства приложений, а со вре
менем ситуация только улучшится.
Если ваши эксперименты покажут, что JITкомпилятор CLR не обеспечивает
нужную производительность, рекомендую воспользоваться утилитой NGen.exe,
поставляемой с .NET Framework SDK. NGen.exe компилирует весь ILкод выбран
ной сборки в машинный и сохраняет его в дисковом файле. При загрузке сборки
в период выполнения среда CLR автоматически проверяет наличие предварительно
скомпилированной версии сборки и, если она есть, загружает скомпилированный
код, так что компиляция в период выполнения не производится. Заметьте, что
NGen.exe не ориентируется на конкретную среду выполнения и генерирует код
для среднестатистической машины; по этой причине созданный утилитой код не
столь оптимизирован, как произведенный JITкомпилятором. Подробнее об
NGen.exe я расскажу далее.

_________________
I would tell you a joke about UDP, but you probably wouldn't get it.


 

Member
Статус: Не в сети
Регистрация: 15.02.2009
Откуда: Лангепас
Psilon писал(а):
мы говорим про промышленность или про единичных энтузиастов?

Сорри если непонятно выразился. Я имел ввиду не энтузиастов. А пример "правильного" подхода к проектированию и оптимизации. Критический кусок кода был реализован чуть ли не аппаратно (asm на z-80)

Тут заикались о профилировщиках - ни один профайлер не выправит ситуёвину с неверным проектированием всей системы и отдельных алгоритмов в частности (однопоточность в играх).
В качестве примера - реализация бинарного дерева обычным "ученическим" подходом (элемент и два указателя на листья-потомки) в 10 раз медленнее, чем реализация того же дерева при помощи динамического (или статического, но с избытком по размеру) массива, где вместо указателя используется индекс. Тут ни один профайлер не поможет. (в качестве примера можно посмотреть реализацию zlib или ФС ext2/3/4 например). И тут неважно на чём писать.

1. Постановка задачи
2. Проектирование решения (тут и закладываются основы будущего быстродействия)
3. Выбор языка программирования исходя из первых 2х пунктов. (опять же - если пишем ядро ОС то нечего и думать о С#, если пишем MS Word - выбираем на свой вкус и цвет, хоть жабу как в openofic`е, который тормозит в винде, а под линухом работает так же медленно как и MS office - сам сравнивал на недобуке с Atom N270+1Гб DDR2)
4. Реализация с использованием в критических местах (они видны из проекта) оптимизированных алгоритмов (от среды программирования тут мало что зависит)
5 профилирование, отладка по циклу п 4 пока не достигнем нужного результата.


 

Member
Статус: Не в сети
Регистрация: 20.03.2011
Откуда: Москва
oxy в данном конексте я имел ввиду программирование в узком смысле, т.н. кодирование. Ну а если ошибка совершена на этапе проектирования, естественно никакой профайлер не поможет. Он нужен для оптимизации языковых средств, а не для исправления алгоритма...
Цитата:
качестве примера - реализация бинарного дерева обычным "ученическим" подходом (элемент и два указателя на листья-потомки) в 10 раз медленнее, чем реализация того же дерева при помощи динамического (или статического, но с избытком по размеру) массива

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

_________________
I would tell you a joke about UDP, but you probably wouldn't get it.


 

Member
Статус: Не в сети
Регистрация: 15.02.2009
Откуда: Лангепас
Psilon писал(а):
Динамический массив - это обычный линейный список.

ответ неверный.
Линейный список редко располагает элементы друг за другом. Они могут быть в любом месте кучи и обращаться к ним по индексу чаще всего нет возможности.
Динамический массив гарантировано располагает элементы как в обычном массиве один за другим. Выбор размера на который массив "растёт" или "худеет" весьма нетривиальная задача и неверный выбор этого размера может крайне плачевно сказаться на производительности.

Я не имею ввиду некие java машины и тп. А собственную реализацию массива на с++. Некоторые либы вроде STL так же предоставляют эти массивы, но тут надо знать КАК они это делают, дабы не создать тормозного монстра.

Опять же это только пример решения (бинарное дерево)
.
Если писать на лиспе - то тут наоборот надо забыть о существовании массивов. В этом языке список или дерево будут быстрее массива. Ведь сам лисп - это список. И применять соответственно лисп по назначению, а не писать на нём архиватор zip.

Всегда надо думать об инструментах и их возможностях. И выбирать их исходя из задачи. Не забивать болт молотком, а гвоздь отвёрткой.


 

Member
Статус: Не в сети
Регистрация: 12.12.2011
Откуда: Самарская обл
Фото: 11
Psilon писал(а):
мы говорим про промышленность или про единичных энтузиастов? Если последнее, то я и сам на С пописываю иногда, а если о первом, то оптимизировать команды, переводя с высокоуровневых ЯП на асм никто не будет, т.к. а) геморрой, б) потеря совместимости (куча разных процессоров, синтаксис Intel, AT&T) и переносимости в) трудности в отладке.

Мы говорим о энтузиастах от промышленности.
по вашим пунктам:
а) у них спец транслятор.
б) у них проц 1 - Эльбрус.
в) это да, есть.

_________________
Hard work - Hard play!
ищу корпус GMC High Five. или аналог с передней панелью НЕ ИЗ ДРУШЛАКА и 5 карлсонами.


 

Member
Статус: Не в сети
Регистрация: 30.01.2012
Psilon писал(а):
скорость разработки - особенно гуи - быстрее на порядки,
я дельфист :) Мне не надо сравнивать C и C#. Кстати, игру буду писать на нативной Делфи именно из-за количества памяти.

Psilon писал(а):
с применением ASP.Net, WPF
ниасилил. аспнет на простых задачах, но под высокой нагрузкой хуже пыха, а впф пытался изучать, но, имхо, пока что недостатки перевешивают достоинства.

Psilon писал(а):
Что касается памяти: неприятно, но серьезной проблемой это я не считаю, учитывая, что плашка на 8гб стоит 700 рублей
не у всех есть больше 4Г. К тому же, 4Г не подходит ни к х32 (всё не видит), ни к х64 (жрёт столько, что выгоднее поставить ос х32).
3dsmax, maya, zbrush и прочие. Тут много памяти не бывает и не только нужно ставить оси х64 и наращивать озу, но и, имхо, хоть немного оптимизировать программы, чтобы озу не требовалось терабайтами. Это в районе пожелания, не знаю как вышеперечисленное написано на самом деле :)
Фотошоп. Недавно нужно было увеличить пару картинок для печати, на 16Г озу потребовалось 20Г свопа. Обрабатывал по одной пикче.
Вообще - любые программы обработки большого количества данных.
Наконец-то подошли к играм. Если известный вам "чайник" *поднимает правую лапу* будет писать свою игру "в лоб", то 50-70% игрового пространства нагнёт квартет топовых видюх и не меньше 64Г озу. Дотнет хорош, но большие объёмы занимаемой памяти практически убивают игру. Как и отсутствие оптимизации на уровне алгоритмов.

Psilon писал(а):
jit может компилировать учитывая такую информацию, которую в статическом компиляторе получить заранее невозможно
это в теории и рекламе. А на практике из плюсов на текущий момент лишь уменьшается количество ошибок человеком. Верю, что допилят до желаемого, но только если Сами-Знаете-Кто не забросит недавно активно продвигаемое Сами-Знаете-Что (как прогнозируют АНАЛитики) Сами-Знаете-Куда :) А пока - дотнет для бизнеса да и то не всегда (бывают глюки).

Psilon писал(а):
например, точная марка процессора и точное знание, какие инструкции он поддерживает
есть микроскопическая оптимизация под интел и нулевая под амд. До версии 3.5 (фз что изменилось в 4.5) не было использования мультимедиа инструкций (SSE и т.п. Тем более под Були). По кр. мере это совсем не заметно

oxy писал(а):
если пишем ядро ОС то нечего и думать о С#
есть оси и на C#, но основа всё равно нативная (линуксовый загрузчик)

_________________
Считать ли близким каждого недалёкого человека?
Intel Inside is not trademark - it's a WARNING!!!


 

Member
Статус: Не в сети
Регистрация: 12.12.2011
Откуда: Самарская обл
Фото: 11
DTy писал(а):
я дельфист

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

_________________
Hard work - Hard play!
ищу корпус GMC High Five. или аналог с передней панелью НЕ ИЗ ДРУШЛАКА и 5 карлсонами.


 

Member
Статус: Не в сети
Регистрация: 15.02.2009
Откуда: Лангепас
RomasAlmighty писал(а):
есть оси и на C#, но основа всё равно нативная (линуксовый загрузчик)

Не представляю подсистему памяти или драйвера ФС или планировщик на C#. Максимум C++, и то без использования исключнений. Можно сЦылочку на енти чудооси?


 

Member
Статус: Не в сети
Регистрация: 15.10.2012
hotrod

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


 

Member
Статус: Не в сети
Регистрация: 20.03.2011
Откуда: Москва
DTy писал(а):
скорость разработки - особенно гуи - быстрее на порядки,
я дельфист :) Мне не надо сравнивать C и C#. Кстати, игру буду писать на нативной Делфи именно из-за количества памяти.

Я раньше писал на дельфи около двух лет. Что сказать: тяжеловатый по синтаксису язык. В итоге пересел на C#, гораздо более перспективный язык. Насчет игры: http://rghost.ru/42414090
Вот мой проект WPF, написанный на коленке за небольшой промежуток времени (пара дней). Много не хватает, реализация всего 6 уровней,но общее представление показывает. На С++ не написал бы и трети того визуального оформления, что тут есть. На дельфи вообще убился бы тапком, пытаясь нарисовать такие граф. эффекты на GDI+. Или извращаться с opengl.
Цитата:
ниасилил. аспнет на простых задачах, но под высокой нагрузкой хуже пыха, а впф пытался изучать, но, имхо, пока что недостатки перевешивают достоинства.

не вижу ни одного недостатка wpf, честно. Разве что плодится довольно много объектов-контейнеров, но на один этот минус мульоны плюсов.
Цитата:
не у всех есть больше 4Г. К тому же, 4Г не подходит ни к х32 (всё не видит), ни к х64 (жрёт столько, что выгоднее поставить ос х32).
3dsmax, maya, zbrush и прочие. Тут много памяти не бывает и не только нужно ставить оси х64 и наращивать озу, но и, имхо, хоть немного оптимизировать программы, чтобы озу не требовалось терабайтами. Это в районе пожелания, не знаю как вышеперечисленное написано на самом деле :)
Фотошоп. Недавно нужно было увеличить пару картинок для печати, на 16Г озу потребовалось 20Г свопа. Обрабатывал по одной пикче.

При большом кол-ве озу можно просто отключить своп. 16гб - 1500 рублей, 32гб - 3000 рублей. Потратить один раз в 5 лет такую сумму и забыть про проблемы с озу, конечно, очень тяжело
Цитата:
Наконец-то подошли к играм. Если известный вам "чайник" *поднимает правую лапу* будет писать свою игру "в лоб", то 50-70% игрового пространства нагнёт квартет топовых видюх и не меньше 64Г озу. Дотнет хорош, но большие объёмы занимаемой памяти практически убивают игру. Как и отсутствие оптимизации на уровне алгоритмов.

Я уже сказал: память не проблема. 20 метров занимает приложение или 200 - разница небольшая, в наше время. Больше волнует вопрос производительности: а тут шарп иногда даже уделывает плюсы, не говоря про дельфи.
Цитата:
это в теории и рекламе. А на практике из плюсов на текущий момент лишь уменьшается количество ошибок человеком. Верю, что допилят до желаемого, но только если Сами-Знаете-Кто не забросит недавно активно продвигаемое Сами-Знаете-Что (как прогнозируют АНАЛитики) Сами-Знаете-Куда :) А пока - дотнет для бизнеса да и то не всегда (бывают глюки).

есть свойство перехода количества в качество, а теории - в практику
Цитата:
ответ неверный.
Линейный список редко располагает элементы друг за другом. Они могут быть в любом месте кучи и обращаться к ним по индексу чаще всего нет возможности.
Динамический массив гарантировано располагает элементы как в обычном массиве один за другим. Выбор размера на который массив "растёт" или "худеет" весьма нетривиальная задача и неверный выбор этого размера может крайне плачевно сказаться на производительности.

А теперь читаем еще раз
Цитата:
Динамический массив - это обычный линейный список. В некоторых языках он упаковывается в соседние ячейки, что позволяет обращаться по индексу. Однако при изменении размеров при таком развитии событий очень быстро растет фрагментация кучи.

чукча не читатель, чукча писатель...

_________________
I would tell you a joke about UDP, but you probably wouldn't get it.


 

Member
Статус: Не в сети
Регистрация: 25.03.2004
Откуда: Питер
а в это время в рашке:


1. На борту рухнувшего в Казахстане самолета находились 27 человек
2. Легендарный оружейник Михаил Калашников попал в реанимацию
3. Трое профессоров РГТЭУ объявили голодовку
4. Следственный комитет подозревает в мошенничестве двух депутатов Думы
5. Установлены подозреваемые в убийстве ректора в Нальчике


 

Member
Статус: Не в сети
Регистрация: 20.03.2011
Откуда: Москва
d2 so? К электронике не имеет никакого отношения. Машина на 640к способна принимать быстрые решения в рамках страны, так что тут мимо. Вопрос в людях, а наши дорогие 95% тут ярко выражены

_________________
I would tell you a joke about UDP, but you probably wouldn't get it.


Показать сообщения за:  Поле сортировки  
Форум закрыт Новая тема / Эта тема закрыта, вы не можете редактировать и оставлять сообщения в ней. Закрыто  Сообщений: 77 • Страница 4 из 4<  1  2  3  4
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 20


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan