Я написал довольно простую программу Cuda. Я хотел бы присвоить значения матрице в памяти устройства. Затем я хочу скопировать значения на хост и отобразить их. Программа, которую я написал, не работает. Но я не знаю почему. Я пытался выяснить, что я делаю неправильно, отображая состояние с помощью cout, но даже это не работает, поэтому я думаю, что основная функция не запускается.
Кто-нибудь знает в чем проблема?
Вот мой код:
#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include <iostream>
#include <stdio.h>
const int N = 1024;
__global__ void matrix(float *d_A)
{
int col = blockIdx.x * blockDim.x + threadIdx.x;
int row = blockIdx.y * blockDim.y + threadIdx.y;
int index = col + row * N;
if (col < N && row < N)
{
d_A[index] = 255;
}
}
int main()
{
std::cout << "Programm begins";
float A[N * N];
float d_A[N * N];
cudaMalloc((void**)&d_A, (N * N)*sizeof(float));
std::cout << "Matrizes allocated";
std::cout << A[0] << " , " << A[1] << " , " << A[2] << " , " << A[3] << " , " << A[4] << " , " << A[5] << "\n";
std::cout << A[1024] << " , " << A[1025] << " , " << A[1026] << " , " << A[1027] << " , " << A[1028] << " , " << A[1029] << "\n";
matrix << <1024, 1024 >> >(d_A);
std::cout << "Wrote Matrix to local device memory";
std::cout << d_A[0] << " , " << d_A[1] << " , " << d_A[2] << " , " << d_A[3] << " , " << d_A[4] << " , " << d_A[5] << "\n";
std::cout << d_A[1024] << " , " << d_A[1025] << " , " << d_A[1026] << " , " << d_A[1027] << " , " << d_A[1028] << " , " << d_A[1029] << "\n";
cudaMemcpy(A, d_A, N * N * sizeof(float), cudaMemcpyDeviceToHost);
std::cout << "Wrote Matrix to host memory";
std::cout << A[0] << " , " << A[1] << " , " << A[2] << " , " << A[3] << " , " << A[4] << " , " << A[5] << "\n";
std::cout << A[1024] << " , " << A[1025] << " , " << A[1026] << " , " << A[1027] << " , " << A[1028] << " , " << A[1029] << "\n";
return 0;
}