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




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

Member
Статус: Не в сети
Регистрация: 18.01.2007
Вот ссылка на мою беседу с программистом, одним из создателей игры СЯ (Andrey12345):
http://www.sukhoi.ru.sixxs.org/forum/sh ... 98&page=44 (и предыдущая пара страниц)

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

В общем, делимся своим мнением по этому вопросу.

П.с. Что касается меня, то я просто в недоумении...
____________________________________________________________________

Ray Adams
Цитата:
Ну если его код в 64 битном исполнении тормозит, то это не значит, что писать под 64 бита это плохо. ну не виджит человек в этом никакой для себя пользы, ну и пусть и дальше так не видит. 64 бита от этого не пострадают. Я сам программист и знаю, как часто просто из-за врождённой для каждого программера лени, нет никакой охоты переписывать что-то под новую платформу. И тем более оптимизировать. А уж консерватизм программистов это вообще притча и т.д.

Можно конечно тупо перекомпилировать, но такой в лоб подход не всегда принесёт пользу.
Можешь программеру показать Кризис. Что 64 , что 32 в принципе идут одинаково в плане скорости! Но! При таких обьемах текстур и всего остального 64 бита дают выигрыш хотябы в том, что памяти для игры будет больше чем 2 гига.


Грецкий!
Цитата:
-AG- писал(а):
Есть ли реальные преимущества 64-бит над 32-мя, кроме расширения адресного пространства?

Да.
-AG- писал(а):
Все ли типы приложений выиграют при переходе на 64-битный код?

Ряду приложений никакой разницы.
-AG- писал(а):
Может ли 64-битный код ускорить работу приложения?

Да, но не каждого.
-AG- писал(а):
Не может ли получиться так, что само расширение адресного пространства в ряде случаев вызовет снижение эффективности работы кода, например, в результате увеличения задержки при работе с большим количеством случайных данных малого объема?

Нет.
-AG- писал(а):
Наконец, насколько эффективен (или наоборот) переход на 64-бит в игровых приложениях, в частности для расчета сложных матмоделей симуляторов, физики, искуственного интеллекта?

В целом, чем больше вычислений с высокой точностью, тем больше прирост. Надо иметь ввиду, что процессор во время игры занимается непосредственно вычислениями далеко не все время (зависит от самой игры).

Это обсуждалось и достаточно давно.


-AG-
Цитата:
Цитата:
Грецкий! писал(а):
-AG- писал(а):
Есть ли реальные преимущества 64-бит над 32-мя, кроме расширения адресного пространства?
Да.

Не могли бы вы конкретизировать, какие?
Грецкий! писал(а):
В целом, чем больше вычислений с высокой точностью, тем больше прирост. Надо иметь ввиду, что процессор во время игры занимается непосредственно вычислениями далеко не все время (зависит от самой игры).

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


Obscury
Цитата:
Грецкий! писал(а):
-AG писал(а):
Есть ли реальные преимущества 64-бит над 32-мя, кроме расширения адресного пространства?
Да.

Какие, например?
Я кроме увеличения адресного пространства никаких преимуществ не вижу. В своей программисткой практике очень редко сталкивался с необходимостью в 64 битном типе данных. Возможно для каких-то финансовых программ это может помочь, где ещё, даже не знаю. Что касается научных программ, то тут в основном всё вертится вокруг FPU, а на мощность типов double, float и др. битность процессора не влияет. Игровые миры строятся процессором в действительных числах (т.е. здесь тоже важнее FPU), кроме того, в играх больше используются регистры SSEx, которые и так 128 битные и их битность не зависит от битности процессора. Физика - это тоже FPU. Есть, конечно, ещё AI - может там можно что-то выиграть, сомнительно...
А вот расхож памяти увеличится, так как указатели (адреса) теперь 8 байт занимают ...

DenisMak
Цитата:
по теме:
по 64 битам я вижу 2 как минимум очень ценных +
-больше памяти без лишнего геммора
-регистров в 2 раз больше и они в 2 раза шире - больше можно хранить в регистрах не обращаясь к кешу совсем
и один маленький плюс - 64битные данные обрабатываются/могут обрабатываться одной командой вместо... как часто это используется зависит от задачи

но за это надо платить:
-больший перерасход памяти начиная с указателей ...
-контекст задачи становится больше и переключение его занимает больше времени (это как догадка, нигде не читал про 64битный режим)
-(где то здесь на форуме прочитал) возрастает нагрузка на пропускную способность того же кеша (... которая в результате может тормозить, но тоже измерить это стандартными средствами не вижу как.) и кеш хранит меньше параметров хоть и при том же обьёме (размерность параметров увеличивается) (противовес большему кол-ву РОНов)

в общем для себя вижу такую картину - увеличение возможностей использования памяти и скорости части мелких алгоритмов (тут всё сильно зависит от задачи и может действительно быть и 0% прироста а может и >100% достичь если разрядность нужна + новые регистры уменьшат обращение к кешу) за счёт уменьшения производительности _в некоторых/особых_ случаях

