gpt4 book ai didi

c++ - 您如何构建示例 CUDA Thrust 设备排序?

转载 作者:行者123 更新时间:2023-11-27 22:57:47 25 4
gpt4 key购买 nike

我正在尝试使用最新版本 (7.0) 的 CUDA 和随附的 THURST 安装在 Visual Studio 2010 中构建和运行 Thrust 示例代码。我无法构建和运行示例代码。

通过删除部分代码,我发现问题出在 thrust::sort(..) 调用上。主机 vector 运行良好,但设备 vector 会产生以下编译错误:

1>c:\program files\nvidia gpu computing toolkit\cuda\v7.0\include\thrust\system\cuda\detail\sort.inl(203): error C2027: 使用未定义的类型 '推力::细节::STATIC_ASSERTION_FAILURE'

这是我正在使用的无法编译的示例代码,它主要来自 https://developer.nvidia.com/Thrust 的 CUDA 信任示例。

#include <thrust/host_vector.h>
#include <thrust/device_vector.h>
#include <thrust/generate.h>
#include <thrust/sort.h>
#include <thrust/copy.h>
#include <algorithm>
#include <cstdlib>
#include <time.h>

int main(void)
{
// generate 32M random numbers serially
thrust::host_vector<int> h_vec(32 << 20);
std::generate(h_vec.begin(), h_vec.end(), rand);

// transfer data to the device
thrust::device_vector<int> d_vec = h_vec;

// sort data on the device (This breaks the compile)
thrust::sort(d_vec.begin(), d_vec.end());

// sort data on the host (This works just fine)
thrust::sort(h_vec.begin(), d_vec.end());

// transfer data back to host
thrust::copy(d_vec.begin(), d_vec.end(), h_vec.begin());

return 0;
}

四处游玩我发现如果你注释掉使用设备 vector 的行:

  // thrust::sort(d_vec.begin(), d_vec.end()); 

但保留使用宿主 vector 的行:

  thrust::sort(h_vec.begin(), d_vec.end()); 

它编译并运行得很好,尽管排序似乎在主机上运行。

如何编译和运行示例代码,以便排序在设备 vector 而不是主机 vector 上发生?

我的系统配置包括:

  • 已安装 Visual Studio 2010/SP1
  • Windows 7 专业版,64 位
  • CUDA 7.0 开发套件
  • 带有最新驱动程序的 NVIDA Quadro K4000

最佳答案

正如@JaredHoberock 指出的那样,关键问题可能是您正在尝试编译 .cpp 文件。您需要将该文件重命名为 .cu,并确保它正在由 nvcc 编译。

修复该问题后,您可能会遇到另一个问题。这是不正确的,不会编译:

thrust::sort(h_vec.begin(), d_vec.end());

这里的第一个参数是要排序的范围的开始,第二个参数是范围的结束。您的第一个参数将范围的开始标识为在主机上,将范围的结尾标识为在设备上。这将触发编译错误。

将其更改为:

thrust::sort(h_vec.begin(), h_vec.end());

你的代码为我成功编译和运行。

在你上面的例子中,这一行是完全没用的。不需要对数据进行排序,并且无论如何您都会在这里覆盖结果:

thrust::copy(d_vec.begin(), d_vec.end(), h_vec.begin());

(将CW标记为Jared Hoberock指出的关键问题)

关于c++ - 您如何构建示例 CUDA Thrust 设备排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30903109/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com