0

考虑以下代码:

#include <string>
#include <unordered_map>

int main()
{
    std::string s("hello");
    std::unordered_map<std::string, int> map;
    map.emplace(s, 123);
    return 0;
}

这可以很好地构建:

  • GCC 4.9.3,没有 CUDA
  • GCC 5.3.1,没有 CUDA
  • 通过 CUDA 7.5 的 GCC 4.9.3(文件扩展名为 .cu)
  • 通过 CUDA 8 RC 的 GCC 4.9.3(文件扩展名为 .cu)

无法通过 CUDA 8 RC 使用 GCC 5.3.1 进行编译。

我得到的错误是:

/usr/include/c++/5/bits/hashtable.h(1526): error: no instance of overloaded function "std::forward" matches the argument list
            argument types are: (std::__cxx11::string)
          detected during:
            instantiation of "std::pair<std::_Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _H1, _H2, _Hash, _RehashPolicy, _Traits>::iterator, __nv_bool> std::_Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _H1, _H2, _Hash, _RehashPolicy, _Traits>::_M_emplace(std::true_type, _Args &&) [with _Key=std::__cxx11::string, _Value=std::pair<const std::__cxx11::string, int>, _Alloc=std::allocator<std::pair<const std::__cxx11::string, int>>, _ExtractKey=std::__detail::_Select1st, _Equal=std::equal_to<std::__cxx11::string>, _H1=std::hash<std::__cxx11::string>, _H2=std::__detail::_Mod_range_hashing, _Hash=std::__detail::_Default_ranged_hash, _RehashPolicy=std::__detail::_Prime_rehash_policy, _Traits=std::__umap_traits<true>, _Args=<std::__cxx11::string &, int>]" 
(726): here
            instantiation of "std::_Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _H1, _H2, _Hash, _RehashPolicy, _Traits>::__ireturn_type std::_Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _H1, _H2, _Hash, _RehashPolicy, _Traits>::emplace(_Args &&...) [with _Key=std::__cxx11::string, _Value=std::pair<const std::__cxx11::string, int>, _Alloc=std::allocator<std::pair<const std::__cxx11::string, int>>, _ExtractKey=std::__detail::_Select1st, _Equal=std::equal_to<std::__cxx11::string>, _H1=std::hash<std::__cxx11::string>, _H2=std::__detail::_Mod_range_hashing, _Hash=std::__detail::_Default_ranged_hash, _RehashPolicy=std::__detail::_Prime_rehash_policy, _Traits=std::__umap_traits<true>, _Args=<std::__cxx11::string &, int>]" 
/usr/include/c++/5/bits/unordered_map.h(380): here
            instantiation of "std::pair<std::unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>::iterator, __nv_bool> std::unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>::emplace(_Args &&...) [with _Key=std::__cxx11::string, _Tp=int, _Hash=std::hash<std::__cxx11::string>, _Pred=std::equal_to<std::__cxx11::string>, _Alloc=std::allocator<std::pair<const std::__cxx11::string, int>>, _Args=<std::__cxx11::string &, int>]" 
a.cu(8): here

1 error detected in the compilation of "/tmp/tmpxft_00003494_00000000-9_a.cpp1.ii".

这是一个 CUDA 错误吗?如果不是,为什么会发生这种情况?

4

1 回答 1

1

是的,这是一个 CUDA 错误:

我将此问题交叉发布到 devtalk.nvidia.com,并被指示提交官方错误报告。然后我提交了CUDA 错误 1774129(可能需要登录)。

nVIDIA 开发人员 Kevin Kang 昨天证实了这个错误,他说:

您好,我们已经在本地重现了这个问题,我们编译器团队的开发人员正在积极解决这个问题。一旦有更多信息可用,我们将在此处通知您。

当他们修复它时,我将编辑此答案。

编辑:已修复!...但当然不是在 CUDA 8.0 RC 上。我想/希望这个修复让它进入 CUDA 8 决赛。

于 2016-06-15T20:20:10.013 回答