HLFX.Ru Forum
профиль •  правила •  регистрация •  календарь •  народ •  FAQ •  поиск •  новое •  сутки •  главная •  выход  
HLFX.Ru Forum HLFX.Ru Forum > Наш форум > Технические вопросы > Почему MSVC2010 генерирует такой дерьмовый код?
Самая обычная функция max для float-ов
Страницы (3): « 1 [2] 3 »   Предыдущая тема   Следующая тема
Автор
Тема Новая тема    Ответить
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34498
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


ComradeAndrew
Ну в 2013 ты же как-то отключил?
В 2010 в настройках можно выбрать тулсет. На v100 используется FPU, если явно не включить SSE настройкой /arch. То же самое поведение у GCC/MinGW.

__________________
Правдой дорожить, лжи не потакать,
Дальних не судить, ближним помогать,
С тишиной сойтись на исходе дня
Научи меня, Родина моя!

Сообщить модератору | | IP: Записан
Сообщение: 146596

Старое сообщение 09-05-2015 05:43
-
ComradeAndrew
Житель форума

Дата регистрации: Aug 2014
Проживает: Дубай
Сообщений: 510
Возраст: 27

Рейтинг



XaeroX
Не. На тулсете v120, как и на v100 я ничего не менял, а по дефолту там настройка /arch (not set).
Нашел где эта настройка. Итак, давай теперь по порядку.
Везде оптимизация /O2:

Platform toolset v100
/arch (not set)

code:
008A1013 fldz 008A1015 fcom dword ptr [f] 008A1018 add esp,8 008A101B fnstsw ax 008A101D test ah,5 008A1020 jnp main+27h (08A1027h) 008A1022 fstp dword ptr [f] 008A1025 jmp main+29h (08A1029h) 008A1027 fstp st(0)


Platform toolset v120
No Enhanced Instructions (/arch:IA32)
code:
0002101F fldz 00021021 add esp,8 00021024 fld dword ptr [f] 00021027 fcom st(1) 00021029 fnstsw ax 0002102B test ah,41h 0002102E je main+3Ah (02103Ah) 00021030 fstp st(0) 00021032 fstp dword ptr [f] 00021035 fld dword ptr [f] 00021038 jmp main+3Ch (02103Ch) 0002103A fstp st(1)


Platform toolset v140
No Enhanced Instructions (/arch:IA32)
code:
008210C3 fldz 008210C5 add esp,8 008210C8 fld dword ptr [esp+38h] 008210CC fcom st(1) 008210CE fnstsw ax 008210D0 test ah,41h 008210D3 je main+41h (08210E1h) 008210D5 fstp st(0) 008210D7 fstp dword ptr [esp+38h] 008210DB fld dword ptr [esp+38h] 008210DF jmp main+43h (08210E3h) 008210E1 fstp st(1)


Настройки "Enable Enhanced Instructions":
На v100 3 настройки:

  • Streaming SIMD Extensions (/arch:SSE) (/arch:SSE)
  • Streaming SIMD Extensions 2 (/arch:SSE2) (/arch:SSE2)
  • Not Set


На v120 и v140 6 настроек:

  • Streaming SIMD Extensions (/arch:SSE) (/arch:SSE)
  • Streaming SIMD Extensions 2 (/arch:SSE2) (/arch:SSE2)
  • Advanced Vector Extensions (/arch:AVX)
  • Advanced Vector Extensions 2 (/arch:AVX2)
  • No Enhanced Instructions (/arch:IA32)
  • Not Set

Сообщить модератору | | IP: Записан
Сообщение: 146597

Старое сообщение 09-05-2015 07:02
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34498
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


Ну странно, почему он не хочет использовать fcomi/fcmovb? Полагает, что распределяет нагрузку между целочисленным и floating-point модулями?
А какой вариант быстрее у тебя оказывается? Можешь по-быстрому спрофилировать, плз?

__________________
Правдой дорожить, лжи не потакать,
Дальних не судить, ближним помогать,
С тишиной сойтись на исходе дня
Научи меня, Родина моя!

Сообщить модератору | | IP: Записан
Сообщение: 146598

Старое сообщение 09-05-2015 08:33
-
ComradeAndrew
Житель форума

