【问题标题】:Armadillo C++ configuration CheckArmadillo C++ 配置检查
【发布时间】:2021-01-12 18:22:05
【问题描述】:

有没有办法从 c++ 程序检查犰狳的配置?我只是想确保犰狳是用 'atlas' 或 'openblas' 编译的

我找到了arma::arma_config cfg;,但我不知道 cfg 包含什么。我做了一些测试,发现 blasatlas 但 openblas 似乎不是一个选择。有没有什么地方可以找到 cfg 包含的完整列表?

【问题讨论】:

    标签: c++ armadillo


    【解决方案1】:

    这是常见的误解。 Armadillo 使用 LAPACK/BLAS 接口,您可以随意切换库。

    edd@rob:/tmp$ g++ -o armadillo_example armadillo_example.cpp -larmadillo
    edd@rob:/tmp$ ./armadillo_example 
    A*trans(B) =
      -0.3111  -0.3320  -0.8700  -0.8698
       0.1312  -0.7760  -0.2394  -0.6150
      -0.2320  -1.2993  -0.6748  -1.3584
      -0.1677  -1.9175   0.6289  -0.5619
    
    edd@rob:/tmp$ ldd armadillo_example
            linux-vdso.so.1 (0x00007fff92b5b000)
            libarmadillo.so.9 => /usr/lib/libarmadillo.so.9 (0x00007fe598ea5000)
            libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fe598cc4000)
            libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fe598b75000)
            libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fe598b5a000)
            libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fe598970000)
            libblas.so.3 => /usr/lib/x86_64-linux-gnu/libblas.so.3 (0x00007fe598910000)
            liblapack.so.3 => /usr/lib/x86_64-linux-gnu/liblapack.so.3 (0x00007fe598271000)
            libarpack.so.2 => /usr/lib/x86_64-linux-gnu/libarpack.so.2 (0x00007fe598229000)
            libsuperlu.so.5 => /usr/lib/x86_64-linux-gnu/libsuperlu.so.5 (0x00007fe5981b9000)
            /lib64/ld-linux-x86-64.so.2 (0x00007fe598ef1000)
            libopenblas.so.0 => /usr/lib/x86_64-linux-gnu/libopenblas.so.0 (0x00007fe596025000)
            libgfortran.so.5 => /usr/lib/x86_64-linux-gnu/libgfortran.so.5 (0x00007fe595d5d000)
            libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fe595d39000)
            libquadmath.so.0 => /usr/lib/x86_64-linux-gnu/libquadmath.so.0 (0x00007fe595cef000)
    edd@rob:/tmp$ 
    

    犰狳共享库有类似链接:

    edd@rob:/tmp$ ldd /usr/lib/libarmadillo.so.9
            linux-vdso.so.1 (0x00007ffc98853000)
            libblas.so.3 => /usr/lib/x86_64-linux-gnu/libblas.so.3 (0x00007f6043563000)
            liblapack.so.3 => /usr/lib/x86_64-linux-gnu/liblapack.so.3 (0x00007f6042ec6000)
            libarpack.so.2 => /usr/lib/x86_64-linux-gnu/libarpack.so.2 (0x00007f6042e7e000)
            libsuperlu.so.5 => /usr/lib/x86_64-linux-gnu/libsuperlu.so.5 (0x00007f6042e0e000)
            libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f6042c2d000)
            libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f6042ade000)
            libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f6042ac1000)
            libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f60428d7000)
            /lib64/ld-linux-x86-64.so.2 (0x00007f60435ff000)
            libopenblas.so.0 => /usr/lib/x86_64-linux-gnu/libopenblas.so.0 (0x00007f6040743000)
            libgfortran.so.5 => /usr/lib/x86_64-linux-gnu/libgfortran.so.5 (0x00007f604047b000)
            libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f6040459000)
            libquadmath.so.0 => /usr/lib/x86_64-linux-gnu/libquadmath.so.0 (0x00007f604040d000)
    edd@rob:/tmp$ 
    

    在我的 Ubuntu 系统上,/usr/lib/x86_64-linux-gnu/libblas.so.3 是一个软链接,当安装另一个 BLAS/LAPACK 软件包时,它会更新,允许您轻松切换(我在 this GitHub repo to show how to easily install MKL 中使用 例如

    【讨论】:

    • 您只能在使用ARMA_DONT_USE_WRAPPER 时将它们切换出来,对吗?否则,它会使用与sudo cmake . 一起安装时找到的内容,还有什么地方我可以找到arma::arma_config cfg 的一部分吗?
    • 让我改写一下:我向您展示的内容超出了犰狳知道控制的范围,而是在系统级别。这些软链接指向的地方不是犰狳知道或需要知道的。我们如何使用-I-L 告诉编译器和链接器文件所在的位置。
    • 啊,明白了!谢谢! arma::arma_config cfg 的任何信息,在我的程序中我想看看它还有什么其他信息。
    【解决方案2】:

    arma_config 的结构可以在/usr/include/armadillo_bits/arma_config.hpplocate arma_config 找到文件的任何地方找到。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-03
      • 1970-01-01
      • 1970-01-01
      • 2015-04-18
      • 2011-07-18
      • 2011-03-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多