Size: a a a

2020 February 15

CC

Cool Cooler in C++ Together 2.0
Допустим, внутри цикла for (int i = 0; i < n; i++) у нас тело, выполняющееся за 1 инструкцию. Если n = 2^40, то будет выполнено 3 * 2^40 инструкций (ведь ещё будут выполняться инкремент и сравнение с джампом). Если мы выделим память для 2^20 инструкций и замостим её одной инструкцией тела цикла, ну и где-то рядом инкремент и сравнение с джампом будут выполняться всего 2^20 раз за всё время, то получим следующее:
На взятие памяти и её замощение с запасом пусть будет 2^30 инструкций, будут выполняться те же 2^40 инструкций с оверхедом 2^21 инструкций из-за итераций, итого где-то 2^40 с тележкой инструкций выполнено вместо 3 * 2^40 инструкций, ну и памяти занято, скажем, 40 мегабайт. Допустим, мы готовы (мы считаем её выгодной и оверхед по памяти нам не жалко) делать такую оптимизацию, если n >= 2^40, причём n определяется только в рантайме. Так вот. Можно ли такое сделать в C++ и как?
источник

EP

Evgeniy Pichuzhkin in C++ Together 2.0
Наверное -funroll-loops это то, что тебя интересует
источник

AF

Aidar Fattakhov in C++ Together 2.0
Cool Cooler
Допустим, внутри цикла for (int i = 0; i < n; i++) у нас тело, выполняющееся за 1 инструкцию. Если n = 2^40, то будет выполнено 3 * 2^40 инструкций (ведь ещё будут выполняться инкремент и сравнение с джампом). Если мы выделим память для 2^20 инструкций и замостим её одной инструкцией тела цикла, ну и где-то рядом инкремент и сравнение с джампом будут выполняться всего 2^20 раз за всё время, то получим следующее:
На взятие памяти и её замощение с запасом пусть будет 2^30 инструкций, будут выполняться те же 2^40 инструкций с оверхедом 2^21 инструкций из-за итераций, итого где-то 2^40 с тележкой инструкций выполнено вместо 3 * 2^40 инструкций, ну и памяти занято, скажем, 40 мегабайт. Допустим, мы готовы (мы считаем её выгодной и оверхед по памяти нам не жалко) делать такую оптимизацию, если n >= 2^40, причём n определяется только в рантайме. Так вот. Можно ли такое сделать в C++ и как?
Компилятор это за тебя сделает
источник

AF

Aidar Fattakhov in C++ Together 2.0
А ты кучу всего не учел
источник

AF

Aidar Fattakhov in C++ Together 2.0
(кэш инструкций)
источник

AF

Aidar Fattakhov in C++ Together 2.0
У гцц там есть какието нетривиальные оптимизации типа поменять порядок обхода  динамики в мнгомерном пространстве,

Не думай что компилятор тупой
источник

FO

FORTRAN ONE LOVE in C++ Together 2.0
Cool Cooler
Допустим, внутри цикла for (int i = 0; i < n; i++) у нас тело, выполняющееся за 1 инструкцию. Если n = 2^40, то будет выполнено 3 * 2^40 инструкций (ведь ещё будут выполняться инкремент и сравнение с джампом). Если мы выделим память для 2^20 инструкций и замостим её одной инструкцией тела цикла, ну и где-то рядом инкремент и сравнение с джампом будут выполняться всего 2^20 раз за всё время, то получим следующее:
На взятие памяти и её замощение с запасом пусть будет 2^30 инструкций, будут выполняться те же 2^40 инструкций с оверхедом 2^21 инструкций из-за итераций, итого где-то 2^40 с тележкой инструкций выполнено вместо 3 * 2^40 инструкций, ну и памяти занято, скажем, 40 мегабайт. Допустим, мы готовы (мы считаем её выгодной и оверхед по памяти нам не жалко) делать такую оптимизацию, если n >= 2^40, причём n определяется только в рантайме. Так вот. Можно ли такое сделать в C++ и как?
после того, как я увидел, с какой реально скоростью компьютер щелкает квантово-химические задачки, я перестал париться из-за циклов
источник

CC

Cool Cooler in C++ Together 2.0
Я думаю начать осваивать нейронные сети, а там мне всегда нужно больше вычислительной мощности (чтобы я мог себе позволить более хорошее обучение).
источник

AF

Aidar Fattakhov in C++ Together 2.0
К тому же количество инструкций дает 0 инфы о производительности и времени выполнения
источник

AF

Aidar Fattakhov in C++ Together 2.0
Cool Cooler
Я думаю начать осваивать нейронные сети, а там мне всегда нужно больше вычислительной мощности (чтобы я мог себе позволить более хорошее обучение).
Учись в автовекторизацию лучше
источник

CC

Cool Cooler in C++ Together 2.0
Aidar Fattakhov
Учись в автовекторизацию лучше
Это что? Это о чём?
источник

EP

Evgeniy Pichuzhkin in C++ Together 2.0
sse, avx
источник

EP

Evgeniy Pichuzhkin in C++ Together 2.0
Хотя авто- не про это
источник

AF

Aidar Fattakhov in C++ Together 2.0
Это написать код так чтобы компилятор об него не споткнулся при попытке применить avx512
источник

CC

Cool Cooler in C++ Together 2.0
Хммм
источник

CC

Cool Cooler in C++ Together 2.0
Aidar Fattakhov
Это написать код так чтобы компилятор об него не споткнулся при попытке применить avx512
Хмм
источник

CC

Cool Cooler in C++ Together 2.0
А что это?
источник

CC

Cool Cooler in C++ Together 2.0
sse, avx, avx512
источник

EP

Evgeniy Pichuzhkin in C++ Together 2.0
Наборы векторных инструкций
источник

CC

Cool Cooler in C++ Together 2.0
Хммм
источник