如果我将“生成可重定位设备代码”标志设置为true(使用Visual Studio 2013和Cuda 7.5),则以下完整示例会导致由于sort函数导致的“无效参数”异常,但是当它运行时效果很好是假的。
对于我来说,这对我来说是一个问题,我需要这个标志才能成为真正的类。
我在某个地方犯了错误吗?
#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include "thrust\sort.h"
#include "thrust\device_ptr.h"
#define cudaCheck(x) { cudaError_t err = x; if (err != cudaSuccess) { printf("Cuda error: %s in %s at %s:%d\n", cudaGetErrorString(err), #x, __FILE__, __LINE__); assert(0); } }
int main() {
const int N = 6;
int keys2[N] = { 1, 4, 2, 8, 5, 7 };
char values[N] = { 'a', 'b', 'c', 'd', 'e', 'f' };
int* dkeys;
cudaCheck(cudaMalloc((void**)&dkeys, sizeof(int) * N));
char* dvalues;
cudaCheck(cudaMalloc((void**)&dvalues, sizeof(char) * N));
cudaCheck(cudaMemcpy(dkeys, keys2, sizeof(int) * N, cudaMemcpyHostToDevice));
cudaCheck(cudaMemcpy(dvalues, values, sizeof(char) * N, cudaMemcpyHostToDevice));
thrust::device_ptr<int> tkeys(dkeys);
thrust::device_ptr<char> tvalues(dvalues);
thrust::sort_by_key(tkeys, tkeys + N, tvalues);
cudaCheck(cudaDeviceSynchronize());
return 0;
}