/ / Початковий хіт продуктивності за допомогою локальної пам'яті - opencl

Початкова ефективність виконується за допомогою локальної пам'яті - opencl

Чи є початковий показник ефективності при використаннілокальна пам'ять? Я конвертував своє існуюче ядро, яке використовує глобальну пам'ять, і після успішного перетворення побачив, що продуктивність знижується. Очевидно, ви можете подумати, що я, можливо, не використав це правильно, і, можливо, я навіть згоден і знайду ще кілька оптимізацій. Але тут не в цьому питання.

В якості побічного експерименту я використовував те саме ядроз використанням глобальної пам'яті, як немає доступу до локальної пам'яті. і тоді все, що я робив, було передано в параметр ядра з локальною пам'яттю, десь 1024 цілими числами. і ось я побачив, що це виконання ядра зайняло майже вдвічі більше часу. Тож чи саме розподіл локальної пам’яті спричиняє деякий початковий показник продуктивності? Хтось це бачив і, можливо, має пояснення?

[UPDATE] Дякую всім за ваші коментарі та відповіді. Я спробував написати окреме тестове ядро, щоб побачити, чи повторюється така поведінка. Це не було "т. Я знайшов пост Чи приватна пам'ять повільніше, ніж локальна пам'ять? що згадує надмірне використання приватної пам'ятів результаті перекидається на глобальну пам'ять, і в результаті може уповільнити виконання ядра. Здається, це може бути специфічно для карт nVidia, мені цікаво, що відбувається на картках AMD. Чи може бути, що розподіл локальної пам’яті раптово спричинило розлив приватної пам’яті, щоб зробити місце для локальної пам’яті? Я зараз дивлюся на своє виконання з цього ракурсу, якщо хтось із вас не запропонує іншого. Чи є якась документація чи книга, в якій є такі згадки, про які ви, хлопці, можете знати?

Знову дякую.

Відповіді:

0 для відповіді № 1

Показники ефективності можуть бути накладені за допомогою використання локальної робочої групи неоптимального розміру або синхронізації WI в робочій групі.

Читання в локальній пам'яті само по собі не вводить жодного хіта на продуктивність - воно має такий же порядок швидкості, як і читання в приватній пам'яті (обидва розміщені на мікросхемі).

Також перевірте, чи ваші дані відповідають розміру локальної пам'яті, оскільки вони зазвичай мають невеликий розмір.