The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Влияние несущественных изменений кода на производительность ..."
Отправлено Акакжев, 09-Окт-18 14:37 
> Данной оптимизация отключена, поскольку обратная опция находится в зависимостях других
> опций вроде C++ исключений. Без которых GCC не может сгенерировать рабочий
> код.

По поводу "других" в документации сказано: Omit the frame pointer in functions that don't need one.

make V=1 показывает, что fomit-frame-pointer передаётся компилятору.
Пример навскидку.


void cyc2ns_read_begin(struct cyc2ns_data *data)
{
        int seq, idx;

        preempt_disable_notrace();

        do {
                seq = this_cpu_read(cyc2ns.seq.sequence);
                idx = seq & 1;

                data->cyc2ns_offset = this_cpu_read(cyc2ns.data[idx].cyc2ns_offset);
                data->cyc2ns_mul    = this_cpu_read(cyc2ns.data[idx].cyc2ns_mul);
                data->cyc2ns_shift  = this_cpu_read(cyc2ns.data[idx].cyc2ns_shift);

        } while (unlikely(seq != this_cpu_read(cyc2ns.seq.sequence)));
}

void cyc2ns_read_end(void)
{
        preempt_enable_notrace();
}


Прошу прощения, если кому непривычен формат,
отсутствие фреймов видно:

.text:0000000000000228 cyc2ns_read_begin proc near
.text:0000000000000228                 inc     gs:__preempt_count
.text:000000000000022F                 mov     rsi, offset cyc2ns
.text:0000000000000236 loc_236:
.text:0000000000000236                 mov     edx, dword ptr gs:cyc2ns+20h
.text:000000000000023D                 mov     eax, edx
.text:000000000000023F                 and     eax, 1
.text:0000000000000242                 shl     rax, 4
.text:0000000000000246                 add     rax, rsi
.text:0000000000000249                 mov     rcx, gs:[rax+8]
.text:000000000000024E                 mov     [rdi+8], rcx
.text:0000000000000252                 mov     ecx, gs:[rax]
.text:0000000000000255                 mov     [rdi], ecx
.text:0000000000000257                 mov     eax, gs:[rax+4]
.text:000000000000025B                 mov     [rdi+4], eax
.text:000000000000025E                 mov     eax, dword ptr gs:cyc2ns+20h
.text:0000000000000265                 cmp     edx, eax
.text:0000000000000267                 jnz     short loc_236
.text:0000000000000269                 retn
.text:0000000000000269 cyc2ns_read_begin endp


.text:000000000000026A cyc2ns_read_end proc near
.text:000000000000026A                 dec     gs:__preempt_count
.text:0000000000000271                 jnz     short locret_278
.text:0000000000000273                 call    ___preempt_schedule_notrace
.text:0000000000000278 locret_278:
.text:0000000000000278                 retn
.text:0000000000000278 cyc2ns_read_end endp
.text:0000000000000278


Можно предположить, что собирали там с опцией CONFIG_FRAME_POINTER.

grep -C2 frame-pointer Makefile

HOSTCFLAGS   := -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 \
                -fomit-frame-pointer -std=gnu89 $(HOST_LFS_CFLAGS)

--
ifdef CONFIG_FRAME_POINTER
KBUILD_CFLAGS   += -fno-omit-frame-pointer -fno-optimize-sibling-calls
else
# Some targets (ARM with Thumb2, for example), can't be built with frame
# pointers.  For those, we don't have FUNCTION_TRACER automatically
# select FRAME_POINTER.  However, FUNCTION_TRACER adds -pg, and this is
# incompatible with -fomit-frame-pointer with current GCC, so we don't use
# -fomit-frame-pointer with FUNCTION_TRACER.
ifndef CONFIG_FUNCTION_TRACER
KBUILD_CFLAGS   += -fomit-frame-pointer
endif
endif

В таком случае, возникает вопрос: влияет ли она на эффект от inline?
 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру