Size: a a a

Compiler Development

2020 March 08

FO

FORTRAN ONE LOVE in Compiler Development
Антон, приветствуем!
источник

AP

Antony Polukhin in Compiler Development
Спасибки!
источник

DG

Denis Gabidullin in Compiler Development
FORTRAN ONE LOVE
Фуфуфуфу. Попробуйте в структуре оставить только f3
1. Уже проверял. Тогда gcc станет получше, но всё равно будет хуже, чем у clang. Просто текущий вариант ближе к исходной задачи, которая привела к вопросу).
2. Конкретные числа сейчас скину.
3. К чему относится оценка "фуфуфу"?)
источник

FO

FORTRAN ONE LOVE in Compiler Development
Denis Gabidullin
1. Уже проверял. Тогда gcc станет получше, но всё равно будет хуже, чем у clang. Просто текущий вариант ближе к исходной задачи, которая привела к вопросу).
2. Конкретные числа сейчас скину.
3. К чему относится оценка "фуфуфу"?)
А насколько gcc станет лучше?
источник

DG

Denis Gabidullin in Compiler Development
FORTRAN ONE LOVE
А насколько gcc станет лучше?
В структуре осталось только одно поле, f3:
$ time ./clang
cnt = 4096000000
./clang  1.14s user 0.00s system 99% cpu 1.140 total

$ time ./gcc
cnt = 4096000000
./gcc  2.23s user 0.00s system 99% cpu 2.236 total
источник

FO

FORTRAN ONE LOVE in Compiler Development
Denis Gabidullin
В структуре осталось только одно поле, f3:
$ time ./clang
cnt = 4096000000
./clang  1.14s user 0.00s system 99% cpu 1.140 total

$ time ./gcc
cnt = 4096000000
./gcc  2.23s user 0.00s system 99% cpu 2.236 total
А если еще и проверку на f3=0 убрать?
источник

DG

Denis Gabidullin in Compiler Development
FORTRAN ONE LOVE
А если еще и проверку на f3=0 убрать?
./clang  0.60s user 0.00s system 99% cpu 0.599 total

./gcc  2.09s user 0.00s system 99% cpu 2.090 total
источник

FO

FORTRAN ONE LOVE in Compiler Development
Denis Gabidullin
./clang  0.60s user 0.00s system 99% cpu 0.599 total

./gcc  2.09s user 0.00s system 99% cpu 2.090 total
Отлично. А теперь вместо внешнего цикла слелацте умножение на констаниу?
источник

FO

FORTRAN ONE LOVE in Compiler Development
Так. Чтото я затупил
источник

DG

Denis Gabidullin in Compiler Development
FORTRAN ONE LOVE
Отлично. А теперь вместо внешнего цикла слелацте умножение на констаниу?
Странная идея)
Внешний цикл для количества нужен)
источник

M

MaxGraey in Compiler Development
Denis Gabidullin
./clang  0.60s user 0.00s system 99% cpu 0.599 total

./gcc  2.09s user 0.00s system 99% cpu 2.090 total
источник

FO

FORTRAN ONE LOVE in Compiler Development
Эта штука вообше считает число нулевых элементов и умножает его на 4096
источник

M

MaxGraey in Compiler Development
если коротко то clang разворачивает цикл а gcc - нет
источник

DG

Denis Gabidullin in Compiler Development
MaxGraey
если коротко то clang разворачивает цикл а gcc - нет
Да, это видно по листингу, которые я скинул)
Вопрос — почему?
источник

FO

FORTRAN ONE LOVE in Compiler Development
Denis Gabidullin
Да, это видно по листингу, которые я скинул)
Вопрос — почему?
Умный!
источник

DG

Denis Gabidullin in Compiler Development
Неужели gcc настолько неумный?)
источник

M

MaxGraey in Compiler Development
попробуйте сделать так:

__attribute__((optimize("unroll-loops")))
int main(void)
{
  …
}
источник

M

MaxGraey in Compiler Development
Возможно GCC не хочет разворачивать циклы именно в main по ряду причин
источник

DG

Denis Gabidullin in Compiler Development
MaxGraey
попробуйте сделать так:

__attribute__((optimize("unroll-loops")))
int main(void)
{
  …
}
./clang  1.15s user 0.00s system 99% cpu 1.155 total
./gcc  2.44s user 0.00s system 99% cpu 2.437 total

gcc развернул, но всё-равно не догнал
источник

DG

Denis Gabidullin in Compiler Development
MaxGraey
Возможно GCC не хочет разворачивать циклы именно в main по ряду причин
А можете сказать, по каким конкретно причинам?
источник