Я укушу.
__global__ void kernel(int *dintptr, int * count, int n)
{
for (int id = blockDim.x * blockIdx.x + threadIdx.x;
id < n-1;
id += gridDim.x * blockDim.x)
count[id] = dintptr[id+1] - dintptr[i];
}
(Поскольку вы сказали, что «явно» задали значение последнего элемента, а в своем ядре этого не было, я не стал его здесь устанавливать).
Я не вижу большого преимущества использования разделяемой памяти в этом ядре, как вы: кеш L1 на Fermi должен дать вам почти такое же преимущество, так как ваша локальность высока, а повторное использование низкое.
И ваше ядро, и мое, похоже, обрабатывают массивы произвольного размера. Ваш, однако, предполагает, что blockDim.x == 256.