1

我正在尝试从推力图编译一个简单的示例。

目前,我已将所有内容都注释掉了main(void)

我正在寻找有人愿意给出的任何方向!

我的编译错误是这样的:

mseil@cuda:~/mseil_CUDA/test$ nvcc Example.cu 
/usr/local/cuda/bin/../include/thrust/detail/device/cuda/reduce_by_keyvalue.inl(90): error: name followed by "::" must be a class or namespace name

/usr/local/cuda/bin/../include/thrust/graph/detail/adjacency_list.inl(141): error: name followed by "::" must be a class or namespace name

/usr/local/cuda/bin/../include/thrust/graph/detail/adjacency_list.inl(213): error: name followed by "::" must be a class or namespace name

/usr/local/cuda/bin/../include/thrust/graph/detail/adjacency_list.inl(344): error: name followed by "::" must be a class or namespace name

4 errors detected in the compilation of "/tmp/tmpxft_00007122_00000000-9_Example.cpp4.ii".

我发现了第一个错误,即include/thrust/detail/device/cuda/reduce_by_keyvalue.inl文件的第 90 行,但我看不出问题出在哪里。我是 C++ 的新手(而且我对 C 的了解是初学者的水平)。就模板文件而言,一切看起来都很好,如果 NVIDIA 的人不知道他们在做什么,我会感到震惊——所以一定是我。

第 90 行左右的代码:

  typedef typename thrust::iterator_traits<InputIterator1>::difference_type difference_type;

  difference_type n =key_last - key_first;
  difference_type N =result_last - result_first;

  const std::size_t BLOCK_SIZE =512; // number of threads per block
  const std::size_t MAX_BLOCKS =thrust::experimental::arch::max_active_threads() / BLOCK_SIZE;
  const std::size_t NUM_BLOCKS =std::min( MAX_BLOCKS, n + (BLOCK_SIZE - 1) / BLOCK_SIZE);  //offending line.

目前我的主要代码中唯一的代码:(其他所有内容都已注释。)

#include <thrust/graph/adjacency_list.hpp>
using namespace thrust;

int main(void){
    typedef adjacency_list<undirectedS, disallow_parallelS> graph_t;

    return 0;
}
4

3 回答 3

2

我是推力图库开发人员 drkkojima。我更新到 0.2RC03 并解决了问题。

于 2011-04-07T08:25:16.120 回答
1

包含标准 i/o 文件有问题吗?

于 2011-02-07T08:50:45.933 回答
0

问题显然是 CUDA 3.2 和推力 1.3 与推力图 0.2RC2 不兼容。我们回滚到 CUDA 3.1 和推力图 1.2.1,这在很大程度上解决了这个问题。(所有示例文件都可以编译,除了每个文件都有一个;但我们可以忍受这一点。)

于 2011-02-25T14:12:28.607 回答