编译器高性能计算【免费下载链接】numbaNumPy aware dynamic Python compiler using LLVM项目地址https://gitcode.com/gh_mirrors/nu/numba点击查看免费下载Numba 是一个基于 LLVM 的 NumPy 感知动态 Python 编译器日常使用中通常通过import numba以 Python API 方式调用。不过Numba 在安装时也会随包提供一个名为numba的命令行工具用于快速查看系统与安装环境信息、导出结构化系统报告以及在开发或排障时对使用 Numba 的 Python 脚本执行编译中间产物类型注解、LLVM IR、汇编转储。读完本文你将掌握numba命令的全部子命令、python -m numba与!numba的等价用法以及如何利用--sys-json输出机器可读的系统诊断报告。CLI 的定位与两种等价调用方式Numba 本质上是一个 Python 包其主体是 numba/core 下的编译器实现CLI 只是它的一个轻量入口目前唯一用途是快速展示系统与安装信息和为使用 Numba 的 Python 脚本快速获取调试信息见 docs/source/user/cli.rst。在终端中直接输入numba并跟上选项与参数如--help、-s即可。若出现command not found说明PATH中没有包含 Numba 的安装位置此时可改用完全等价的python -m numba若仍失败请按 docs/source/user/installing.rst 中安装检查一节先确认import numba是否正常。两种写法调用的是同一份代码numba/__main__.py仅做了一件事——导入 numba/misc/numba_entry.py 中的main()并sys.exit(main())这保证python -m numba与命令行脚本numba行为完全一致。在 IPython 或 Jupyter 中则可借助其通用 shell 执行特性使用!numba注意这并非普通python终端的能力。帮助输出与全部选项运行numba --help可查看全部可用选项$ numba --help usage: numba [-h] [--annotate] [--dump-llvm] [--dump-optimized] [--dump-assembly] [--annotate-html ANNOTATE_HTML] [-s] [--sys-json SYS_JSON] [-g] [filename] positional arguments: filename Python source filename optional arguments: -h, --help show this help message and exit --annotate Annotate source --dump-llvm Print generated llvm assembly --dump-optimized Dump the optimized llvm assembly --dump-assembly Dump the LLVM generated assembly --annotate-html ANNOTATE_HTML Output source annotation as html -s, --sysinfo Output system information for bug reporting --sys-json SYS_JSON Saves the system info dict as a json file -g, --gdbinfo Output system information about gdb上表由 numba_entry.py 中的 make_parser() 使用argparse构建。与官方文档相比当前源码中还增加了两个选项-g/--gdbinfo输出 Numba 对 gdb 调试环境的支持状况与--sys-json将系统信息字典保存为 JSON 文件下文会分别展开。系统信息报告numba -snumba -s等价于numba --sysinfo会打印与系统、Numba 安装及关键依赖相关的大量信息是向开发者反馈 bug 时的首选素材。同样地在 IPython/Jupyter 里用!numba -s即可查看。该报告由 numba/misc/numba_sysinfo.py 中的get_sysinfo()收集、display_sysinfo()格式化输出。报告按区块组织各区块含义如下Time Stamp报告生成时间本地时间与 UTC以及收集耗时。Hardware Information架构Machine、LLVM 报告的主机 CPU 名称llvmbind.get_host_cpu_name()、逻辑 CPU 数、可访问 CPU 数依赖 psutil 的cpu_affinity或 Linux/proc/self/status、CFS 限制cgroup 配额/周期折算的可用 CPU 份额以及 LLVM 探测到的 CPU 特性集合llvmbind.get_host_cpu_features()。OS Information平台名、内核版本、libc 版本Linux 下由platform.libc_ver()提供。Python InformationPython 编译器、实现CPython、版本与 locale。Numba Toolchain Versions与LLVM InformationNumba 与 llvmlite 版本、LLVM 主版本。CUDA Information是否成功初始化设备cu.list_devices()[0]、驱动/运行时版本、NVIDIA bindings 是否可用、numba.cuda.detect()的输出、CUDA 库测试输出以及小版本兼容性Minor Version Compatibility相关状态。NumPy InformationNumPy 版本以及从numpy.core._multiarray_umath读出的 SIMD 特性、dispatch 与 baseline 集合。SciPy / LAPACK InformationSciPy 版本、Numba 构建所用的 LAPACK 整数宽度LP64/ILP64与 SciPy 运行时宽度是否匹配该检查来自numba/np/linalg.py的_LAPACK_BUILD_ILP64与_lapack_runtime_is_ilp64()。SVML Informationconfig.USING_SVML状态、libsvml加载结果、llvmlite 是否使用打过 SVML 补丁的 LLVM以及三者综合的 SVML Operational 判定。Threading Layer InformationTBB、OpenMP、Workqueue 三种并行后端各自是否可导入对应numba/np/ufunc/下的tbbpool、omppool、workqueueOpenMP 还会报告厂商。Numba Environment Variable Information当前环境中所有以NUMBA_开头的环境变量及其取值。Conda Information与Installed Packages若存在 conda 则执行conda info --json与conda list否则回退到python -m pip list列举已安装包。Error log/Warning log收集过程中产生的错误与警告汇总。示例输出节选来自官方文档$ numba -s System info: -------------------------------------------------------------------------------- __Time Stamp__ Report started (local time) : 2022-11-30 15:40:42.368114 UTC start time : 2022-11-30 15:40:42.368129 Running time (s) : 2.563586 __Hardware Information__ Machine : x86_64 CPU Name : ivybridge CPU Count : 3 Number of accessible CPUs : ? List of accessible CPUs cores : ? CFS Restrictions (CPUs worth of runtime) : None CPU Features : 64bit aes avx cmov cx16 cx8 f16c fsgsbase fxsr mmx pclmul popcnt rdrnd sahf sse sse2 sse3 sse4.1 sse4.2 ssse3 xsave Memory Total (MB) : 14336 Memory Available (MB) : 11540 __OS Information__ Platform Name : macOS-10.16-x86_64-i386-64bit Platform Release : 20.6.0 OS Name : Darwin OS Version : Darwin Kernel Version 20.6.0: ... OS Specific Version : 10.16 x86_64 Libc Version : ? __Python Information__ Python Compiler : Clang 14.0.6 Python Implementation : CPython Python Version : 3.10.8 Python Locale : en_US.UTF-8 __Numba Toolchain Versions__ Numba Version : 0untagged.gb91eec710 llvmlite Version : 0.40.0dev043.g7783803 __LLVM Information__ LLVM Version : 11.1.0 __CUDA Information__ CUDA Device Initialized : False CUDA Driver Version : ? CUDA Runtime Version : ? CUDA NVIDIA Bindings Available : ? CUDA NVIDIA Bindings In Use : ? CUDA Detect Output: None CUDA Libraries Test Output: None __NumPy Information__ NumPy Version : 1.23.4 NumPy Supported SIMD features : (MMX, SSE, SSE2, ...) NumPy Supported SIMD dispatch : (SSSE3, SSE41, ...) NumPy Supported SIMD baseline : (SSE, SSE2, SSE3) NumPy AVX512_SKX support detected : False __SVML Information__ SVML State, config.USING_SVML : False SVML Library Loaded : False llvmlite Using SVML Patched LLVM : True SVML Operational : False __Threading Layer Information__ TBB Threading Layer Available : True --TBB imported successfully. OpenMP Threading Layer Available : True --Vendor: Intel Workqueue Threading Layer Available : True --Workqueue imported successfully. __Numba Environment Variable Information__ None found. __Conda Information__ Conda Build : not installed Conda Env : 4.12.0 Conda Platform : osx-64 Conda Python Version : 3.9.12.final.0 Conda Root Writable : True __Installed Packages__ (output truncated due to length)几点值得注意的细节报告末尾会提示提交给他人时只需复制两条虚线----之间的内容或指定区块且务必先删除不希望公开的私有信息。内存与可访问 CPU 等硬件信息的准确性依赖 psutil若未安装 psutil代码会回退到读取/proc/meminfo、/proc/self/status、macOS 的sysctl/vm_stat、Windows 的 PowerShell CIM 查询并给出 consider installing psutil 的警告见 get_os_spec_info()。该模块还通过 numba/tests/test_sysinfo.py 验证了每个关键字段的存在性、类型安全int/float/str/bool/list/dict/datetime以及无错误日志的约束。导出结构化 JSON 报告--sys-json除了面向人阅读的文本报告CLI 还提供--sys-json 路径将整个系统信息字典保存为 JSON 文件$ numba --sys-json /tmp/numba_sysinfo.json在 numba_entry.py 中该分支调用get_sysinfo()将Start与Start UTC两个datetime对象序列化为 ISO 8601 字符串后以indent4写入指定文件并直接退出不再处理 filename。该行为在 numba/tests/test_cli.py 的 test_json_sysinfo_from_module 中得到了验证测试不仅断言 JSON 文件被创建、可被json.load解析还逐项校验了各字段的类型。这一能力对 CI 环境、自动化诊断脚本与机器学习式的环境比对非常有价值。gdb 调试环境信息-gnumba -g等价于numba --gdbinfo输出 Numba 对 gdb 的支持情况由 numba/misc/numba_gdbinfo.py 实现。它会依据config.GDB_BINARY定位 gdb 二进制可通过环境变量NUMBA_GDB_BINARY覆盖实际调用gdb -q -ex ... -ex q检查 gdb 能否启动、内置 Python 是否可用输出sys.version_info[:2]、NumPy 是否可用及其版本汇总出 Numba 打印扩展的支持等级FullPython 与 NumPy 均支持、Partial仅 Python或None给出扩展文件numba/misc/gdb_print_extension.py的绝对路径并提示在 gdb 提示符下执行source 路径加载。其输出示例$ numba -g GDB info: -------------------------------------------------------------------------------- Binary location : /usr/bin/gdb Print extension location : .../numba/misc/gdb_print_extension.py Python version : 3.11 NumPy version : 1.24.3 Numba printing extension support : Full (Python and NumPy supported)numba/tests/test_cli.py 通过 mock 覆盖了 gdb 不可用、Python/NumPy 缺失、版本字符串不可解析等各种边界情形TestGDBCLIInfoBrokenGdbs则真实运行python -m numba -g并设置无效的NUMBA_GDB_BINARY验证容错输出。编译调试注解与 LLVM 中间产物转储numba命令的另一大用途是对脚本执行 转储dump类调试。先创建示例脚本myscript.pyimport numba numba.jit def f(x): return 2 * x f(42)然后依次尝试以下命令$ numba myscript.py --annotate $ numba myscript.py --annotate-html myscript.html $ numba myscript.py --dump-llvm $ numba myscript.py --dump-optimized $ numba myscript.py --dump-assembly各选项含义--annotate输出带类型的源码注解type annotation展示每个变量与表达式被推断出的 Numba 类型。--annotate-html 文件将注解输出为 HTML 文件。注意该模式依赖jinja2模板库若未安装会抛出ImportError: Please install the jinja2 package见 numba_entry.py。--dump-llvm打印未经优化阶段的 LLVM IR。--dump-optimized打印优化后的 LLVM IROptimized LLVM assembly。--dump-assembly打印 LLVM 最终生成的目标机器汇编。底层机制选项到环境变量的映射这些转储选项并非直接驱动编译器而是通过环境变量传递给后续的子进程。在 numba_entry.py 的 main() 中os.environ[NUMBA_DUMP_ANNOTATION] str(int(args.annotate)) if args.annotate_html is not None: from jinja2 import Template os.environ[NUMBA_DUMP_HTML] str(args.annotate_html[0]) os.environ[NUMBA_DUMP_LLVM] str(int(args.dump_llvm)) os.environ[NUMBA_DUMP_OPTIMIZED] str(int(args.dump_optimized)) os.environ[NUMBA_DUMP_ASSEMBLY] str(int(args.dump_assembly))随后用subprocess.call([sys.executable, args.filename])以当前 Python 解释器执行目标脚本。脚本内的numba.jit编译过程会读取这些环境变量——它们对应 numba/core/config.py 中的config.DUMP_LLVM、config.DUMP_OPTIMIZED、config.DUMP_ASSEMBLY、config.ANNOTATE与config.HTMLHTML 路径会先转为绝对路径。也就是说你完全可以直接设置同名环境变量而绕开 CLI例如$ NUMBA_DUMP_LLVM1 python myscript.py这与numba myscript.py --dump-llvm效果一致。理解这一点后你在调试 JIT 编译、排查代码生成问题时就有了两套可互换的调试入口。小结numba命令行工具虽小却覆盖了从环境体检到编译排障的完整链路场景命令查看全部选项numba --help打印人类可读系统报告numba -s导出 JSON 系统报告numba --sys-json report.json查看 gdb 支持状况numba -g输出类型注解numba script.py --annotate/--annotate-html out.html输出 LLVM IR 与汇编numba script.py --dump-llvm/--dump-optimized/--dump-assembly遇到command not found时改用python -m numba二者等价在 IPython/Jupyter 中用!numba。向维护者提交 bug 报告时优先附上numba -s或--sys-json的输出它涵盖了硬件、OS、Python、llvmlite/LLVM、CUDA、NumPy、LAPACK、SVML、线程后端、NUMBA_* 环境变量与已安装包等全部关键信息能显著加速问题定位。赞分享编译器高性能计算【免费下载链接】numbaNumPy aware dynamic Python compiler using LLVM项目地址https://gitcode.com/gh_mirrors/nu/numba点击查看免费下载相关推荐Wand-Enhancer 快速上手解锁游戏修改器高级功能Wand Enhancer 快速上手解锁游戏修改器高级功能 Wand Enhancer 是一款开源的本地补丁工具面向 Windows 10/11 上已安装桌面应用前端Eww 故障排查完全指南编译失败、Wayland 兼容、配置加载与调试命令实战Eww 故障排查完全指南编译失败、Wayland 兼容、配置加载与调试命令实战 本文是 EwwElKowars Wacky Widgets官方文档 doc桌面应用HiGHS高性能优化求解器架构原理与算法实现深度解析HiGHS高性能优化求解器架构原理与算法实现深度解析 HiGHS是一款开源的高性能线性优化求解器专门用于解决大规模稀疏线性规划 LP 、二次规划 QP 和混科学计算高性能计算创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