Дата регистрации: Aug 2014
Проживает: Дубай
Сообщений: 510
Возраст: 27

Рейтинг



XaeroX
Ну, если я правильно понимаю как это делается, то смотрим.
Проверим на v140

C++ Source Code:
1
#include <stdio.h>
2
#include <stdlib.h>
3
 
4
#ifndef max
5
#define max(a,b)            (((a) > (b)) ? (a) : (b))
6
#endif
7
 
8
int main(int argc, char** argv)
9
{
10
  float f = 0;
11
  int i;
12
  int iterations = (int)atoi(argv[1]);
13
  for (i = 0; i < iterations; i++) {
14
    f += (i%2) ? i: -i;
15
    f = max(f, 0.0f);
16
  }
17
  printf ("%f\n", f);
18
 
19
  return 0;
20
}

На вход даем 1000000000 (10^9)

Среднее время 5 таких прогонов:

  • (/arch:SSE) : 3324ms
  • (/arch:SSE2) : 2204ms
  • (/arch:AVX) : 2340ms
  • (/arch:AVX2) : 2368ms
  • (/arch:IA32) : 3693ms

Сообщить модератору | | IP: Записан
Сообщение: 146599

Старое сообщение 09-05-2015 09:13
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34498
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


Эм... Спасибо, конечно, но я имел в виду - спрофилировать FPU-код из разных тулсетов.
А что, у тебя процессор держит AVX и даже AVX2? Какой у тебя?

__________________
Правдой дорожить, лжи не потакать,
Дальних не судить, ближним помогать,
С тишиной сойтись на исходе дня
Научи меня, Родина моя!

Сообщить модератору | | IP: Записан
Сообщение: 146605

Старое сообщение 09-05-2015 12:47
-
ComradeAndrew
Житель форума

Дата регистрации: Aug 2014
Проживает: Дубай
Сообщений: 510
Возраст: 27

Рейтинг



У меня Intel Core i5-4210U( 64-bit, SSE4.1/4.2, AVX 2.0 ).

Ну, FPU на всех трех почти одинаково.
Тот же тест на них:
v140 : 3355ms
v120 : 3530ms
v100 : 3267ms

Учитывая прошлый результат v140 - разницы нет.

Или это не так делается?

Сообщить модератору | | IP: Записан
Сообщение: 146610

Старое сообщение 09-05-2015 13:47
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34498
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


У меня тоже Core-i5, но AVX нет.
Может, потому, что он появился в 2011 году, а процессор я купил в 2009? Кто его знает...

Цитата:
ComradeAndrew писал:
Ну, FPU на всех трех почти одинаково.

Понятно, спасибо. Похоже, в 2010 всё-таки баг.

__________________
Правдой дорожить, лжи не потакать,
Дальних не судить, ближним помогать,
С тишиной сойтись на исходе дня
Научи меня, Родина моя!

Сообщить модератору | | IP: Записан
Сообщение: 146613

Старое сообщение 09-05-2015 14:50
-
~ X ~
offline

Дата регистрации: Oct 2005
Проживает: Архангельск
Сообщений: 3619

Рейтинг



Награды
 
[1 награда]


Цитата:
XaeroX писал:
А то, что вы хотите поддерживать процессоры без SSE - это ваши глубоко личные проблемы.

Я, конечно, не стану Дядей Мишей и на ВС6 не пересяду после такого. Но есл получится мод компилить мингвом, то так тому и быть.

Кстати, ЕМНИП, кто-то (оп) очень любил десяточку и мне её жаоко рекомендовал ))))))))))

__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]

Сообщить модератору | | IP: Записан
Сообщение: 146767

Старое сообщение 16-05-2015 15:06
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34498
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


Цитата:
~ X ~ писал:
Кстати, ЕМНИП, кто-то (оп) очень любил десяточку и мне её жаоко рекомендовал

Я рекомендовал микрософтовский компилятор как таковой. В целом-то он более быстрый код генерит. Я собирал старую волатилу мингвом и десяткой, в десятке, по ощущениям, было немного быстрее. То есть там, вероятно, есть другие моменты, которые реализованы лучше, чем в мингве.

