Size: a a a

Compiler Development

2021 June 13

[

[BRM]White Rabbit in Compiler Development
стоит заметить, что функции-то структурированы обычно в виде дерева, а не как отдельные сущности. Это не помешает нормально их разбирать?
источник

[

[BRM]White Rabbit in Compiler Development
хотя нет, не дерева, а графа
источник

Miss Очепятка... in Compiler Development
Cхема 4:2 4 ядра 2-х кратный рост скорости. Текст разбивается пополам по длине ищем первый пробел. Тем самым выровняли на лексему каждую первую половину парим 1 ядром вторую парим оставшимися 3 ядрами каждое ядро получает на вход своё состояние: либо комментарий, либо строка, либо обычный текст.   Все 4 ядра заканчивают разом. За половину времени от исходной длины файла. Когда первое ядро закончит мы будем знать какое из 3-х начальных cотояний верно. Неверные выкидываются, а верные результаты cшиваютя. Список лексем делаем через указатели поэтому сшивка занимает время Т(1).
источник

EZ

Evgenii Zheltonozhsk... in Compiler Development
Всего на два порядка меньше ядер чем в gpu
источник

Miss Очепятка... in Compiler Development
Семантика это определения типа переменной. Или Вы что-то большое имеете в виду? Да тут надо обойти дерево или граф. Но для каждой функции и даже statement мы можем делать это независимо и параллельно.
Вот с шаблонами да тут могут возникнуть трудности.
А оптимизация на уровне O1 O2 O3 нормально параллелится по функция вот на уровне O4 где у нас идёт оптимизация на уровне классов и функций тут будут проблемы.
источник

VS

Victor Shamparov in Compiler Development
Не стоит обобщать, что -O1, -O2 и -O3 проводят оптимизации только на уровне до процедур включительно. Я прямо сейчас посмотрел доку gcc - там первая inline подстановка уже на -O1. Так что практически неизбежно получается, что есть плохо параллелизуемая часть оптимизаций.
Но спорить с тем, что оптимизации уровня процедуры и ниже хорошо параллелятся по процедурам, не буду.
источник

AT

Alexander Tchitchigi... in Compiler Development
Интернет говорит, что топовая Nvidia Ampere карточка содержит 108 SMs и 64 FP32 Cores / SM. Итого 6912 FP32 Cores максимум. Это на один порядок больше, чем 128 ядер. Ну и понятно, что на CPU ядра жирнее.
источник

EZ

Evgenii Zheltonozhsk... in Compiler Development
Не знаю что говорит интернет, но в 3090 всего 10496 cores (82 SM и 128 cores per SM). В RTX A6000 их 10752 (84 SM)
источник

[

[BRM]White Rabbit in Compiler Development
Если уж мы обращаем внимание на цифры... то разница в 1.7 порядков :)
Уместно ли округление до 2? А до 1?
источник

kO

kikimych O_O in Compiler Development
Регистры там векторные
источник

kO

kikimych O_O in Compiler Development
Треды/варпы это не смт потоки, а итерации циклов
источник

AT

Alexander Tchitchigi... in Compiler Development
Не уверен, что можно считать общее количество ядер — как я понял, там теперь несколько видов ядер рядом стоят: CUDA Cores + Tensor Cores + RTX Cores. RTX Cores только в консьюмерские карточки пихают, но не в серверные по понятным причинам. Не уверен, что Tensor Cores хоть как-то можно сравнивать с CPU Cores. Так что...
источник

EZ

Evgenii Zheltonozhsk... in Compiler Development
Я только про cuda cores
источник

AT

Alexander Tchitchigi... in Compiler Development
И откуда Вы взяли эти числа?
источник

EZ

Evgenii Zheltonozhsk... in Compiler Development
источник

kO

kikimych O_O in Compiler Development
Очень условно можно оценить количество потоков, как число потоковых процессоров * число simd пайплайнов
источник

AT

Alexander Tchitchigi... in Compiler Development
Спасибо. Что-то у меня в голове не все концы с концами сходятся, ну да пёс с ними, поверим на слово. 😊
источник

EZ

Evgenii Zheltonozhsk... in Compiler Development
после A100 они придумали как воткнуть в 2 раза больше FP32 cores в SM)
источник

AT

Alexander Tchitchigi... in Compiler Development
Ну, ОК, молодцы, чё. 😁
источник

AT

Alexander Tchitchigi... in Compiler Development
Для пущей важности выскажу очевидное: ядра CPU и GPU можно сравнивать только очень условно.
источник