Почему локальная память в этом алгоритме OpenCL такая медленная?

У меня есть часть кода, которая работает для меня:

arr.sort((a, b) => a.name > b.name)

UPDATE: не работает всегда, поэтому это неверно: (

1
задан Emerson Fittipaldi 16 January 2019 в 06:04
поделиться

1 ответ

Размер локального буфера __local int buf[7072] (28288 байт) слишком велик. Я не знаю, насколько велика общая память для AMD Radeon Pro 450, но, скорее всего, она составляет 32 или 64 КБ на вычислительную единицу.

32768/28288 = 1, 65536/28288 = 2 означает, что только 1 или максимум 2 волновых фронта (64 рабочих элемента) могут работать только одновременно, поэтому занятость вычислительного устройства очень очень низкая, следовательно, низкая производительность.

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

Используйте CodeXL для профилирования вашего ядра - есть инструменты, чтобы показать вам все это. В качестве альтернативы вы можете взглянуть на CUDA occupancy calculator таблицу Excel, если вы не хотите запускать профилировщик, чтобы получить лучшее представление о том, что это такое.

0
ответ дан doqtor 16 January 2019 в 06:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: