powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Call stack, assembler listing
15 сообщений из 65, страница 3 из 3
Call stack, assembler listing
    #39260020
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Старина Торвальдс разразился кирпичами по поводу GCC.

Вот такие дела. Что такое "вытеснение константы" - я честно говоря не понял. Кто знает - прошу прояснить.
...
Рейтинг: 0 / 0
Call stack, assembler listing
    #39260027
Фотография Новый Год
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonСтарина Торвальдс разразился кирпичами по поводу GCC.

Вот такие дела. Что такое "вытеснение константы" - я честно говоря не понял. Кто знает - прошу прояснить.

move $load_balance_mask, -136(%rbp) #, %sfp

$load_balance_mask это видимо константа, надо в исходники смотреть
ее не надо в стек записывать, а надо непосредственно использовать $load_balance_mask в ассемблерных командах
...
Рейтинг: 0 / 0
Call stack, assembler listing
    #39260029
Фотография Новый Год
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а ну да вот

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
 movq $load_balance_mask, -136(%rbp)
 subq $184, %rsp
movq (%rdx), %rax
movl %edi, -144(%rbp)
movl %ecx, -140(%rbp)
movq %r8, -200(%rbp)
movq %rax, -184(%rbp)
 movq -136(%rbp), %rax
 add %gs:this_cpu_off, %rax

должно было быть
move $load_balance_mask,%rax
...
Рейтинг: 0 / 0
Call stack, assembler listing
    #39260031
Фотография Новый Год
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тоесть
movq $load_balance_mask,%rax
...
Рейтинг: 0 / 0
Call stack, assembler listing
    #39260040
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonСтарина Торвальдс разразился кирпичами по поводу GCC.

Вот такие дела. Что такое "вытеснение константы" - я честно говоря не понял. Кто знает - прошу прояснить.
Вообще-то он года два назад разразился на эту тему
Если это что-то новое, то для приличия не мешало бы ссылку на то что просите прокомментировать.
...
Рейтинг: 0 / 0
Call stack, assembler listing
    #39260095
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ага точно. От 2014 года.
...
Рейтинг: 0 / 0
Call stack, assembler listing
    #39260519
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Новый Года ну да вот

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
 movq $load_balance_mask, -136(%rbp)
 subq $184, %rsp
movq (%rdx), %rax
movl %edi, -144(%rbp)
movl %ecx, -140(%rbp)
movq %r8, -200(%rbp)
movq %rax, -184(%rbp)
 movq -136(%rbp), %rax
 add %gs:this_cpu_off, %rax

должно было быть
move $load_balance_mask,%rax
По моему ошибка не в этом, а в
movq %r8, -200(%rbp)
Т.к под локальные переменные выделено меньше:
subq $184, %rsp

Но да, баян. Хотя повторюсь про укуренный компилятор )
...
Рейтинг: 0 / 0
Call stack, assembler listing
    #39260549
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Siemargl, а я вот посмотрел на асм-сорцы которые генерит gcc для Card-Rayrtracer и остался очень доволен.
Там кругом одни xmm регисты а я хотел лезть туда грязными руками и форсировать оптимизацию
векторного умножения. Ха... наивняк... Хотя возможно руку можно приложить.

Код: plaintext
1.
2.
3.
	double operator%(const Vector &r) {
		return x * r.x + y * r.y + z * r.z;
	}
...
Рейтинг: 0 / 0
Call stack, assembler listing
    #39260577
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

XMM тоже медленные операции, AVX быстрее, хотя тут компилятор справится с выбором. На stackoverflow пробегало сравнение в 500 раз разницы.

А вот руку надо прикладывать, чтобы параллельно несколько трасс считать.

Компилятор сам этого не сделает, руками надо по другому циклы организовывать было.

В такую параллелизацию компилятором я пока не верю для нетривиальных случаев.
...
Рейтинг: 0 / 0
Call stack, assembler listing
    #39260623
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Siemargl, кажется эту штуку я ищу FMA (Fused-Multiply-Add)

