Порядок выполнения в ядрах CUDA или OpenCL - для оптимизации доступа к памяти - PullRequest
0 голосов
/ 31 мая 2018

Есть ли какой-нибудь намек относительно порядка выполнения ядер?

Допустим, я начинаю обработку сетки 1024x1024 с рабочими группами 8x8.И у меня 1080 с 20 вычислительными блоками на 128 ядер - всего 2560 ядер.

Теперь ясно, что в среднем каждое физическое ядро ​​будет обрабатывать в среднем около 400 элементов в сетке.Вопрос, какой статистически будет порядок выполнения каждого ядра?Будет ли это основной ряд?Основная колонка или каждое ядро ​​получит свою собственную «подрайон» для работы?

Вопрос важен для того, чтобы обеспечить доступ к памяти для кеша.

1 Ответ

0 голосов
/ 31 мая 2018

Допустим, я начинаю обработку сетки 1024х1024 с рабочих групп 8х8.И у меня 1080 с 20 вычислительными блоками на 128 ядер - всего 2560 ядер.

Это не совсем верный способ визуализации графического процессора.У вас есть 20 вычислительных единиц.Вот и все.«Ядра» на самом деле представляют собой пару (2 x 32) векторных блоков ALU линий, каждый из которых имеет планировщик команд и общий кэш L1.

Теперь ясно, что в среднем каждое физическое ядро ​​будет обрабатыватьв среднем около 400 элементов в сетке.

Это не следует по ряду причин.Распределение работы зависит от кода, который вы пишете, и параметров выполнения, которые вы используете для запуска кода.Не существует внутренней связи между размером входов в ядро ​​и количеством параллельных операций, которые должен выполнять данный SM или «ядро» внутри SM.

Вопрос, какой статистически был бы порядоквыполнение каждого ядра?

Не определено.CUDA не дает никаких гарантий, подразумеваемых или иных, в отношении порядка исполнения.

Будет ли это мажорная строка?Основной столбец ..?

Все еще не определено.

или каждое ядро ​​получит свою собственную "подрайон" для работы?

Itпрограммист должен определить, как схема нумерации логических потоков / блоков, которую демонстрирует модель программирования, будет соответствовать особенностям входных данных или памяти.

Этот вопрос важен для того, чтобы убедиться, чтодоступ к памяти дружествен к кешу.

Графический процессор имеет иерархическую структуру кеша, что означает, что на самом деле это не так важно, как вы представляете.Существуют хорошо документированные рекомендации по программированию для обеспечения максимальной пропускной способности памяти и использования кэша.На них не влияет порядок исполнения, как подразумевает ваш вопрос.

...