Маjко
Но там разброс дикий
պլհկ
чекните там
պլհկ
https://play.rust-lang.org/?gist=343bae5a710ce2f4ae0e4ed835c58e24&version=stable
Dmitry
дайте проект целиком
Dmitry
раст это вам не хаскель и не си, однго файлика недостаточно
Маjко
rustc -O file.rs
Dmitry
dmz@zen ~/tmp/bsfuck $ time ./playground < ./49zGQ6Zt.txt > /dev/null real 0m1.410s user 0m1.404s sys 0m0.004s
Dmitry
лучший си сейчас 1.00x
Alexander
лучший си разбирает пробелы \r\n и не делает копирований, выделяет память только под вектора длин и отступов
Loyd
Не видел сишный вариант
Loyd
Но я правильно понимаю, что там работа не с ютф?
Anonymous
https://vk.com/golang
Anonymous
вы только посмотрите на них
Vlad
Хмм, этот unlikely действительно дает измеримый эффект? На SO пишут, что нынче динамический анализ и все такое, и все эти хинты старомодные просто игнорятся
Kerrigan
https://vk.com/golang
обнаружил там вакансию бегета
Alexander
багета?
Alexander
а много вообще вакансий по расту?
Alexander
wow
Nik
а много вообще вакансий по расту?
в моей стране - ровно одна
Safort
Safort
Можно свой паблик запилить, или ты про что?
Cuno
Хмм, этот unlikely действительно дает измеримый эффект? На SO пишут, что нынче динамический анализ и все такое, и все эти хинты старомодные просто игнорятся
Не всегда измеримый (имеет значение только на тех самых 5%), но дает. Статическое, как обычно, лучше динамического.
Сережа
Утверждения, с границами применимости, лучше категоричных утверждений.
Vlad
Не всегда измеримый (имеет значение только на тех самых 5%), но дает. Статическое, как обычно, лучше динамического.
На SO утверждают, что ИГНОРИТСЯ НАХЕР на всех современных процессорах. Точно измеримый? Можно однозначный бенч написать, где добавление unlikely дает измеримый результат?
Cuno
Это хинт не процессору, а компилятору. Бенч можно написать, но делать я этого, конечно же, не буду.
Vlad
rng?
что-что?
Anonymous
random number generator
Vlad
Короч видно я зря не читал половину треда
Anonymous
он переставляет код
Cuno
Хмм, хинт компилятору..? эээ...
Можно компилировать 2 способами: jump-if-true и jump-if-false
Vlad
А, так вот а чем дело. Неужели это на что-то влияет, господи...
Vlad
Конечно влияет. jump ломает конвеер.
И branch prediction не должен всех спасти?
Cuno
branch predictor не всесилен
Cuno
если unlikely то jump if false?
Наоборот. Если unlikely, то условие скорее false, значит в этом случае jump'а лучше избежать.
Vlad
Посмотри сам тот код, можешь убрать unlikely
Да вродь все понятно уже. Я был уверен, что это хинт брэнчпредиктору. Выяснилось, что другой чутка смысл
Vladimir
Ну вообще это хинт бренчпредиктору
Vladimir
Только не напрямую
Vladimir
Как по такому компилятор его реализовывать будет?
Vladimir
If rnd%1000== 0?
Vlad
Можно компилировать 2 способами: jump-if-true и jump-if-false
Vladimir
По твоему*
Vlad
...
Vladimir
И? Это не хинт предиктору?
Vladimir
Подумай сам, как от реализации жампа будет зависеть конечная производительность, если предиктор всемогуч?
Vlad
Ну вот и я как-то так думал
Vlad
И branch prediction не должен всех спасти?
Vladimir
Так я твою логику и оспариваю
Vladimir
Не пойму чего ты смирился после того как тебе про жамп сказалм
Vlad
Потому что если брэнчпредиктор вообще нах отсутствует (= у нас полный рандом), условный переход без джампа должен быть быстрее? Хотя это тоже вопрос, почему так. Но примем за данность пока. Мне работать надо кагбэ, потому и смирился =D
Сережа
что такое условный переход без джампа? условный переход без перехода?
Vlad
Ну, имеется в виду случай, когда мы не прыгаем на l0, а исполняем следующую за je инструкцию cmp eax ebx je l0 ... ; likely branch jmp l1 l0: ... ; unlikely branch ... l1: ...
Vlad
Хотя хрен поймешь, на l1-то все равно надо прыгнуть
Сережа
если все попадает в кэш инструкций по идее разницы нету?
Vlad
Конечно влияет. jump ломает конвеер.
Vlad
Утверждается, что на что-то таки влияет
Vlad
Короч выглядит странно, как по мне
Сережа
l0: ... ; unlikely branch ... jump l1 cmp eax ebx je l0 ... ; likely branch l1: ... ; after likely branch Поцоны я придумал супер-мега оптимизацию для процессоров без бранч предиктинга
Vlad
Кстати мб оно так и должно записываться =D
Сережа
единственное, где думают о бранчпредиктинге это геймдев класса ААА, да и то вряд ли
Vlad
Бля, я этот асм из головы достал совершенно. Над проверить что этот unlikely на самом деле делает
Сережа
в худшем случае уменьшают количество ифов, и то только когда навиное решение не устраивает
Dmitry
в ядре думают
Dmitry
там всё пересыпано этими хинтами
Denis
единственное, где думают о бранчпредиктинге это геймдев класса ААА, да и то вряд ли
Нет, не думают. ААА - это на 95% контент и 5% программирования (и из этих 5% абсолютно все - использование готовых функций выбранного движка). Создатели движков, в свою очередь, в основном приоритезируют графику, а над оптимальностью игровой логики обычно никто не раздумывает
Alex
ага, 5% программирования
Vladimir
Бля, я этот асм из головы достал совершенно. Над проверить что этот unlikely на самом деле делает
Поидее он записывает одну из веток с неким оффсетом типа будет код jne label .... Код //lakely ...паддинг, до момента пока младшие адресса не нули label: // unlikely branch
Alex
ну ну
Alex
поэтому то они так фичи пилят долго