贡献者: addis
和 C++ 标准库一样,SLISC 一般无需编译。如果你不想修改 SLISC 源码,只需要把 SLISC 文件夹复制到项目文件夹中,并在 C++ 源码中使用相应的头文件即可。
下载 SLISC 源码,创建 “SLISC 库概述” 中的 intro.cpp。注意如果 intro.cpp 和 SLISC 文件夹不在同一个目录,那么你需要修改 #include 中的相对路径,也可以用绝对路径。
要编译,用 g++ intro.cpp -o intro.x。编译成功后,运行程序就得到输出结果
u =
0 1 2
a 有 2 行和 3 列, 共计 6 个元素。
1.1 0 4.4
0 9.9 5.5
以及两个输出文件 data0.matb 和 data.matb。
另外也推荐使用 Jupyter Notebook 和 Cling,无需编译,交互运行代码。
若使用默认选项,Long 类型的最大值(也就是数组最多的元素个数)是 $2^{31}-1 = 2147483647$。也就是 SLISC 只能处理大约 2.1GB 的 char 数组或者 16.8GB 的 double 数组。这在一般情况下是够用的,但如果要数组可能会更大,那么就不能定义该选项,且需要使用 64 位版本的头文件,位于 SLISC-64 目录下。我们可以直接把 SLISC-64/*.h 复制并覆盖到 SLISC 中。
注意如果头文件 SLISC/xxx.h 有对应的 SLISC/xxx.h.in 模板文件,那么这些头文件都是自动生成的。要重新生成 64 位版本的头文件,首先确保你的机器上安装了 octave 4.1 或以上的版本以及 make,然后在 SLISC 目录下运行 make [选项] h 即可。例如 SLISC 中的被生成的头文件是使用 make h 生成的,SLISC-64 中的则是使用 make opt_long32=false h 生成到 SLISC 并复制过去的。SLISC-64q 则使用 make opt_long32=false opt_quadmath=true h 生成,支持 4 精度浮点数。
SLISC 中几乎每个头文件都有对应的测试代码,在 test/test_xxx.cpp 中,一般对应同名的 SLISC/xxx.h。为了测试代码在你使用的环境(CPU 架构和操作系统)中能正常运行,强烈建议编译并运行测试。
最小测试的编译命令为 make opt_min=true -j8,然后运行使用 ./main.x。这里的 -j8 代表使用 8 个进程并行编译,你也可以改为其他的数字,匹配你电脑 cpu 的核数即可。如果不使用 -j 选项,默认单线程编译,可能时间较长。
如果你想测试其他非默认的编译选项,就先生成头文件 make [选项] h 生成头文件到 SLISC(也可以从对应的 SLISC-xxx 把头文件覆盖过去,然后用 make [选项] -j8。完成后同样运行 ./main.x 即可测试。
以下列出一些常用选项,注意只有改变 opt_long32 或 opt_quadmath 需要重新生成头文件。
opt_compiler:选择编译器,支持 g++(默认),clang++,icpc,icpx。非默认编译器不支持 SLISC 的所有功能(例如四精度类型)。
opt_long32:true(默认)使用 32 位的 Long 类型,false 使用 64 位的 Long 类型。
opt_debug:true(默认)使用 debug 模式编译,会检查索引是否超出数组边界,矩阵尺寸是否合法等。还会在可执行文件中生成调试信息,以便使用 gdb 调试。false:Release 模式,开启编译器优化,没有边界和尺寸检查等,不生成调试信息。
opt_asan:true(默认)开启 address sanitizer,进一步检测内存泄漏。
opt_std:C++ 标准,支持 c++11(默认)及以上标准。
opt_static:false(默认)动态编译,可执行文件体积较小,但需要依赖动态链接库文件(取决于系统版本,详见下文),所以无法将可执行文件直接复制到其他系统使用。true:静态编译,不支持 address sanitizer,但优点是编译后没有其他依赖,一般复制到相似的系统中也能正常运行。
opt_min:true 兼容模式,功能最少,无需安装任何第三方库。false 使用默认的第三方库。
lsb_release -a 命令。
Ubuntu16.04 不支持 MPLAPACK 库)
unzip 文件名.zip)。
include 中是头文件,lib 中是库文件,静态库的后缀名为 .a,用于静态编译;动态库后缀名为 .so.版本号。
source setup.sh 设置把库的路径添加到环境变量 CPATH, LIBRARY_PATH, LD_LIBRARY_PATH 中。他们分别是头文件的搜索路径,编译时库文件的搜索路径,运行时动态链接库的搜索路径。除此之外,该脚本也会把对一些超出 GitHub 尺寸限制的大文件进行拼接。
echo $CPATH | tr : \\n。
可以用以下选项开始或关闭第三方库。
opt_lapack:reference(默认)使用 Netlib 的基准版 BLAS 和 LAPACK,openblas 使用 OpenBlas 和基于它的 LAPACK(性能较高),mkl 使用 Intel 的 MKL(性能最高)。
opt_mplapack:true 或 false,默认取 opt_quadmath 的值。四精度版本的 BLAS 和 LAPACK。如果编译时提示 _Float128 未定义,需要开启选项 opt_no__Float128
opt_boost:true(默认)或 false,使用 Boost 库。
opt_gsl:true(默认)或 false,使用 GSL 库。
opt_eigen:true(默认)或 false,使用 Eigen 库。
opt_arb:true(默认)或 false,使用 Arb 库。
opt_arpack:true(默认)或 false,使用 Arpack++ 库
opt_sqlite:true(默认)或 false,使用 SqLite 3 库。
opt_matfile:true 或 false(默认),读写 Matlab 文件(已停止维护)。
除了直接下载,也可以用包管理程序如 apt 安装依赖库,但有的库会确实 64 位版本或者静态库文件等。例如在 Ubuntu 中可以使用以下命令:
apt -y update && apt -y upgrade
apt install -y vim git make g++ gdb gfortran libarpack++2-dev \
liblapacke-dev libsqlite3-dev libgmp-dev libflint-arb-dev \
libflint-dev libgsl-dev libboost-filesystem-dev
 
 
 
 
 
 
 
 
 
 
 
友情链接: 超理论坛 | ©小时科技 保留一切权利