Size: a a a

pro.graphon (and gamedev)

2021 April 09

VK

Vitaliy ◀️TriΔng3l▶️... in pro.graphon (and gamedev)
И constant propagation для объекта справа, и анализировать operator= объекта слева, чтобы были заполнены все поля, и именно копированием (либо простым, либо заинлайненным, сводящимся к простому)
источник

D

Deathwish in pro.graphon (and gamedev)
Вообще, даже свой sse вариант на выровненной памяти похоже не быстрее memset
источник

AT

Anatoly Tomilov in pro.graphon (and gamedev)
а заглянуть что там генерируется memset-ом не судьба? Ну или почитать. Не в курсе, что memmove/memset — это уже давно intrinsic функции в компиляторах?
источник

AT

Anatoly Tomilov in pro.graphon (and gamedev)
они в оптимальный код разворачиваются с учётом всего, что знает компилятор на момент вызова
источник

AT

Anatoly Tomilov in pro.graphon (and gamedev)
так и не пойму, чем sse так хорош для копирования памяти
источник

AT

Anatoly Tomilov in pro.graphon (and gamedev)
или заполнения
источник

D

Deathwish in pro.graphon (and gamedev)
Потому что он за одну инструкцию может 16 байт обнулить
источник

VK

Vitaliy ◀️TriΔng3l▶️... in pro.graphon (and gamedev)
А AVX 32)
источник

VK

Vitaliy ◀️TriΔng3l▶️... in pro.graphon (and gamedev)
А строковые инструкции вообще как-то хитро на Intel (на AMD не знаю, дают ли прирост)
источник

VK

Vitaliy ◀️TriΔng3l▶️... in pro.graphon (and gamedev)
а вообще, топчик это GPU DMA :D
источник

VK

Vitaliy ◀️TriΔng3l▶️... in pro.graphon (and gamedev)
а, не, с PCI-Express, наверно, нет, это на UMA
источник

AT

Anatoly Tomilov in pro.graphon (and gamedev)
в цикле, наверное? То есть то, что это одна инструкция — это не важно по факту. Т.к. инструкции не-sse кода, обнуляющего память, тоже декодируются и помещаются в кеш инструкций целиком. Конвейер — не узкое место и в случае sse и в случае без sse.
источник

D

Deathwish in pro.graphon (and gamedev)
источник

AT

Anatoly Tomilov in pro.graphon (and gamedev)
CPU is so much faster than RAM that pure block memory copy is 100% I/O bounded отсюда
источник

VK

Vitaliy ◀️TriΔng3l▶️... in pro.graphon (and gamedev)
А доступ к кэшу кусочками по 4 байта вместо 16 или 32 это нормально?
источник

AT

Anatoly Tomilov in pro.graphon (and gamedev)
пишут, что доступ к данным, которые уже есть в L1 кеше, быстрее с AVX (чуть медленнее с SSE). Но при заполнении больших буферов, я так понимаю, разницы со строковой инструкцией уже нет
источник

VK

Vitaliy ◀️TriΔng3l▶️... in pro.graphon (and gamedev)
Строковые инструкции вообще как-то по-особому выполняются, как я понял
источник

VK

Vitaliy ◀️TriΔng3l▶️... in pro.graphon (and gamedev)
Не как тупо повтор одной и той же операции
источник

D

Deathwish in pro.graphon (and gamedev)
По иронии судьбы, старая команда rep stosq X86 работает намного лучше, чем SSE и AVX, с точки зрения копирования памяти!
источник

D

Deathwish in pro.graphon (and gamedev)
Вот и всё объяснение на самом деле
источник