【发布时间】:2017-11-28 13:29:37
【问题描述】:
我有下一个结构:
typedef struct
{
float* coordinates;
} Point;
CUDA 中的下一个函数:
cudaError_t calculateCenterUsingCuda(Point* point, const int NUM_OF_DIMENSIONS, const int NUM_OF_POINTS)
{
Point* point_dev;
cudaError_t cudaStatus;
cudaStatus = cudaSetDevice(0);
if (cudaStatus != cudaSuccess) {
fprintf(stderr, "cudaSetDevice failed! Do you have a CUDA-capable GPU installed?");
}
cudaStatus = cudaMalloc((void**)&point_dev, 1 * sizeof(Point));
if (cudaStatus != cudaSuccess) {
fprintf(stderr, "cudaMalloc failed!");
}
cudaStatus = cudaMalloc((void**)&point_dev->coordinates, NUM_OF_DIMENSIONS * sizeof(float));
if (cudaStatus != cudaSuccess) {
fprintf(stderr, "cudaMalloc failed!");
}
cudaStatus = cudaMemcpy(point_dev, point, 1 * sizeof(Point), cudaMemcpyHostToDevice);
if (cudaStatus != cudaSuccess) {
fprintf(stderr, "cudaMemcpy failed!");
}
cudaStatus = cudaMemcpy(point_dev->coordinates, point->coordinates, NUM_OF_DIMENSIONS * sizeof(float), cudaMemcpyHostToDevice);
if (cudaStatus != cudaSuccess) {
fprintf(stderr, "cudaMemcpy failed!");
}
calculateCenter<<<1, 52>>>(point_dev, NUM_OF_POINTS);
cudaStatus = cudaGetLastError();
if (cudaStatus != cudaSuccess) {
fprintf(stderr, "calculateCenterlaunch failed: %s\n", cudaGetErrorString(cudaStatus));
}
cudaStatus = cudaDeviceSynchronize();
if (cudaStatus != cudaSuccess) {
fprintf(stderr, "cudaDeviceSynchronize returned error code %d after launching calculateCenter!\n", cudaStatus);
}
// Copy output vector from GPU buffer to host memory.
cudaStatus = cudaMemcpy(point, point_dev, 1 * sizeof(Point), cudaMemcpyDeviceToHost);
if (cudaStatus != cudaSuccess) {
fprintf(stderr, "cudaMemcpy failed!");
}
cudaStatus = cudaMemcpy(point->coordinates, point_dev->coordinates, NUM_OF_DIMENSIONS * sizeof(float), cudaMemcpyHostToDevice);
if (cudaStatus != cudaSuccess) {
fprintf(stderr, "cudaMemcpy failed!");
}
cudaStatus = cudaDeviceReset();
if (cudaStatus != cudaSuccess) {
fprintf(stderr, "cudaDeviceReset failed!");
}
return cudaStatus;
}
calculateCenter 是:
__global__ void calculateCenter(Point* point, const int NUM_OF_POINTS)
{
int i = threadIdx.x;
point->coordinates[i] = point->coordinates[i] / NUM_OF_POINTS;
printf("%d\n", i);
}
基本上我使用 CUDA 创建一个平均点,将点中的每个坐标除以点数(默认为 4) 默认维数为 52。
但是当我运行这段代码时出现错误:
cudaDeviceSynchronize returned error code 77 after launching calculateCenter!
任何帮助为什么会发生这种情况?
谢谢!
【问题讨论】:
标签: cuda