在CUDA程序中包含<chrono>时编译器错误 - 即使使用--std = c ++ 11

时间:2017-04-06 03:55:41

标签: c++11 compiler-errors cuda nvcc

我尝试在CUDA计划中测量时间。

为此,我想使用:

#include <chrono>

我收到错误:

error: #error This file requires compiler and library support for the upcoming ISO C++ standard, C++0x. This support is currently experimental, and must be enabled with the -std=c++0x or -std=gnu++0x compiler options.

我试图包含选项-std=c++11-std=c++14-std=c++17

他们都没有奏效。有什么建议吗?

2 个答案:

答案 0 :(得分:2)

该消息不是来自CUDA工具链,而是来自gcc(以及相当旧版本的gcc,可能是4.3)。并且该消息告诉您完全该做什么 - 您需要将-std=c++0x作为选项传递给gcc。任何主机编译器选项都是通过-Xcompiler选项从nvcc传递的,所以

$ nvcc -Xcompiler="--std=c++0x" .....

应解决编译器拒绝导入<chrono>的问题。

答案 1 :(得分:0)

我想添加@ talonmies的正确答案,并提醒您要仔细考虑是否确实要编写自己的代码来进行计时。 CUDA为定时内核和CUDA Runtime API调用提供了一个分析器;您还可以使用其C(ish)API在程序的时间轴上标记段和点。

nVIDIA的Mark Harris写了一篇关于使用个人资料的blog post/tutorial,你可能想看一下。