__________________
Правдой дорожить, лжи не потакать,
Дальних не судить, ближним помогать,
С тишиной сойтись на исходе дня
Научи меня, Родина моя!

Сообщить модератору | | IP: Записан
Сообщение: 146774

Старое сообщение 16-05-2015 15:58
-
~ X ~
offline

Дата регистрации: Oct 2005
Проживает: Архангельск
Сообщений: 3619

Рейтинг



Награды
 
[1 награда]


В общем, "ужасы нашего городка". Интел юзать нельзя, опен64 только под 64...

__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]

Сообщить модератору | | IP: Записан
Сообщение: 146784

Старое сообщение 16-05-2015 16:34
- За что?
MegaGovnoCoder
Новичок
Девойс

Дата регистрации: Aug 2015
Проживает: Деревня
Сообщений: 10
Возраст: 31

Рейтинг



Какие процессоры не поддерживают SSE ?

Сообщить модератору | | IP: Записан
Сообщение: 150210

Старое сообщение 14-09-2015 15:55
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34498
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


MegaGovnoCoder
Все до Pentium 3.
Вот, например, сейчас у меня тут комп с Celeron 466, SSE не поддерживает.

Сообщить модератору | | IP: Записан
Сообщение: 150212

Старое сообщение 14-09-2015 16:08
-
MegaGovnoCoder
Новичок
Девойс

Дата регистрации: Aug 2015
Проживает: Деревня
Сообщений: 10
Возраст: 31

Рейтинг



На помойку пора таким процессорам зачем из-за них отключать SSE

За это сообщение MegaGovnoCoder получил девойс по собственному желанию

Сообщить модератору | | IP: Записан
Сообщение: 150214

Старое сообщение 14-09-2015 16:32
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34498
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


MegaGovnoCoder
Можно, я сам решу, какие процессоры мне отправлять на помойку, а какие нет?
Можно? Спасибо.

Сообщить модератору | | IP: Записан
Сообщение: 150216

Старое сообщение 14-09-2015 16:59
-
MegaGovnoCoder
Новичок
Девойс

Дата регистрации: Aug 2015
Проживает: Деревня
Сообщений: 10
Возраст: 31

Рейтинг



Ладно, удачи тогда в оптимизации.

Конечно компилятор не рассчитан на оптимизацию кода для такого мусора)))

Твои же слова, что сейчас 2015 год, а компилятор не умеет оптимизировать код для процессоров ниже Pentium 3. А смысл в оптимизации для этих "отходов"?

Сообщить модератору | | IP: Записан
Сообщение: 150217

Старое сообщение 14-09-2015 17:31
- За что?
Тема: (Опционально)
Ваш ответ:



Переводчик транслита


[проверить длину сообщения]
Опции: Автоматическое формирование ссылок: автоматически добавлять [url] и [/url] вокруг интернет адресов.
Уведомление по E-Mail: отправить вам уведомление, если кто-то ответил в тему (только для зарегистрированных пользователей).
Отключить смайлики в сообщении: не преобразовывать текстовые смайлики в картинки.
Показать подпись: добавить вашу подпись в конец сообщения (только зарегистрированные пользователи могут иметь подписи).

Временная зона GMT. Текущее время 18:25. Новая тема    Ответить
Страницы (3): « 1 [2] 3 »   Предыдущая тема   Следующая тема
HLFX.Ru Forum HLFX.Ru Forum > Наш форум > Технические вопросы > Почему MSVC2010 генерирует такой дерьмовый код?
Самая обычная функция max для float-ов
Версия для печати | Отправить тему по E-Mail | Подписаться на эту тему

Быстрый переход:
Оцените эту тему:

Правила Форума:
Вы not можете создавать новые темы
Вы not можете отвечать в темы
Вы not можете прикреплять вложения
Вы not можете редактировать ваши сообщения
HTML Код ВЫКЛ
vB Код ВКЛ
Смайлики ВКЛ
[IMG] Код ВКЛ
 

< Обратная связь - HLFX.ru >

На основе vBulletin
Авторское право © 2000 - 2002, Jelsoft Enterprises Limited.
Дизайн и программирование: Crystice Softworks © 2005 - 2024