2015-08-02 3 views
2

Я немного запутался в терминах волнового фронта AMD и workgroupsize OpenCL. Я нашел разные источники, были сделаны разные заявления.AMD wavefront против рабочей группы

Мой вопрос: насколько размер волны в формате GCS для волнового фронта и в соответствии с этим: насколько большой должна быть рабочая группа по opencl, по крайней мере, чтобы не потерять занятость.

Информация, полученная мной из this document из amd, состоит в том, что размер фронта волнового фронта GCN равен 16. Я могу запустить 4 волновых фронта на CU за раз, и в каждом кубе будет максимум 40 волновых фронтов в полете. поэтому я подразумеваю, что рабочая группа должна быть по крайней мере размером 16 в opencl.

Но общая информация (например, в this или this) является то, что wavefrontsize 64 и в соответствии с этим workgroupsize должно быть не менее 64, если выше, кратное 64. Это также то, что совпадает с meassurements на моем ядре , которые состоят в том, что с workgroupsize 64 я получаю наивысшую производительность, для всего ниже 64 его ухудшение.

Большое спасибо за разъяснения.

+0

Если размер рабочей группы равен 16, минимальная ширина simd-устройства amd gpu равна 80%, потому что каждый из них имеет ширину 64 дюйма. Вы теряете 48 единиц за CU. Волновые фронты применяются к одной и той же области, не распределенной по всем CU. –

+0

Да, это то, что я получаю из большинства источников. но что насчет ссылки nr.1 там, где она говорит, в cu есть 4 16-широкоугольных SIMD, и каждый из них способен иметь 10 волновых фронтов в полете. для меня это означает, что волновой фронт равен 16, а не 64. Помните, что мой вопрос особенно касается технологии GCN от amd. – user3507003

+0

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

ответ

3

Вы получили это неправильно. Прочтите this document еще раз. Модуль SIMD имеет 16 рабочих элементов, а размер волнового фронта - 64 рабочих элемента. Вот важные цитаты:

страница 3:

В GCN, каждый из CU включает в себя 4 отдельных блоков SIMD для векторной обработки. Каждый из этих SIMD-блоков одновременно выполняет одну операцию по 16 работам , но каждый из них может работать на отдельном волновом фронте.

страница 5:

Это имеет важное значение для управления потоком волнового фронта; например, сравнения приведут к результату для каждого из 64 рабочих элементов в волновом фронте.

+0

Хорошо, что вы правы. Но тогда мой следующий вопрос: как возможно, что каждый Vector16-SIMD может иметь 10 волновых фронтов в полете, когда волновой фронт имеет ширину 64, а не 16? – user3507003

+1

Каждый 16-разрядный SIMD обрабатывает один 64-широкий волновой фронт в течение 4 тактов. На каждом цикле синхронизации планировщик команд может выдавать одну векторную инструкцию с одного волнового фронта, активного в CU, на один из четырех блоков SIMD. Таким образом, за 4 цикла каждый SIMD имеет инструкцию, выданную ему, и планировщик возвращается к началу. В полете 10 волн, основанных на ресурсах - 10 регистров счетчика программ на SIMD, 40 на каждый ур.Я дал пару бесед, которые пытаются объяснить аспекты этого, может быть, они помогут: http://www.leehowes.com/files/talks/201203-Howes-UTAustin_Lecture_February2012_AMD.pdf – Lee

+0

Спасибо за это, проблема решена. – user3507003

Смежные вопросы