【问题标题】:Thrust::Sort very long compile timeThrust::Sort 编译时间很长
【发布时间】:2011-08-29 00:33:32
【问题描述】:

我正在尝试使用 Thrust 编译一段示例代码,以帮助学习一些 CUDA。

我正在使用 Visual Studio 2010,并且我已经获得了其他示例进行编译。然而,当我编译这个例子时,编译需要超过 10 分钟。我有选择地注释掉了行,并发现它的 Thrust::sort 行需要永远(注释掉一行大约需要 5 秒编译)。

我在某处发现了一篇文章,其中谈到了在 Thrust 中编译 sort 的速度有多慢,这是 Thrust 开发团队做出的决定(它在运行时快 3 倍,但编译时间更长)。但那是在 2008 年末发布的。

知道为什么要花这么长时间吗?

另外,我正在使用以下规格的机器上编译,所以它不是一台慢速机器

i7-2600k @ 4.5 ghz
16 GB DDR3 @ 1833 mhz
Raid 0 of 6 GB/s 1TB 驱动器

根据要求,这是 Visual Studio 正在调用的构建字符串

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v3.2\bin\nvcc.exe" -ccbin "C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin" -I" C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v3.2\include" -G0 --keep-dir "Debug\" -maxrregcount=32 --machine 64 --compile -D_NEXUS_DEBUG -g -Xcompiler "/EHsc /nologo /Od /Zi /MTd " -o "Debug\kernel.obj" "C:\Users\Rob\Desktop\VS2010Test\VS2010Test\VS2010Test\kernel.cpp" -clean

例子

#include <thrust/host_vector.h>
#include <thrust/device_vector.h>
#include <thrust/sort.h>
int main(void)
{
    // generate 16M random numbers on the host
    thrust::host_vector<int> h_vec(1 << 24);
    thrust::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
    thrust::sort(d_vec.begin(), d_vec.end());
    // transfer data back to host
    thrust::copy(d_vec.begin(), d_vec.end(), h_vec.begin());
    return 0;
}

【问题讨论】:

  • Thrust sort_by_key 似乎有a similar known issue,尽管我个人不记得它花了那么多时间进行排序。也许它可以帮助通知他们这些极端情况?但如果是编译器问题,他们可能无能为力。
  • 确实需要很长时间,但 10 分钟似乎有点太多了。你能发布你正在使用的编译选项吗?
  • 我现在不在电脑前,但我只是通过 Visual Studio 使用默认设置。我刚刚安装了 Nvidia CUDA SDK 和工具包,安装了 VC90 编译器(VS2008 express edition),从 Nvidia 网站的 Thrust 示例中复制代码并尝试编译它。我稍后会发布确切的编译器标志
  • 没有答案?!好吧,在我开始在我的程序中使用推力之后,我也遇到了很长的编译时间。我在 Ubuntu 上并使用 CUDA 4.0。
  • 在 CUDA 4.1 上,在我的 2GHz、4GB、Q6600、Windows 7 机器上编译一个带有thrust::sort 的程序需要一分钟多一点的时间。您可以将 Thrust 标头移动到预编译的标头中,或者将整个排序功能放入单独的 .cu 文件中。

标签: cuda thrust


【解决方案1】:

CUDA 3.2 中的编译器未针对使用调试模式(即nvcc -G0)编译像sort 这样的长而复杂的程序进行优化。你会发现 CUDA 4.0 在这种情况下要快得多。删除 -G0 选项也应该会大大减少编译时间。

【讨论】:

    猜你喜欢
    • 2022-11-14
    • 1970-01-01
    • 2019-06-29
    • 2013-04-02
    • 2012-06-16
    • 2018-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多