http://stackoverflow.com/questions/15933100/how-to-use-fused-multiply-add-fma-instructions-with-sse-avx
...
Рейтинг: 0 / 0
Call stack, assembler listing
    #39260640
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonSiemargl, кажется эту штуку я ищу FMA (Fused-Multiply-Add)

http://stackoverflow.com/questions/15933100/how-to-use-fused-multiply-add-fma-instructions-with-sse-avx
Да, с подобным поведением я тоже сталкивался.

Суть проблемы - чтобы не допустить ошибку округления даже порядка 1E-7, компилятор обычно генерит интрисинк функцию, которая считает медленнее раз в 50.
...
Рейтинг: 0 / 0
Call stack, assembler listing
    #39260642
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Читаю про Relaxed в GCC.

https://gcc.gnu.org/wiki/FloatingPointMath
...
Рейтинг: 0 / 0
Call stack, assembler listing
    #39260802
Фотография Новый Год
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglНовый Года ну да вот

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
 movq $load_balance_mask, -136(%rbp)
 subq $184, %rsp
movq (%rdx), %rax
movl %edi, -144(%rbp)
movl %ecx, -140(%rbp)
movq %r8, -200(%rbp)
movq %rax, -184(%rbp)
 movq -136(%rbp), %rax
 add %gs:this_cpu_off, %rax
должно было быть
move $load_balance_mask,%rax
По моему ошибка не в этом, а в
movq %r8, -200(%rbp)
Т.к под локальные переменные выделено меньше:
subq $184, %rsp

Но да, баян. Хотя повторюсь про укуренный компилятор )

туда можно писать, 128 байт за stack pointer

авторThe red-zone is a feature described in the x86-64 ABI.

It is a 128 byte long region located directly below the stack pointer. This region is free-for-use for the compiler without the requirement to notify the application / the os or any running interrupt handler.

For user applications there is no issue as interrupts and other kernel related code won't interfere with the user stack. In your kernel however things can get ugly, especially so if you have nested interrupts and no red-zone support. Imagine running inside your interrupt handler, gcc puts some data inside the red zone, a nested interrupt occurs and clobbers the red-zone or vice versa.

To get around this the red-zone can be disabled by passing -mno-red-zone to GCC.
...
Рейтинг: 0 / 0
Call stack, assembler listing
    #39260834
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда в коде вообще нет ошибки, если только это крайняя (leaf) функция.

Ясно, https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61904 - это ядро и в нем нельзя использовать red zone

Вот пример использования и неиспользования
http://stackoverflow.com/questions/13201644/why-does-the-x86-64-gcc-function-prologue-allocate-less-stack-than-the-local-var

Кстати, это уже с оптимизацией -О1 и код по прежнему ужасен.
...
Рейтинг: 0 / 0
Call stack, assembler listing
    #39260843
Фотография Новый Год
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а где ассемлерные директивы описаны?
вот эти

.cfi_startproc
.cfi_def_cfa_offset 16
.cfi_def_cfa_register 6

или вот это:

автор196 .weak _ZTV1B
197 .section .rodata._ZTV1B,"aG",@progbits,_ZTV1B,comdat
198 .align 32
199 .type _ZTV1B, @object
200 .size _ZTV1B, 40
201 _ZTV1B:
202 0000 00000000 .quad 0
202 00000000
203 0008 00000000 .quad _ZTI1B
203 00000000
204 0010 00000000 .quad _ZN1B3fooEv
204 00000000
205 0018 00000000 .quad _ZN1BD1Ev
205 00000000
206 0020 00000000 .quad _ZN1BD0Ev
206 00000000

я понимаю, что последнее -- это табличка виртуальных функций
но вот читать несколько напряжно когда слов не знаешь
туториал бы какой
...
Рейтинг: 0 / 0
15 сообщений из 65, страница 3 из 3
Форумы / C++ [игнор отключен] [закрыт для гостей] / Call stack, assembler listing
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]