我正在尝试编译使用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 drives
如请求所示,这是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
我使用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 drives
如请求所示,这是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;
}