(video) Transform your geometry with Metal mesh shaders
Mesh shader в Metal.
API не сильно отличается от Vk/DX12, так что портирование не должно вызвать затруднения.
Object shader (task shader в Vk/DX12) проверяет видимость мешлетов и запускает нужное количество меш групп.
Mesh shader генерирует или читает и трансформирует вершины мешлета.
Дальше все как обычно - позиция трансформируется в экранную, нарезаются тайлы и запускается потайловая растеризация.
То есть в отличие от десктопа, где все вершинны всегда в кэше, здесь в любом случае сгенерированные вершины выгружаются в системную память после нарезания на тайлы, чтобы освободить кэш для растеризации тайла.
Все преимущество только в отсечении невидимых мешлетов на ГП и в выборе уровне детализации. Все это можно было сделать и до меш шейдера.
#metal #apple_gpu
Mesh shader в Metal.
API не сильно отличается от Vk/DX12, так что портирование не должно вызвать затруднения.
Object shader (task shader в Vk/DX12) проверяет видимость мешлетов и запускает нужное количество меш групп.
Mesh shader генерирует или читает и трансформирует вершины мешлета.
Дальше все как обычно - позиция трансформируется в экранную, нарезаются тайлы и запускается потайловая растеризация.
То есть в отличие от десктопа, где все вершинны всегда в кэше, здесь в любом случае сгенерированные вершины выгружаются в системную память после нарезания на тайлы, чтобы освободить кэш для растеризации тайла.
Все преимущество только в отсечении невидимых мешлетов на ГП и в выборе уровне детализации. Все это можно было сделать и до меш шейдера.
#metal #apple_gpu
(video) Metal Compute on MacBook Pro
Различные советы по оптимизации на уровне API и шейдеров.
10:46 - ГП содержит отдельный кэш для буферов и текстур, лучше использовать оба кэша.
15:19 - рекомендуют использовать int вместо uint для обхода массивов.
14:32 .. 22:31 - примеры оптимизации и профилирования.
#gpu_opt #apple_gpu
Различные советы по оптимизации на уровне API и шейдеров.
10:46 - ГП содержит отдельный кэш для буферов и текстур, лучше использовать оба кэша.
15:19 - рекомендуют использовать int вместо uint для обхода массивов.
14:32 .. 22:31 - примеры оптимизации и профилирования.
#gpu_opt #apple_gpu
Explore GPU advancements in M3 and A17 Pro
4:39 - Архитектура ГП.
7:09 - Что-то вроде гипертрединга, пока одна группа потоков (SIMDgroup) ждет чтение из памяти, другая группа потоков делает рассчеты на том же ядре. Динамическая память регистров позволяет разместить 2 потока в одном.
11:14 - 3 разных кэша объединили в один большой. Если какой-то кэш не используется, то память не будет простаивать.
14:18 - ГП оптимизированы под вычисления на fp16. Fp32, fp16, int выполняются параллельно, пока между ними нет зависимости (конвертация типов, общая память и тд).
16:54 - Как улучшилась производительность при переносе трассировки лучей в железо. Добавили перераспределение потоков, аналогично SER от NVidia.
23:12 - Перераспределение потоков работает только при использовании
24:50 - Про меш шейдеры. Теперь меньше данных выгружается в ситемную память и больше остается в памяти чипа. Но говорят только про промежуточные данные мешлета, то есть данные между таск и меш шейдером. Тогда как в тайловой архитектуре примитивы еще нарезаются и выгружаются в системную память, похоже эту часть не оптимизировали.
#apple_gpu #metal
4:39 - Архитектура ГП.
7:09 - Что-то вроде гипертрединга, пока одна группа потоков (SIMDgroup) ждет чтение из памяти, другая группа потоков делает рассчеты на том же ядре. Динамическая память регистров позволяет разместить 2 потока в одном.
11:14 - 3 разных кэша объединили в один большой. Если какой-то кэш не используется, то память не будет простаивать.
14:18 - ГП оптимизированы под вычисления на fp16. Fp32, fp16, int выполняются параллельно, пока между ними нет зависимости (конвертация типов, общая память и тд).
16:54 - Как улучшилась производительность при переносе трассировки лучей в железо. Добавили перераспределение потоков, аналогично SER от NVidia.
23:12 - Перераспределение потоков работает только при использовании
intersector<>::intersect()
, и не работает для ray query.24:50 - Про меш шейдеры. Теперь меньше данных выгружается в ситемную память и больше остается в памяти чипа. Но говорят только про промежуточные данные мешлета, то есть данные между таск и меш шейдером. Тогда как в тайловой архитектуре примитивы еще нарезаются и выгружаются в системную память, похоже эту часть не оптимизировали.
#apple_gpu #metal