所以我有一个相当奇怪的错误正在发生。我有一个内核,它应该改变数组中每个元素的值。截至目前,我只测试启动一个线程。
__global__ void kernel(int* data) {
for (int var = 0; var < SIZE; ++var) {
data[var] = data[var] + 1;
}
}
这是整个代码:
#include "stdint.h"
#include "stdio.h"
#include "kernelLauncher.cuh"
#include <cuda_runtime.h>
#define SIZE 10485760
typedef uint64_t POLY_64;
typedef unsigned char BYTE;
__global__ void kernel(int* data) {
for (int var = 0; var < SIZE; ++var) {
data[var] = data[var] + 1;
}
}
int main() {
int* data = (int*) malloc(sizeof(int) * SIZE);
int* data_d;
for (int var = 0; var < SIZE; ++var) {
data[var] = 1;
}
//allocate device memory for the fingerprinting data
cudaMalloc((void**) &data_d, sizeof(int) * SIZE);
//copy the data to device
CUDA_CHECK_RETURN(
cudaMemcpy(data_d, data, sizeof(int) * SIZE, cudaMemcpyHostToDevice));
kernel<<<1, 1>>>(data_d);
cudaThreadSynchronize();
CUDA_CHECK_RETURN(cudaMemcpy(data, data_d, sizeof(int) * SIZE, cudaMemcpyDeviceToHost));
//try to print the result
for (int var = 0; var < SIZE; ++var) {
printf("%d\n", data[var]);
}
CUDA_CHECK_RETURN(cudaFree(data_d));
return 0;
}
当我的 SIZE 定义为 1048576 时,我的数据恢复得很好。不幸的是,当我将其定义为 10485760(10 倍以上)时。我得到:
Error unspecified launch failure at line 40 in file ../src/runTest.cu
有人可以指出我正确的方向。为什么会出现这个问题?先感谢您
编辑:所以是的.. 这是尺寸定义。我现在更改了我的代码,因此内核中的硬编码循环值和定义的常量之间没有差异。但是,如果我有 10485760 而不是 1048576 它根本不起作用.. 为什么会这样。这不是一次太多的分配。我的卡是计算能力 1.1 的 Quadro FX 770m