【问题标题】:How to use nvcc as compiler in ns3如何在 ns3 中使用 nvcc 作为编译器
【发布时间】:2016-03-05 01:18:50
【问题描述】:

我正在尝试在 ns3 中使用 cuda,但是当我尝试运行 CXX="nvcc" ./waf configure 时,它在屏幕上显示以下消息:

Checking for 'g++' (C++ compiler)        : not found 
Checking for 'clang++' (C++ compiler)    : not found 
Checking for 'icpc' (C++ compiler)       : not found 
could not configure a C++ compiler!
(complete log in /home/kelu/workspace/ns-3.24/build/config.log)

我检查了 config.log,它显示如下:

Checking for 'g++' (C++ compiler)
find program='nvcc' paths=['/usr/local/sbin', '/usr/local/bin', '/usr/sbin', '/usr/bin', '/sbin', '/bin', '/usr/local/cuda/bin'] var='CXX' -> ['nvcc']
from /home/kelu/workspace/ns-3.24: Could not determine the compiler type
not found
----------------------------------------
Checking for 'clang++' (C++ compiler)
find program='nvcc' paths=['/usr/local/sbin', '/usr/local/bin', '/usr/sbin', '/usr/bin', '/sbin', '/bin', '/usr/local/cuda/bin'] var='CXX' -> ['nvcc']
from /home/kelu/workspace/ns-3.24: Not clang/clang++
not found
----------------------------------------
Checking for 'icpc' (C++ compiler)
find program='nvcc' paths=['/usr/local/sbin', '/usr/local/bin', '/usr/sbin', '/usr/bin', '/sbin', '/bin', '/usr/local/cuda/bin'] var='CXX' -> ['nvcc']
from /home/kelu/workspace/ns-3.24: Not icc/icpc
not found
from /home/kelu/workspace/ns-3.24: could not configure a C++ compiler!

nvcc 位于 /usr/local/cuda/bin,在路径中。但在我看来,ns3的构建脚本并没有将nvcc解析为编译器。

谁能告诉我在ns3中使nvcc成为CXX编译器的正确方法?

谢谢。

【问题讨论】:

    标签: c++ compilation nvcc ns-3


    【解决方案1】:

    您的问题可能是 Waf 实际上检查编译器的内置 #defines 以检查调用为“gcc”的编译器是否实际上是 gcc。举个具体的例子,如果它检测到编译器是 Intel 的 icc(因为它是 #defined __INTEL_COMPILER)但被“gcc”命令行调用,它将出错!

    进行识别的代码位于https://waf.io/apidocs/_modules/waflib/Tools/c_config.html#get_cc_version

    因此,如果您没有尝试hard 看起来像受支持的编译器之一,那么您应该编写自己的 Waf 工具。

    但是,您可以尝试破解。例如,假设您的编译器与 gcc 足够兼容,但仍然无法通过 Waf 荒谬的严格测试。修复方法是使用真正的 gcc 运行“waf configure”,然后编辑 Waf 存储检测结果的文件,因此在构建步骤中,Waf 将实际运行您的编译器而不是 gcc。您可以通过编辑 build/c4che/_cache.py 来做到这一点:将 CC 定义更改为编译器的完整路径。

    【讨论】:

      【解决方案2】:

      我还没有找到在 ns-3 中使用 nvcc 的方法,但我确实找到了解决这个问题的方法。我很高兴在这里分享我的解决方案以帮助他人:

      1. 使您的 cuda 代码成为静态库: ar rcs libcudacode.a a.o b.o c.o(您需要先使用 g++、nvcc 或其他任何您想要的工具制作 *.o 文件)
      2. 将 libcudacode.a 放入 /your/lib/folder/ 并将您的 cuda 代码放入 /your/src/folder
      3. 将 lib 文件夹和 src 文件夹添加到 waf 中: CXXFLAGS_EXTRA="-I/your/src/folder -I/your/cuda/dir/include" LINKFLAGS_EXTRA="-L/your/lib/folder -L/your/cuda/dir/lib64 -lcudacode -lcudart" ./waf configure
      4. ./waf

      现在应该编译您的代码。你可以通过#including "corresponding_header.h"访问你的cuda代码中的任何公共函数

      一点解释:

      1. CXXFLAGS_EXTRALINKFLAGS_EXTRA 在 ns-3 的编译系统中添加编译标志。您需要添加您的 cuda 代码和 NVidia 的 cuda 库才能使用这些功能。
      2. 如果您使用了任何其他库,也将它们放入CXXFLAGS_EXTRALINKFLAGS_EXTRA
      3. 检查系统中的 cuda 目录名称。你的机器上可能不是 lib64。

      【讨论】:

        猜你喜欢
        • 2019-08-26
        • 1970-01-01
        • 2016-04-29
        • 2010-10-05
        • 1970-01-01
        • 1970-01-01
        • 2016-09-27
        • 2016-09-26
        • 1970-01-01
        相关资源
        最近更新 更多