LINUX.ORG.RU

Что может заинлайнить компилятор?

 ,


0

5

Что же всё-таки может заинлайнить компилятор при включенной оптимизации (по умолчанию, /O2)

template<typename F>
void proceed( std::vector<int>& mv, F f)
{
	//просто для проверки
	std::transform(mv.begin(), mv.end(), mv.begin(), f);
}

inline double selector(int x) 
{
	return cos(x); 
}

int main(int argc, char* argv[] )
{
	std::vector<int> a(10);
	for (int i = 0; i < 10; ++ i) a[i] = i;
	srand(time(0));
	int dummy=rand();

	proceed(a, &selector);
	proceed(a, [](int x) { return cos(x); });
	proceed(a, [=](int x) { return dummy*cos(x); });
	proceed(a, std::bind(&selector, std::placeholders::_1));
	return 0;
}

У меня (msvc2012):

1) вызов через указатель, инлайнится

2) вызов лямбды, так как stateless то преобразуется к указателю, инлайнится

3) вызов лямбды, statefull, всё равно инлайнится

4) результат вызова std::bind. Не может. Или всё таки может?

UPD Вопросы не применительно к msvc, а вообще


Что-то хотел сказать?

Pavval ★★★★★ ()
Ответ на: комментарий от Pavval

А, ну, может ли компилятор инлайнить в случае 4 или это невозможно вообще никак?

Uter ()
Ответ на: комментарий от Uter

Я тебе по секрету скажу: этот сайт - про линукс. Засунь себе в задницу msvc, возьми g++ и проверь, в т.ч. на -O3.

Pavval ★★★★★ ()

У меня (msvc2012)

Унесите. GCC инлайнит.

const86 ★★★★★ ()

В том примере что ты привел практически все. А вообще возьми да посмотри асм.

anonymous ()
Ответ на: комментарий от Pavval

Засунь себе в задницу msvc,...

Засунь себе в задницу свои пять звезд. Когда тут недоношенный суперхакеркиллер срет в каждом треде ты тут как мебель стоишь.

anonymous ()
Ответ на: комментарий от anonymous

посмотри асм

Смотрел (варианты по нему и расписал). Интересно, как в других компиляторах (а возможности быстро проверить нет)

Uter ()
Последнее исправление: Uter (всего исправлений: 1)
Ответ на: комментарий от Uter

В таком тривиальном примере я думаю что любой заинлайнит. Другой вопрос что будет в рабочем коде :)

anonymous ()
Ответ на: комментарий от anonymous

Вопрос и возник из кода
Вместо selector такие же простые функции-однострочники (лямбды), немного по-разному дергающие прослойку к API

Uter ()
Ответ на: комментарий от Uter

Ну это смотреть надо в каждом конкретном случае. Некоторые котоебы тут думают что gcc — это компайлер богов и царей. Я считаю что это не так, иногда gcc делает лучше, иногда наоборот. В любом случае они примерно одинаковые. Часто инлайн не факт что даст прирост в скорости, а скорее наоборот.

anonymous ()
Ответ на: комментарий от anonymous

Засунь себе в задницу свои пять звезд. Когда тут недоношенный суперхакеркиллер срет в каждом треде ты тут как мебель стоишь.

Повторю для питушков - любой, кто хоть что-то смыслет в коде, сишке и запиле никогда на меня вякать не будет, ибо а: - я прав, б: сольётся, с: он не лезет, ибо не идиот.

Обычно кукарекают всякие питушки-студенты, их учителя и прочиай анскильный сброд, который о программировании слышал где-то в детсаде и выше яслей не поднялся. Обычно эти питушки начинают съезжать с темы матчасти на другие - будь-то то, что он проходит сейчас в вузе или как он запилил сейтик себе в школе, а я ничего не сделал.

В теме, где ты кукарекал - питушок слился в говно и это понятно каждому, кто хоть что-то понимает в теме - т.е. 1-2% лора. А остальная гниль кукарекает.

anonymous ()
Ответ на: комментарий от anonymous

