У меня есть часть кода, которая работает для меня:
arr.sort((a, b) => a.name > b.name)
UPDATE: не работает всегда, поэтому это неверно: (
Размер локального буфера __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, если вы не хотите запускать профилировщик, чтобы получить лучшее представление о том, что это такое.