Разница между параметром __local и внутри ядра __local в OpenCL - PullRequest
1 голос
/ 07 февраля 2012

Иногда ядра openCL имеют в своих параметрах

kernel someName (some globalparameters, __local int* myArray) {

в то время как другие скрипты находятся где-то внутри ядра

__local int myArray[length];

В чем разница между ними? Я думал, что это были только синтаксические различия, но теперь я вижу внутри одного из официальных образцов AMD (RadixSort) комментарий

__local KV_TYPE localDataArray[TPG*4*2]; // Faster than using it as a parameter !!!

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

1 Ответ

0 голосов
/ 08 февраля 2012

Я не уверен насчет проблем с производительностью, но основное отличие заключается не в синтаксисе. Передача локального буфера в качестве параметра позволяет определить размер во время выполнения. Определение буфера в самом ядре требует, чтобы размер был известен во время компиляции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...