Как выполнить инструкцию ALU в AMD GPU (VLIW)?

Я хочу спросить кое-что о программировании OpenCL. Я понимаю, что четверть волнового фронта может выдавать инструкции для каждого тактового цикла, и для вызова волнового фронта потребуется четыре тактовых такта. Чтобы закончить инструкцию в архитектуре VLIW, потребуется восемь тактовых часов. Итак, вызов другого волнового фронта - это решение. Если я назову два волновых фронта, то это будет восемь тактовых часов. Таким образом, после выполнения волнового фронта A ( 4 такта) выполняется волновой фронт B (еще четыре такта). После выполнения волнового фронта B (общий тактовый цикл равен 8) волновой фронт A будет выполнен снова с другой инструкцией.

Вопрос в том:

Как ALU выполняет другую инструкцию, если четыре ALU для каждого элемента обработки уже используются для выполнения другой инструкции??

Например: в цикле 1 рабочий элемент 0-15 начинает выполнять инструкцию "ДОБАВИТЬ". Первые ALU в каждом элементе обработки (всего 16 PE в SIMD / вычислительном блоке) вычисляют инструкцию "ADD".
Это происходит в циклах 2, 3 и 4 для волнового фронта (теперь в каждом PE есть 4 ALU, которые заняты выполнением команды "ADD"). В цикле 5 четверть волнового фронта 2 начинает выполнять инструкцию "SUBTRACT". Как ALU в элементе обработки вычисляет инструкцию, так как они заняты вычислением инструкции "ADD" из первого волнового фронта (Помните, что выполнение для инструкции "ADD" для четверти волнового фронта в первом цикле незакончено, так как это занимает 8 тактовых циклов)??

Обновление: 8 тактовых часов означают задержку чтения после записи

1 ответ

Решение

Как вы сказали, для обработки волнового фронта требуется 4 такта. Результаты этой инструкции отправляются в регистры, но из-за задержки чтения после записи эти результаты будут доступны только после 8 тактов. Важным отличием здесь является то, что ALU завершили свою работу в 4 цикла, чтобы они могли продолжать обрабатывать другие инструкции. Память регистра занимает 8 циклов, чтобы выполнить свою работу, т.е. сохранить новые данные и сделать их снова видимыми.

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

Другие вопросы по тегам