В справочном руководстве по инструментарию CUDA вы можете видеть, что шаг в cudaMallocPitch - это выделенная ширина в байтах для 2D-массива, который вы копируете.Ваша dev_histogram будет иметь фактическую ширину, равную высоте и высоте, равную указанной вами высоте.Каждая строка вашего двумерного массива имеет выделенные байты основного тона, но только ширина * sizeof (int) байтов действительных данных.
В том же документе прототип для cudaMemcpy2D равен
cudaError_t cudaMemcpy2D (void ∗ dst, size_t dpitch, const void ∗ src, size_t spitch, size_t width, size_t height, enum cudaMemcpyKind kind)
здесьваш массив на хосте, dpitch - это ширина в байтах целевого массива (гистограмма), а spitch - это ширина в байтах исходного массива (dev_histogram).ширина и высота - это размеры вашего 2D массива.Тогда вы должны назвать это так:
cudaMemcpy2D(histogram, SIZE_THETA*sizeof(int), dev_histogram, pitch, SIZE_THETA * sizeof(int), SIZE_RHO, cudaMemcpyDeviceToHost);
Редактировать: после ArchaeaSoftware я заметил, что действительно высота - это количество строк, высота в количестве байтов не имеет смысла.Обновленный ответ, потому что вам все еще нужно изменить высоту звука.