?

Log in

No account? Create an account

Previous Entry | Next Entry

Бнопня по C++

Засада. Как вы думаете, какая C++ (11) функция может быть быстрее при достаточно развесистом классе Foo?

size_t DirectSize(Foo && foo) {
    auto v = std::vector{std::move(foo)};
    return v.size();
}


size_t IndirectSize(Foo && foo) {
    auto v = construct_vector(std::move(foo));
    return v.size();
}


при условии, что construct_vector() — это функция, определённая в другом модуле?

Poll #2054853 Быстрота, милота

Какая функция может быть быстрее?

DirectSize
9(40.9%)
IndirectSize
13(59.1%)


Вопрос специально сформулирован несколько расплывчато. Хочу мнений!

Comments

mpd
Oct. 3rd, 2016 04:02 pm (UTC)
Re: Бнопня по C++
> Шаг в сторону и C++ непригоден

А это - в какую сторону, например?
Какие варианты самые распространённые из "сторон"?

> переписывать ВЕСЬ КОД для 40% выгоды)

А в чём заключается переписывание?
Какие самые распространённые примеры, с чем современные компиляторы не в силах справится, соптимизировать?
zyxman
Oct. 3rd, 2016 06:46 pm (UTC)
Re: Бнопня по C++
Проблема не в компиляторе, а в том что у СТАНДАРТНОГО С++ очень низкий уровень абстракции, жестко заточенный на CISC процессор.

- Например, были для многопоточности разработки типа специализированного Си, у которого директивами препроцессора отмечаются отдельные потоки (вот этот самый дополнительный уровень абстракции так добавили). Но это оказалось очень неудобно.

Ну а скажем векторные инструкции используются через либы, которые написаны на ассемблере, то есть вы не используете в программе примитивы а обращаетесь через АПИ к абстрактному черному ящику, что очень сильно ограничивает.
thesz
Oct. 4th, 2016 12:58 pm (UTC)
Re: Бнопня по C++
Почитайте про перенос игр с x86 на приставки. Приставки (и телефоны) в большинстве своём in-order, x86 почти весь out-of-order. В случае PS3, так это вообще 1+7 ядер, все in-order, большинство ещё и с ограничениями по памяти. Для PS3 первое, что следовало сделать игропрограммисту - где всё на C++, - установить emacs с подсветкой ассемблерного синтаксиса.

Переписывание кода заключается в устранении абстракции (что означает - всем видны внутренности всего и надо знать, как этим пользоваться). x86 может выдержать один-два уровня ссылок до доступа к матрице преобразований объекта (то есть, матрица может быть отдельным объектом), приставки - нет, стоять будут-с. Поэтому доходило до совершенно странного - поля следовало указывать вот так, и никак не иначе, потому, что после "состояния" обычно использовали матрицу, а они тогда частично в кеше оказывалась.
mpd
Oct. 4th, 2016 02:42 pm (UTC)
Re: Бнопня по C++
А в чём спасение?
Какая среда/язык?
thesz
Oct. 4th, 2016 03:15 pm (UTC)
Re: Бнопня по C++
Domain-specific languages.

Profile

lionet
Lev Walkin
Website

Latest Month

December 2016
S M T W T F S
    123
45678910
11121314151617
18192021222324
25262728293031
Powered by LiveJournal.com
Designed by yoksel