Некоторые котоебы тут думают что gcc — это компайлер богов и царей.

Сливай маздайское опделие в говно. Единственное, что он не умеет - это заменять говно на не говно, как делает это icc и пародию на это маздайское говно.

Я считаю что это не так, иногда gcc делает лучше, иногда наоборот.

Значит ты анскилен. gcc на нормальном коде делает почти всегда почти идеально. До этого говну типа маздайского говна ещё лет 10идти.

В любом случае они примерно одинаковые.

В мечтах твоих.

Часто инлайн не факт что даст прирост в скорости, а скорее наоборот.

Упоролсячтоли? Ты не смеши меня больше так. Откуда вы такие берётесь? Ещё раз для вас повторю - stl состоит из инлайна на 99% и именно благодаря инлайну она нормально оптимизируется.

Инлайн всегда даёт профит - запомни это, кроме редки исключений, но когда тебя эти исключения начнут волновать - ты уже будешь понимать как и почему работает инлайн и такую парашу нести не будешь.

anonymous ()
Ответ на: комментарий от Uter

И да, нормальный конпелятор инлайнит всё, кроме тех случаев где он тупит - у гцц это только указатели на функции в массивах, авось ещё где - я не видел.

А та параша под названием msvcc нихрена не конпелятор, а говно - выкинь.

anonymous ()
Ответ на: комментарий от Pavval

Я тут сижу с попкорном.

В жопу попкорн. Кащенко опять онлайн.

anonymous ()
Ответ на: комментарий от anonymous

любой, кто хоть что-то смыслет в коде

Это не ты, твой код — говно.

anonymous ()

msvc2012

Мы рады за вас. Продолжайте вести наблюдение.

darkenshvein ★★★★★ ()
Ответ на: комментарий от anonymous

Инлайн всегда даёт профит

Только в твоих хелловордах, а они — говно.

anonymous ()
Ответ на: комментарий от anonymous

И да, нормальный конпелятор инлайнит всё

Только в дурдоме, где ты и сидишь. И да, твой дурдом — говно. Не вылечат тебя там.

anonymous ()
Ответ на: комментарий от anonymous

инлайнит всё, кроме тех случаев где он тупит - у гцц это только указатели на функции в массивах

а «нетупящий» компилятор значит умеет инлайнить указатели на функции в массиве? :D

dib2 ★★★★★ ()
Ответ на: комментарий от dib2

а «нетупящий» компилятор значит умеет инлайнить указатели на функции в массиве? :D

Это царский компилятор, он делает все чего царь в своих влажных фантазиях представит. Царь непригрешим, значит заинлйнит. А кто не понял лалка и петух слил ф гавно!!!11АДЫНАДЫНАДЫН!

anonymous ()

1) вызов через указатель, инлайнится

Вот интересно, каким макаром? C++ магия?

shamaz ()
Ответ на: комментарий от anonymous

Я выложу нашу переписку, если там вдруг будет такой угар, разрешаешь?

shamaz ()
Ответ на: комментарий от anonymous

Инлайн всегда даёт профит - запомни это, кроме редки исключений, но когда тебя эти исключения начнут волновать - ты уже будешь понимать как и почему работает инлайн и такую парашу нести не будешь.

Инлайн засоряет кеш инструкций

shamaz ()
Ответ на: комментарий от shamaz

Инлайн засоряет кеш инструкций

Это у холопов засоряет и анскилов, царскый кеш незасоряем никогда и ничем!1АДЫН

anonymous ()
Ответ на: комментарий от shamaz

Царь ведь уже сообщил нам, что кэш не нужен вовсе.

anonymous ()
Ответ на: комментарий от shamaz

Вот я не пойму, ты это он или уже не он?

Конечено не царь, я же ботаю по фене и не обзываю тебя.

anonymous ()
Ответ на: комментарий от shamaz

> 1) вызов через указатель, инлайнится

Вот интересно, каким макаром? C++ магия?

Кстати в том конкретном примере кода может и заинлайнить.

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.