Память CUDA не возвращается на хост

Итак, я пытаюсь изучить CUDA для «нового» FX 570, который я купил за 15 долларов США; D
Теперь в коде НЕТ ошибок, массив array1_host запускается со своими значениями правильно, но когда я копирую память с устройства на хост, значения остаются прежними.
то же самое происходит, если я пропускаю второй вызов ядра (пробуя несколько ядер в этом проекте), я немного растерялся, поэтому спасибо за любую помощь, которую я могу достичь 🙂

#include <cuda_runtime.h>
#include <iostream>

#pragma comment (lib, "cudart")

#define N 5000

__global__ void addArray(float* a, float* b)
{
a[threadIdx.x] += b[threadIdx.x];
}
__global__ void timesArray(float* a, float* b)
{
a[threadIdx.x] *= b[threadIdx.x];
}

int main(){
float array1_host[N];
float array2_host[N];

float *array1_device;
float *array2_device;

cudaError_t err;

for(int x = 0; x < N; x++){
array1_host[x] = (float) x * 2;
array2_host[x] = (float) x * 6;
}

err = cudaMalloc((void**)&array1_device, N*sizeof(float));
err = cudaMalloc((void**)&array2_device, N*sizeof(float));

err = cudaMemcpy(array1_device, array1_host, N*sizeof(float),   cudaMemcpyHostToDevice);
err = cudaMemcpy(array2_device, array2_host, N*sizeof(float), cudaMemcpyHostToDevice);

dim3 dimBlock( N );
dim3 dimGrid ( 1 );

addArray<<<dimGrid, dimBlock>>>(array1_device, array2_device);
timesArray<<<dimGrid, dimBlock>>>(array1_device, array2_device);

err = cudaMemcpy(array1_host, array1_device, N*sizeof(float), cudaMemcpyDeviceToHost);

cudaFree(array1_device);
cudaFree(array2_device);

std::cout << cudaGetErrorString(err) << "\n\n\n\n\n\n";
std::cout << array1_host;cudaDeviceReset();

system("pause");
return 0;
}

0

Решение

У вас есть ошибка, потому что N равно 5000, но есть ограничения для threds в блоке — это зависит от возможностей вычислений ссылка на функции в вики.
Попробуйте этот код:

#define K 200

....

dim3 dimBlock( K );
dim3 dimGrid ( N/K );

Для отладки вашего кода вы можете использовать cudaGetLastError() после каждого вызова ядра или другой функции знать, где находятся ошибки пример об ошибках CUDA.

3

Другие решения

Других решений пока нет …