Комментировать

CudaMalloc аллоцирует массив,

CudaMalloc аллоцирует массив, начало которого выровнено правильно, о чем в документации написано.
Если у вас двумерный массив и вы хотите, чтобы строки были тоже выровнены, есть CudaMallocPitch.
Внутри массива float1 лежат "вплотную"

Ну а дальше все прозрачно в простом случае, если вы внутри треда обращаетесь к

  1.   a = globalArray[base + threadIndex];

и globalArray[base] - выровнен (т.е. base кратна 32 для одномерного массива) и threadIndex - это и есть "глобальный номер" вашего треда (скажем blockDim.x * blockIdx.x + threadIdx.x - для одномерной сетки)

То все уже хорошо :)