В функции ядра я хочу два вектора общей памяти, как с длиной size
(фактически sizeof(float)*size
).
Так как невозможно выделить память непосредственно в функции ядра, если нужна переменная, мне пришлось ее динамически выделять, например:
myKernel<<<numBlocks, numThreads, 2*sizeof(float)*size>>> (...);
и внутри ядра:
extern __shared__ float row[];
extern __shared__ float results[];
Но это не работает.
Вместо этого я сделал только один вектор extern __shared__ float rowresults[]
, содержащий все данные, используя выделенную память 2*size
. Таким образом, вызовы row
все те же, а вызовы results
похожи на rowresults[size+previousIndex]
. И это действительно работает.
Это не большая проблема, потому что я все равно получаю ожидаемые результаты, но есть ли способ разделить мою динамически выделенную разделяемую память на две (или более) разные переменные? Просто для красоты.