![]() |
Страницы (3): « 1 2 [3] Показать все 43 сообщений этой темы на одной странице |
HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Технические вопросы (https://hlfx.ru/forum/forumdisplay.php?forumid=20)
-- Почему MSVC2010 генерирует такой дерьмовый код? (https://hlfx.ru/forum/showthread.php?threadid=4598)
MegaGovnoCoder
То есть тебя ни разу не смущает тот факт, что в 1998 году компилятор умел оптимизировать под "отходы" (а на тот момент - широко распространённые процессоры), но в 2015 году внезапно "позабыл", как это делать?
Конкретно я предпочитаю FPU по следующим причинам:
1) Использование SSE подразумевает векторизацию, которую компилятор иногда делает неправильно. Я сталкивался с функциями, которые неправильно оптимизируются с включённым SSE - вплоть до того, что функции начинают работать принципиально неверно. Нет никакого желания жонглировать с версиями компиляторов и тулсетов в поисках таких трудноидентифицируемых багов.
2) Регистры FPU 80-битные, по дефолту расчёты идут двойной точности (53 бита) для 32-битных floatов, что минимизирует ошибки округления. В SSE числа с плавающей точкой занимают 32 бита даже во внутреннем представлении, что ведёт к серьёзным ошибкам. В частности, почти неизбежно приходится переписывать алгоритм на использование эпсилонов, в то время как на FPU довольно безопасно сравнивать числа напрямую (за исключением режима одинарной точности, но его нужно выставлять вручную, по дефолту он не включен).
3) Сопроцессор имеет большое число математических команд - например, вычисление тригонометрии - чего нет в наборах инструкций SSE. В последнем случае необходимые подпрограммы пишутся специально, и как правило, имеют невысокую точность. Эти подпрограммы, как и принято в SSE, заточены под векторизацию, т.е. вычисление четырёх синусов/косинусов за раз, что в условиях убогой векторизации в компиляторах совершенно бесполезно.
4) Выигрыш от использования скалярных операций SSE почти нулевой, если FPU код написан также грамотно - зато точность расчётов ниже. Кривой FPU-код, описанный в первом посте темы - либо баг компилятора, либо сознательный маркетинговый ход с целью популяризовать новые тулсеты. Как я писал выше, у GCC таких проблем нет.
5) SSE нет на мобильных процессорах, а FPU есть, поэтому для получения сравнимых и воспроизводимых результатов на всех платформах последний предпочтителен.
Там же, где я чётко вижу векторизацию, я использую SSE самостоятельно, без сомнительных "услуг" компилятора. И это действительно даёт заметный прирост в тест-кейсах.
Ну и, конечно же, вопрос самоконтроля: если движок выдаёт картинку уровня, скажем, дум3, а дум3 запускается на celeron 466, то по какому праву твой движок не будет на нём запускаться?
MegaGovnoCoder >>Проживает: Деревня
Богатая, видать, деревня, что процы на помойку выкидывают
Кстати, SSE не поддерживали и многие Атлоны, у которых зато был 3DNOW!.
XaeroX полностью согласен, что векторизованный расширения типа sse надо использовать вручную.
__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]
Вот вам еще в копилку новостей: http://www.yaplakal.com/forum1/topic1396002.html
Для тех кто удивляется, почему я не спешу уходить с шестой студии и WinXP.
Добавлено 15-06-2016 в 20:30:
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
На MinGW надо валить.
>не спешу уходить с шестой студии и WinXP.
как таймбомба в железках сработает, так и поспешишь.
__________________
http://www.moddb.com/mods/monorail-quest
nemyax
Про телеметрию ещё в апреле писали на хабре.
Непонятно, почему об этом снова вспомнили.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Временная зона GMT. Текущее время 09:05. | Страницы (3): « 1 2 [3] Показать все 43 сообщений этой темы на одной странице |
На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024