そのため、かなり奇妙なエラーが発生しています。配列内のすべての要素の値を変更するはずのカーネルがあります。現時点では、1 つのスレッドを起動してテストするだけです。
__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
誰かが私を正しい方向に向けることができますか?なぜこの問題が起こっているのですか? 前もって感謝します
編集:そうです..それはサイズの定義です。カーネル内のハードコードされたループ値と定義された定数との間に矛盾がないように、コードを変更しました。ただし、1048576 の代わりに 10485760 を使用すると、単に機能しません。なぜでしょうか。これは、一度に割り当てる量が多すぎるということではありません。私のカードは、計算能力 1.1 の Quadro FX 770m です。