это только моё мнение

asmfan
Цитата:
DenisMak писал(а):
но за это надо платить:
-больший перерасход памяти начиная с указателей ...

Они кодируются RIP'ом в 4 байта как и абсолютные указатели в 32битах. Нет недостатков.
DenisMak писал(а):
-контекст задачи становится больше и переключение его занимает больше времени (это как догадка, нигде не читал про 64битный режим)

используются те же инструкции, благо в них заложен буфер подходящий для 32/64 битн. режимов. А запись 8ми (для целоцичленных) и 8ми для ХММ дополнительных регистров не сильно замедляет дела. Нет недостатков.

+Скорость набирается за счёт конвенции вызовов в 64 битах - стек приложения приблизительно постоянен всегда, как неплавающий буфер, т.е. не приходится перемещать указатель стека и выделять новую память. Очень удобно и быстро.

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

Цитата:
pusha/popa нет в 64 битах. API и конвенции вызова для 64 бит предусматривают передачу первых 4х парамтров как через РОН так и ХММ, либо через те и те одновременно в определённых ситуациях.
Под 64 бит ОС 64 выигрывают у 32 из-за отсутствия WOW переходников, посему никакие рекомендации мол если меньше 3х гигов и проч. не должны смущать. Если писать универсальный код, то перекомпиляции ис-под С/С++ компилера будет достаточно.
size_t, *_PTR, прочие макро- и просто фичи для компилера.


Последний раз редактировалось -AG- 01.08.2008 15:14, всего редактировалось 4 раз(а).


Партнер
 

Member
Статус: Не в сети
Регистрация: 13.06.2006
Afx
Afx писал(а):
Ты не понимаешь. Некоторые функции СПЕЦИАЛЬНО модифицируют регистры. Просто так задумано. Например, почти любая API функция (по крайней мере в 32 бит, про 64 не скажу) возвращаемое значение пишет в EAX. Ну ладно, допустим компилятор в принципе может знать все апи функции, какая какой регистр портит, а если функции пользовательские? В общем, на мой взгляд если в процедуре вызывается внешняя процедура, то сохранять придется все.

Вообще то есть соглашения, что куда класть в каком случае. Или как, мы вызвали функцию, она что-то изменила, а компилятор об этом не знает? Не смешно ли? Зачем она вообще изменила значение регистра если об этом никто не знает? Для того, что бы в вызываемом коде новым значением могли воспользоваться, значит компилятор должен заранее знать куда положит данные вызываемая функция. Соответственно о ЛЮБОЙ функции должно быть известно что она изменила. То, что она не должна изменять, она должна вернуть в положение, которое было до вызова. Да и потом я то тут причем? :) Берем отладчик и GCC и смотрим на код, который сгенерировал GCC. И что мы видим, при вызове функций никаких лишних сохранений значений регистров не происходит (хотя в 32 битном коде все же есть лишние сохранения, но только одного регистра), а в коде самих функций кидается в стек содержимое регистров, которые используются в нем для промежуточных расчетов. Некоторые регистры используются для передачи параметров в функцию и обратно, так я с этим не спорю :)
Afx писал(а):
значит сохранение даже всех 16 64-битных ронов будет производится в кэш (как правило 1 уровня), даже в худшем случае это займет пару десятков тактов. Это не так уж и много, если функция более менее сложная, то этим временем можно пренебречь. Поэтому я и сказал что не стоит злоупотреблять многократным вызовом мелких функций, надо их инлайновыми оформлять (но вообщето это и в 32 бит верно, просто в 64 будет еще больше разница).

Ну нету этого, не сохраняются все РОНы. Если функция мелкая и в ней вообще не используются РОНы, то вообще ничего не сохраняется в стек при ее вызове (опять же для x86_64, для 32 GCC по умолчанию сохраняет один регистр, но ключик -fomit-frame-pointer позволяет этого избежать).
Afx писал(а):
Т.е. вызывающая программа не должна заморачиваться сохранением контекста - это дело вызываемой процедуры. И тут нет разницы, о чем идет речь, о ронах или сегментных регистрах (просто последние как правило нет нужды изменять в подпрограмме, но раз уж изменил - изволь прибрать за собой).

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


 

Member
Статус: Не в сети
Регистрация: 18.12.2003
По своему опыту. Писал как то программки, cчитающие фракталы. Так наблюдается проигрыш от простой перекомпиляции с 32 на 64 бита около 10 процентов. Но вот выигрыш от многоядерности хорош: на 2х-ядрах многопоточный вариант программы выигрывал 1.7 раза по сравнению с однопоточной, на 4х- 3.8 раза. Причем первоначальная программа писалась без учета многопоточности, а была сделана многопоточной через 2 года за пол часа. Так, что программисты, которые не используют многопоточность и многоядерность просто чрезвычайно ленивы. :-) Пинать их надо :-)))

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


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 82 • Страница 5 из 5<  1  2  3  4  5
-

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


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

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


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

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