【问题标题】:How to compile CUDA code that uses std::chrono and date?如何编译使用 std::chrono 和日期的 CUDA 代码?
【发布时间】:2019-04-08 18:19:48
【问题描述】:

NVCC 编译器拒绝编译下面的代码(使用 .cu 扩展名),因为它不能很好地处理 Howard Hinnant 的日期库。 NVCC 正在调用 GCC 6.4.0。对于这个简单的例子,C++ 编译器本身完全没有问题。我该如何解决这个问题?

#include <iostream>
#include "date.h"

int main()
{
    const auto time = std::chrono::system_clock::now();
    const auto daypoint = date::floor<date::days>(time);
    const auto ymd = date::year_month_day{daypoint};

    std::cout << ymd.year() << std::endl;

    return 0;
}
../include/date.h:162:27: error: ‘const intmax_t std::__ratio_multiply<std::ratio<24l>, std::ratio<3600l> >::__gcd1’ is private within this context
 using days = std::chrono::duration
                           ^~~~~~~~                                                                                                                                                            
/nfs/admin/hpc/sw/RedHatEnterpriseServer7/GCCcore/6.4.0/include/c++/6.4.0/ratio:289:32: note: declared private here
       static const intmax_t __gcd1 =
                                ^~~~~ 

【问题讨论】:

标签: c++ datetime c++14 chrono


【解决方案1】:

我唯一能推荐的就是向 Nvidia 发送错误报告。这是一个简化的测试用例:

#include <chrono>
#include <ratio>

using days = std::chrono::duration
    <int, std::ratio_multiply<std::ratio<24>, std::chrono::hours::period>>;

int main() {}

【讨论】:

  • 谢谢,如果这是一个错误,那么我的问题并不真正属于 SO。很抱歉责怪你的图书馆!
  • 没问题。我很高兴能帮助你了解这一点。由于我无法访问 NVCC 编译器,您能否确认我的简化测试用例不适用于 NVCC 编译器?
  • 我确认。这也不编译:en.cppreference.com/w/cpp/numeric/ratio/ratio_multiply 似乎ratio_multiply 是错误的来源。
  • 嗨@HowardHinnant,我遇到了同样的问题,并且能够通过将std::ratio_multiplystd::ratio_divide 的实例化替换为date/date.h 头文件中的显式值来解决此问题。我想知道如果我为这个解决方法创建了一个 PR,你是否有兴趣合并(如果答案是否定的,我完全理解,这是一个 cuda 问题而不是日期库问题,但是让库工作会很好开箱即用)?
  • 是否将::type 添加到ratio_multiply 的右尖括号中? using days = std::chrono::duration &lt;int, std::ratio_multiply&lt;std::ratio&lt;24&gt;, std::chrono::hours::period&gt;::type&gt;;
猜你喜欢
  • 2012-06-04
  • 2017-07-28
  • 1970-01-01
  • 2015-06-04
  • 1970-01-01
  • 2021-12-08
  • 2014-05-19
相关资源
最近更新 更多