ep
Ну собсно есть же то что помогает. Use the force
Ну, мягко говоря, не очень удобно.
Berkus
в студии включи использование шланга вместо msvc
Stanislav
http://www.acodersjourney.com/2017/08/top-20-cplusplus-multithreading-mistakes
Square
ммм, кстати седня столкнулся с дичью оптимизации в студии, и мне ВПЕРВЫЕ за 7 лет пригодилось volatile. вызывал с++ либу из .net и если либа была с о2 сбилжена - код падал после выхода из тела одного маленького цикла в три строки
Square
млин. хотел не тут поделиться
Stanislav
http://ericniebler.com/2017/08/17/ranges-coroutines-and-react-early-musings-on-the-future-of-async-in-c/
Stanislav
https://clearlinux.org/blogs/gcc-7-importance-cutting-edge-compiler
Vitaliy
Всем привет. Начал сегодня освежать такую тему как виртуальные функции. Добрался до сайта cppreference и то ли я торможу, то ли у меня с английским плохо, но не могу понять последний пример на этой странице http://en.cppreference.com/w/cpp/language/virtual
Vitaliy
Там классический пример ромбовидного наследования, но ещё и с виртуальными функциями. Непонятно когд и какая вызывается и почему.
Square
Сильно сомневаюсь, что volatile действительно полечил проблему, а не замаскировал
не. код в итоге был отрекфакторен, но просто для своего успокоения, я попробовал volatile. о1 норм. о2 - падало при выходе из метода.
Square
цикл простейший, по вектору преаллоцированному
Square
1000 итераций, задано константой было
Square
и падало ток когда из .net вызывалось =\
Ivan
Такой вопрос: Кто какое IDE юзает на macOS?
Ivan
Благодарю
Vitaliy
#supapro
Всё-таки свой вопрос не считаю вопросом для новичков ) Но если он показался таким лёгким, то ок.
Гегам
подскажите с какой книги начинать изучать c++
Гегам
@supapro
там уже спросил)ъ
Stanislav
https://stackoverflow.com/questions/40354978/why-is-this-c-code-faster-than-my-hand-written-assembly-for-testing-the-collat для любителей асма
Evgenii
на 2
Александр
каеф
Vladislav
Кек
Stanislav
особенно последние строчки доставили
Stanislav
My system: 64 bit Linux on ‎1.4 GHz Intel Celeron 2955U (Haswell microarchitecture). g++ (unoptimized): avg 1272 ms g++ -O3 avg 578 ms original asm (div) avg 2650 ms Asm (shr) avg 679 ms @johnfound asm, assembled with nasm avg 501 ms @hidefromkgb asm avg 200 ms @hidefromkgb asm optimized by @Peter Cordes avg 145 ms @Veedrac C++ avg 81 ms with -O3, 305ms with -O0
Stanislav
гцц всех победил в итоге
Vladislav
Совершенно не удивлен
Stanislav
а вот автор удивлен
Stanislav
был
Berkus
был
но продолжал делить 64 битным дивом
Stanislav
2016 делили как могли
Evgenii
гцц всех победил в итоге
ну это как раз задача для компилятора
Ioann_
Так видно же, что Asm код ламерский
Ioann_
Совершенно не удивлен
Ioann_
а вот автор удивлен
Ioann_
был
Ioann_
Там ниже, даже указали на это и поправили. Обогнав С++ в 2.5 раза
Berkus
меньше 80мс сделали? где
Berkus
дай ссылку
Ioann_
Когда Асм попадает в руки к новичку - то это беда, да. Но если попадет к профи, то вероятность ускорить все к чертям собачьим - более чем 99 процентов. И те кто говорят, мол на асме писать код долго - ничего подобного, люди которые этим занимаются, не только могут делать это быстро, но могут делать это быстро и с вашим С++ кодом, который некоторые из них могу дизасемблить в уме
Ioann_
дай ссылку
Комментарий с рейтингом 78 разве не о том ?
Evgenii
там в самом вопросе рейтинг результатов
Evgenii
в итоге плюсы победили
Ioann_
А, вижу ретинг. На счет ниже 80 мс тогда я не прав, ну я и не это утвержадал. А то что код автора ускорили - то вот это я утверждал.
Ioann_
Но тот что работает 80мс, быстрее потому, что он алгоритмически по другому записан
Ioann_
Так обычно так и делается, ну только 100 все же маловато как то
Ioann_
Там разные фичи есть - например при вычисленинии производных и вообще самого nurbs используется, и это работает не просто быстро ... ну в общем не суть - такие заявления ведут к пруфам и т.п, мне лень их предоставлять
Ioann_
Но есть другие пруфы
Ioann_
https://pugixml.org/benchmark.html
Ioann_
Смотретие на ASM версию, она вроде как не включает intrinsic
Ioann_
//Но PugiXml это если что С, в чистом виде, без использования Stl, и со своими контейнерами
Mikhail
Смотретие на ASM версию, она вроде как не включает intrinsic
ну тут пожалуй весь разговор сведется к тому, что вещи, которые необходимо оптимизировать ты переписываешь на более низкоуровневом языке.. к примеру следующий кейс: 1. Ты один раз при старте распарсил пару троек xml. Оптимизация тут тебе съекономит пару сотен мс в лучшем случае. 2. Ты что-то парсишь постоянно в рантайме. Очевидно, тут тебе стоит задуматься об оптимизации, кешировании и т.д.
Evgenii
бывает и наоборот
Mikhail
я обычно прогоняю все через perf, потом загоняю все в флеймграф (если есть возможность). ну а дальше смотрю в чем проблемы.
Mikhail
и где просадка по производительности
Mikhail
а херня типа "все в асм" реально трудно применима
Mikhail
есть код который компиляторы оптимизируют гораздо лучше профессионалов
компилятор умнее почти всегда, если побаловатся с флагами и аппаратной оптимизацией.
Evgenii
компилятор умнее почти всегда, если побаловатся с флагами и аппаратной оптимизацией.
да нет, огромные куски кода можно соптимизировать на асме
Evgenii
просто это бесмысленно
Ioann_
Компилятор - написан людьми. Можно взять в пример Intel. Он хорошо векторизует код, лучше всего что есть на рынке, но тоже не идеально. Но, они не стремаются в своих библах типа МПИ и другие - использовать чистый АСМ. Вот у Вижл Студио раньше и референс код плохо оптимизировался, но проблема у них не в этом, а в том что в 64 битной сборке app нельзя использовать asm вставки. Такое только у них, увы. Так то я не призываю писать вас на АСМ-е и т.п. Люди которые на нем пишут в проекте - знают когда, зачем и как его использовать. Это целый research я бы сказал. Но ускорить можно и не хило.
Ioann_
Ну и вдовесок о оптимизации, тут недавно читал диссертацию одного чувака с Мск по оптимизации Российского Геометрического Ядра. Так вот, он там много всего вычисляет и т.п, под конец сравнивает РГЯ с открытыми!!!! библами типа openCascade и т.п, ну и еще кие то платные использует. Так вот это самое РГЯ - это C3D, написаное в Асконе, и учитывая что это Ядро - написанное явно не теми кто за 80 - 90к пер монс в офисе обитает. Но вот по резульаттам оказалось что оно, ядро, медленнее в 8 раз того что есть в свободном доступе.
Mikhail
да нет, огромные куски кода можно соптимизировать на асме
эээх... можно все соптимизировать, в конце концов. это можно назвать "ценой абстрации". например у тебя есть std::string а в сях char*. в одном случае ты получаешь более-менее завершенный тип данных с кучей операций, во втором, только указатель на виртуальный адрес в ОЗУ в котором находятся ничего не значащий тип char который в свою очередь всего-навсего есть несколько u8 (может и u16 u32) следующих друг за другом, и по договоренности заканчивающийся числом 0x00 (или соответсвенно 0x0000, 0x00000000). ну и парочкой примитивных операций для работы с ними. этот указатель может ссылаться на данные в любой из памяти (автоматической, статической, динамической). И тут вознизает вопрос. С каким типом удобнее пользоватся? Работа с каким из них безопаснее? Какой тип быстрее, при эквивалентых задачах? И какой из них переносимее? Короче тут палка на двух концая: АБСТРАКЦИЯ или СКОРОСТЬ РАБОТЫ (алгоритмическую часть опустим).
Ioann_
Ну вот, я про то и говорю - тут многие, скорее всего не занимаются тем, что им нужно постоянно производить вычисления и т.п - параллельно делать еще что то и так далее, что грузит ваш компьютер на все 100%. Поэтому, думаю, что многие на меня смотрят с оскалом. Но, все же призываю разделять точки зрения, я ведь не навязываю, а лишь обосновываю !
Ioann_
Кстати, вот это вот - 'частая' ложь
Ioann_
https://www.viva64.com/ru/k/0003/
Ioann_
Может быть в Асм инструкциях и т.п оно будет быстрее, но вот если брать кеш процессора, то нет
Ioann_
могу предоставить пруф
Ioann_
Миллиардный знак - это узкая задача, компилятору нужно подстраиваться под все возможные.