CUDA - “生成可重定位设备代码”导致推力排序崩溃

时间:2016-03-20 05:38:55

标签: cuda thrust

如果我将“生成可重定位设备代码”标志设置为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;
}

0 个答案:

没有答案