Крылатый
В рамках плюсов, конечно.
Anonymous
Ассемблерные вставки действительно зло и их не должно быть в нормальном проекте. Современные компиляторы C/CXX оптимизируют намного лучше, чем способен написать ассемблерщик с 20-летнем стажем. К тому же такой код со вставками не соберётся на других архитектурах, в отличие от нормального C/CXX кода.
Крылатый
Крылатый
И он как раз таки пишет асм.
Крылатый
И ковырять асмовыхоп компиля бывает полезно. Для исправления компиляторов.
Anonymous
🐙 Antony
Блин, ну абстрагируйтесь от чисел.
Ясно же, что асм это возня с регистрами процессора.
Но я не нашел более простых пальцев для показать: асм и не асм.
Очень рад за компиляторы, что они такие умные, но присутствующие тут же давят на портабельность. А речь начиналась о СКОРОСТИ.
ИМХО, ни один компилятор не обойдёт асм спеца.
Я вас удивлю, некоторые вещи компилятор делает намного лучше людей.
Например, страшно представить, сколько времени надо асм профессионалу, чтобы оптимально реализовать
int foo(int i) { return i % 3; }
А вот компилятор делает это за микросекунды:
movsxd rax, edi
imul rcx, rax, 1431655766
mov rdx, rcx
shr rdx, 63
shr rcx, 32
add ecx, edx
lea ecx, [rcx + 2*rcx]
sub eax, ecx
ret
И я не поверю, что есть асм мастера, которые помнят все подобные константы и хитрости наизусть
Крылатый
Пардон, я тупой, а в чём тут хитрость?
Крылатый
// правда, в чём?
Anonymous
Я вас удивлю, некоторые вещи компилятор делает намного лучше людей.
Например, страшно представить, сколько времени надо асм профессионалу, чтобы оптимально реализовать
int foo(int i) { return i % 3; }
А вот компилятор делает это за микросекунды:
movsxd rax, edi
imul rcx, rax, 1431655766
mov rdx, rcx
shr rdx, 63
shr rcx, 32
add ecx, edx
lea ecx, [rcx + 2*rcx]
sub eax, ecx
ret
И я не поверю, что есть асм мастера, которые помнят все подобные константы и хитрости наизусть
Шах и мат, вы правы.
А асм компилятор тоже может так оптимизировать?
🐙 Antony
Пардон, я тупой, а в чём тут хитрость?
Очень тяжёлую операцию "остаток от деления" компилятор свёл к операциям умножения, сложения и сдвига с магической константой 1431655766; При этом сэкономил около 15 тактов.
Крылатый
Круто.
Крылатый
Спасибо)
🐙 Antony
🐙 Antony
Асм не компилятор, а транслятор
Anonymous
Anonymous
Пля, я знал я знал, но забыл ☺️
🐙 Antony
Nikita
Kirill
либо разработчикам компиляторов
λ
Эм я что-то не пойму. Почему оно так работает: https://bpaste.net/show/776258dbfcb2
λ
Структура разве не в стеке? И при выходе из функции стек же чистится. Да? Нет? Лыжи? Я?
λ
А тут что можно обсуждать?
λ
ВариаDики? %)
λ
🐙 Antony
А вы о баге сообщили разработчикам компилятора?
Dr. Friedrich
Кроме шуток, авторы gcc нормально реагируют на сообщения о недостаточной оптимизации. У них в трекере есть соответствующие категории багов, и они их исправляют понемножку.
🐙 Antony
Пожалуйста, если будете ещё натыкаться на подобные места - сообщайте разработчикам. Как правило они просто не знают о проблеме, и поэтому её и не исправляют.
Dr. Friedrich
К сожалению, не в курсе. Я тоже на это надеюсь и мне кажется, что на такое отношение можно рассчитывать :)
🐙 Antony
Сразу расскажу, как правильно обращаться:
Проблему надо локализовать. Тоесть сделать минимальный пример, который не включает заголовочные файлы, но производит неоптимальный машинный код. Стоит кратко описать, что именно вам кажется неоптимальным. Обязательно надо указывать свой реальный почтовый адрес при регистрации - зачастую нужно какое-то обсуждение проблемы (спросят версию компилятора, что-то системное, флаги компиляции и т.д.) - без верного адреса диалога не будет.
Deleted Account
Deleted Account
Понял, спасибо
🦥Alex Fails
Я вас удивлю, некоторые вещи компилятор делает намного лучше людей.
Например, страшно представить, сколько времени надо асм профессионалу, чтобы оптимально реализовать
int foo(int i) { return i % 3; }
А вот компилятор делает это за микросекунды:
movsxd rax, edi
imul rcx, rax, 1431655766
mov rdx, rcx
shr rdx, 63
shr rcx, 32
add ecx, edx
lea ecx, [rcx + 2*rcx]
sub eax, ecx
ret
И я не поверю, что есть асм мастера, которые помнят все подобные константы и хитрости наизусть
похоже на магию обратного квадратного корня
Animal
Что нынче для сериализации XML уважаемые господа разработчики С++ используют?
🦥Alex Fails
я тинихмл2 люблю
Animal
Спасибо) буду смотреть в эту сторону
🦥Alex Fails
Evgenii
Наконец то
Nikolai
жто типо пораждение своего процесса? В рантайме или в модельном времени?
Animal
Я вообще рад. Я пока что тащу boost.Process в инклюдах и это мне совсем не доставляет
Animal
Для тех, кто не в курсе: в Boost почти завезли вкусняшку новую - Boost.Process
http://www.boost.org/users/history/in_progress.html
Animal
С начальством уже договорился, что перейдем на 1.64 сразу как только зарелизят
Animal
Boost.process header only, если кто не знает
Evgenii
А он кроссплатформенный в версии которую зарелизили? Или для винды свои функции, для линукса свои?
Animal
В целом кросплатформенный, но есть и некоторый платформеннозавистмые частности
Animal
В общем случае кросплатформенныц
Animal
Но я под виндой лично не пробовал
Anton
Он зависит от fs и system вроде.
С 2014 года оно не обновлялось.
Anton
Ковырял примеры год назад.
Anton
Anton
Это логично как бэ
Anton
Александр
кто-нибудь может привести разумный пример перегрузки operator&?
Alexander
может перед тем как вернуть ссылку проверить валидность обекта и если что кинуть исключение
Mikhail
Mikhail
Я вообще его не ждал, просто очень давно видел:)
Mikhail
Я думаю через постель было бы быстрее :)
Mikhail
Не знаю, но как попадают в бустер пулл реквесты вопрос!
Mikhail
Так только через десятилетия!
Mikhail
Эти через постель, сто пудов! Инфа 146%
Mikhail
Просто ты недавно в этом бизнесе, парень!
Demyan
Привет всем
Demyan
кто нить юзал hrtimer ?
Demyan
ну да)
Demyan
high resolution timer api из ядра линуха
Surreal
В хроно же есть high_resolution_clock или типа того что-то. Или ядреный точнее?
Demyan
что за хроно?
Demyan
ну наверняка штуки из ядра линуха будут шустрее
Demyan
1) 0.5 наносекунды точность нужна
2)ядрышко пизже
3)сорян не туда попал)
Demyan
ну я попробую цппшную эту штуку
Surreal
У меня точность 1ns.
std::cout << static_cast<double>(
std::chrono::high_resolution_clock::period::num) /
std::chrono::high_resolution_clock::period::den
<< std::endl;
Evgenii
Surreal
http://stackoverflow.com/questions/21532304/stdchronoduration-cast-any-unit-more-precise-than-nano-second
Вот тут про тайпдеф для пикосекунд есть.
Demyan
нет конечно
🦥Alex Fails
унарного или бинарного?
Demyan
неважно. но вообще бинарного, ибо время только по двум точкам измерить можно