0xd34df00d
17.01.2013 13:43 Azoth_primary
А еще, похоже, мне пора начать обмазываться даташитами на процессоры и все такое.
По крайней мере, похоже, для вещи типа
char ch = ...
if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z'))
something = true;
gcc генерит жутко неоптимальный код из кучи cmp/jz, которые сбивают нахер бранч предиктор.
В результате избавления от этого условия ускорил функцию в два раза, например.
Recommended by:
@pooq: моча съела говно
Жаваебы смотрят с недоумением и крутят у виска пальцем
-O3 ?
Да.
Ынжой ё предикшн: http://igoro.com/archive/fast-and-slow-i...
Соснули все.
Именно. Твои условия для предиктора — это нечто заоблачное.
Боль байтоукладчиков.
Я не байтоукладчик, а у мамы хайперф-погромизд.
5k rps?
Ну и как жава от этого не будет страдать?
Больше.
Жаваёбы не страдают, они переводят тикеты.
Прозреваю, это он про то, что им со всеми их абстрактными прокси-фасад-фабриками на такие мелочи тупо похуй.
Я уже потекла.
Правда, никто не знает, нахуя нам столько, ибо в реальной жизни запросов куда меньше, но мы все равно делаем все оптимально, А ТО ВДРУГ ЗАПРОСЫ.
Прозреваю типичный жавасофт с СЕРВЕРАМИ КЛАСТЕРАМИ МАСШТАБИРУЕМОСТЬЮ
И департаментом из сорока разработчиков в галстуках.
А не проще будет написать "something = (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')"?
Нет, потому что something в false выставляться не должен никогда.
Хотя можно, конечно, something = something || (...), но, похоже, компилятор генерит одно и то же для этих двух записей.
Ну ебать ты тупой. Переделай в свитч.
Проиграл с подливой.
Я не силен в крестах: гохацэ не умеет переделывать свитч по чару в один индайрект джамп?
> кресты
> свитч по чару
Гм.
А по сути — хер его знает, я не силен в нутрах гцц.
И да, ты предлагаешь мне писать свитч с примерно 52 вариантами? Да ты ебнулся, и насколько я помню, компилятор достаточно длинные свитчи разворачивает в if'ы, а не джампы.
Кстати, если там будет cmp и conditional jump, хоть дайрект, хоть индайрект, предиктору все равно пизда.
Можно сгенерить препроцессором lookup table.
В роли препроцессора ghc, см. соседний тред.
У меня нет Целостной Картины Мира, поэтому что такое «предиктор» я тоже не знаю. Если это важно — объясни.
> Да ты ебнулся, и насколько я помню, компилятор достаточно длинные свитчи разворачивает в if'ы, а не джампы.
Не вижу причин делать это в данном конкретном случае. Причины делать — вижу, куча.
Это такая штука в процессоре, которая пытается предсказать результат какого-нибудь там условия и начать выполнять соответствующий код до того, как само условие будет проверено.
Например, в
bool foo = doSomething ();
if (foo)
doBar ();
можно попробовать начать выполнять doBar до того, как doSomething завершится и вернет foo. Если угадали — отлично, у нас уже и результат doBar почти что есть, если не угадали — ну, не повезло, ничего не потеряли, кроме пары пикоджоулей на вычисления.
> Не вижу причин делать это в данном конкретном случае. Причины делать — вижу, куча.
Parse failed.
В примере лучше, конечно, напиметь if (foo) doBar1 (); else doBar2 ();, тогда понятнее, чо зачем.
Спасибо, понятно.
> Parse failed.
Я сейчас немного упорот, так что не судите сильно строго. Вдобавок я нихуя не эксперт, а быдло, которое ковырялось, когда ему было интересно.
В общем, поведение комплиятора мне кажется вполне адекватным. Ну, ты же сам пишешь — если, больше или равно, бла-бла-бла. Ебись, процессор, проверяй то и это. В теории компилятор может такую хуйню и оптимизировать, но это уже «прибери за хозяином» и «сделай то, не прошу что». Если ты хочешь, чтобы все это говно резолвилось одним ijmp’ом — тебе нужен свитч. Если нужен смешнй рассказ упоротого дебила о том, как работают ijmp’ы — реквестируй.
Ну так вот. Беда свитча в том, что тебе придется писать несколько десятков вариантов чаров, а это нихуя не весело. Но проблема только в том, что дохуяписать.
Для такого случая в языке должен быть сахар в виде рейнджей. Даже в сраном окамле он есть: http://caml.inria.fr/pub/docs/manual-oca...
Уверен, что и для сраных плюсцов его изобрели. Поищи там.
На самом деле, решение уже найдено.
Да похуй мне. У тебя тут каноничный случай, когда надо делать свитчом. Делай, сука!!!11111
Поехавший.
Все, пора идти домой.
Пошедший.
Нафиг ты ему советы даешь?
А почему бы и нет?
А что такого?
Так дедфуд же. Он все равно сделает по своему, а ты потом окажешься виноват, что у него говно получилось.
Не, мне там хирсворк/гиниратырь в соседнем треде норм посоветовали, попробую сделать, как они посоветовали, да.
Ога, сам видел.
можно (это будет оптимально по скорости), но зачем?
http://en.cppreference.com/w/c/string/by...
Затем, что дедфудотред же ;]
ага, точно.
кажется, сейчас спалю концепцию дедфудотреда: весь тред мудаки-плюсоёбы отсасывают у своего основного источника несвежего говнеца тем способом, что под конец постоянно понимают, что в очередной раз у него отсосали.
нахуй быть плюсоебом, короче
А мне норм.