Size: a a a

Compiler Development

2020 March 08

DF

Dollar Føølish in Compiler Development
Есть ещё хитрое взаимодействие между fpu & sse & avx
источник

E

EgorBo in Compiler Development
это ты скорее про микс старой и VEX
источник

DF

Dollar Føølish in Compiler Development
По перформансу)
источник

E

EgorBo in Compiler Development
который решеается через vzeroupper
источник

DF

Dollar Føølish in Compiler Development
Понятно
источник

FO

FORTRAN ONE LOVE in Compiler Development
EgorBo
там грубо говоря три группы инструкций, есть те, которые не напрягают процессор, аля сложить 2 вектора, а есть те от которых он сильно потеет (всякие сложные перестановки и т.п.)
Может нахрен тогда векторные инструкции, а где они нужны, использовать векторные процессоры от NEC?(-:
источник

FO

FORTRAN ONE LOVE in Compiler Development
источник

E

EgorBo in Compiler Development
люди ошибочно думают что векторные инструкции - это про "прогнать огромный объем данных" монотонными операциями.
и это всегда речь про векторизацию циклов.

векторы нужны даже просто в каком-нибудь безобидном поиске символа в небольшой строке 😊
источник

FO

FORTRAN ONE LOVE in Compiler Development
EgorBo
люди ошибочно думают что векторные инструкции - это про "прогнать огромный объем данных" монотонными операциями.
и это всегда речь про векторизацию циклов.

векторы нужны даже просто в каком-нибудь безобидном поиске символа в небольшой строке 😊
В моем случае - ошибочное думание таки правльный ответ
источник

E

EgorBo in Compiler Development
в АВХ-512 суть не в размере вектора кстати, а в большом кол-ве новых операций
источник

M

MaxGraey in Compiler Development
у 512-битных команд/регистров есть еще один недостаток. Желательно что бы адреса были выровнены по границе в 64 байта а это уже далеко не 16 или 8 байт что приводит к фрагментации памяти. Можно и не выравнивать конечно и жертвовать производительностью во время чтения и записи
источник

FO

FORTRAN ONE LOVE in Compiler Development
EgorBo
в АВХ-512 суть не в размере вектора кстати, а в большом кол-ве новых операций
Хм. Ну в матрицах, в основном, нужно A*X, X*Y, A+X, X+Y
источник

FO

FORTRAN ONE LOVE in Compiler Development
FORTRAN ONE LOVE
Хм. Ну в матрицах, в основном, нужно A*X, X*Y, A+X, X+Y
A - число, X,Y - матрицы
источник

E

EgorBo in Compiler Development
кстати, матрица4х4 из флотов влезает в один регистр целиком -_-
источник

FO

FORTRAN ONE LOVE in Compiler Development
EgorBo
кстати, матрица4х4 из флотов влезает в один регистр целиком -_-
Добавить операцию перемножения матриц 4x4 как отдельные операции!)
источник

FO

FORTRAN ONE LOVE in Compiler Development
Превратим ЦПУ в ГПУ
источник

M

MaxGraey in Compiler Development
EgorBo
кстати, матрица4х4 из флотов влезает в один регистр целиком -_-
и применяется только в CG. Дкмаю для научных расчетов это не сильно полезно. Там матрицы произвольных размеров и в double как минимум
источник

E

EgorBo in Compiler Development
MaxGraey
и применяется только в CG. Дкмаю для научных расчетов это не сильно полезно. Там матрицы произвольных размеров и в double как минимум
ага
источник

DG

Denis Gabidullin in Compiler Development
Всем привет!

Вопрос касается сравнения скорости выполнения программ, собранных gcc и clang из одного простого исходника.

Исходник:
https://pastebin.com/e2r5GCnq

asm, полученный clang:
https://pastebin.com/ybebCYHM

asm, полученный gcc:
https://pastebin.com/Bq9EgzLN

Как собиралось:
$ clang -pedantic -Wall -Ofast -S -o clang.S main.c
$ gcc -pedantic -Wall -Ofast -S -o gcc.S main.c
$ clang -pedantic -Wall -Ofast -o clang main.c
$ gcc -pedantic -Wall -Ofast -o gcc main.c

Результаты:
$ time ./clang
cnt = 4096000000
./clang  1.14s user 0.00s system 99% cpu 1.145 total

$ time ./gcc
cnt = 4096000000
./gcc  3.26s user 0.00s system 99% cpu 3.259 total

Версии:
$ clang -v
clang version 8.0.1-7 (tags/RELEASE_801/final)
Target: x86_64-pc-linux-gnu
...

$ gcc -v
...
gcc version 9.2.1 20200203 (Debian 9.2.1-28)

Целевой CPU — Intel(R) Core(TM) i7-3930K CPU @ 3.20GHz


Вопросы:
1. Почему gcc при одинаковых условиях собирает из такого, казалось бы простого кода, настолько менее оптимально?
2. Как помочь gcc получить результаты, сравнимые с clang?


Если вопрос не по теме чата — прошу простить и сообщить. Удалю)
источник

FO

FORTRAN ONE LOVE in Compiler Development
Denis Gabidullin
Всем привет!

Вопрос касается сравнения скорости выполнения программ, собранных gcc и clang из одного простого исходника.

Исходник:
https://pastebin.com/e2r5GCnq

asm, полученный clang:
https://pastebin.com/ybebCYHM

asm, полученный gcc:
https://pastebin.com/Bq9EgzLN

Как собиралось:
$ clang -pedantic -Wall -Ofast -S -o clang.S main.c
$ gcc -pedantic -Wall -Ofast -S -o gcc.S main.c
$ clang -pedantic -Wall -Ofast -o clang main.c
$ gcc -pedantic -Wall -Ofast -o gcc main.c

Результаты:
$ time ./clang
cnt = 4096000000
./clang  1.14s user 0.00s system 99% cpu 1.145 total

$ time ./gcc
cnt = 4096000000
./gcc  3.26s user 0.00s system 99% cpu 3.259 total

Версии:
$ clang -v
clang version 8.0.1-7 (tags/RELEASE_801/final)
Target: x86_64-pc-linux-gnu
...

$ gcc -v
...
gcc version 9.2.1 20200203 (Debian 9.2.1-28)

Целевой CPU — Intel(R) Core(TM) i7-3930K CPU @ 3.20GHz


Вопросы:
1. Почему gcc при одинаковых условиях собирает из такого, казалось бы простого кода, настолько менее оптимально?
2. Как помочь gcc получить результаты, сравнимые с clang?


Если вопрос не по теме чата — прошу простить и сообщить. Удалю)
Фуфуфуфу. Попробуйте в структуре оставить только f3
источник