¿Hacer CUB blockradixsort en chip por completo?
Estoy leyendo las documentaciones y ejemplos de CUB:
#include <cub/cub.cuh> // or equivalently <cub/block/block_radix_sort.cuh>
__global__ void ExampleKernel(...)
{
// Specialize BlockRadixSort for 128 threads owning 4 integer items each
typedef cub::BlockRadixSort<int, 128, 4> BlockRadixSort;
// Allocate shared memory for BlockRadixSort
__shared__ typename BlockRadixSort::TempStorage temp_storage;
// Obtain a segment of consecutive items that are blocked across threads
int thread_keys[4];
...
// Collectively sort the keys
BlockRadixSort(temp_storage).Sort(thread_keys);
...
}
En el ejemplo, cada hilo tiene 4 claves. Parece que 'thread_keys' se asignarán en la memoria local global. Si solo tengo 1 clave por hilo, ¿podría declarar "int thread_key;" y hacer esta variable solo en el registro?
BlockRadixSort (temp_storage) .Sort () está tomando un puntero a la clave como parámetro. ¿Significa que las claves deben estar en la memoria global?
Me gustaría usar este código, pero quiero que cada subproceso mantenga una clave en el registro y lo mantenga en el chip en el registro / memoria compartida después de que se ordenen. ¡Gracias por adelantado!