ABI(Application Binary Interface)概述
ABI概述一、什么是 ABI Info,以及它的作用 ABI(Application Binary Interface,应用二进制接口)定义了在二进制层面上,程序与运行时环境之间如何进行交互的规范。它包含但不限于: 调用约定(calling convention):参数传递方式(寄存器还是栈)、返回值位置、调用方与被调用方的协作方式。 数据类型的大小与对齐方式(int、指针、结构体等的字节大小、对齐边界)。 符号命名与链接符号的命名约定(name mangling 的规则,C、C++ 等语言的差异)。 栈帧布局、异常处理、栈展开、线程本地存储(TLS)的约定。 动态链接时的符号解析、模块边界(如共享库的接口导出/导入、ABI 版本)。 作用: 让不同语言、不同编译器、不同版本的库/模块能够在同一二进制层面正确交互。 保障二进制兼容性:你编译的程序能在目标系统上正确运行、调用系统库和其他库时不会崩溃或行为异常。 方便移植与复用:同一份二进制接口可以在不同平台/硬件上实现,只要实现相同的 ABI。 二、ABI 兼容性是什么 兼容性本质上是“...
C++20 Modules:为什么以及怎么用
为什么 C++ 引入 import(C++20 Modules)特性C++ 在 C++20 中引入了模块(Modules),通过 import 关键字替代传统的 #include 头文件机制的部分用途。其核心动机是解决 C/C++ 头文件模型长期存在的工程痛点,并显著提升编译速度、可维护性与可用性。 背景:传统 #include 的问题 文本拼接模型的固有缺陷#include 只是预处理期的文本复制粘贴: 重复解析同一份头文件(即便有 include guard 也只是避免重复定义,解析仍会发生)。 容易引入宏污染(宏全局可见,互相干扰,难以约束可见性)。 依赖顺序敏感(宏/类型前置声明的顺序问题)。 编译速度与可扩展性差大型工程动辄数千头文件,编译器反复解析同样的声明,导致: 冷启动全量编译慢。 增量编译常常因为依赖扇出大而不够快。 ODR(One Definition Rule)风险与可见性混乱模板/内联函数在多个翻译单元重复实例化与定义,容易触发 ODR 问题。 封装性和接口表达能力不足头文件暴露过多实现细节;没有“接口/实...
DCU(深度计算单元)与 GPU 的区别
在“面向DCU的OpenFOAM并行加速研究”中,DCU通常指的是数据处理单元(Data Compute Unit )。 在计算机硬件领域,DCU是一种专门设计用于高效处理数据密集型计算任务的芯片或硬件模块。与传统的CPU(中央处理器)和GPU(图形处理器)不同,DCU针对特定的数据处理任务进行了优化,比如在大规模数据处理、机器学习和高性能计算等领域有着广泛的应用。 在OpenFOAM的语境下,OpenFOAM是一款用于计算流体动力学(CFD)等工程模拟的开源软件。使用DCU对OpenFOAM进行并行加速研究,目的是利用DCU强大的并行计算能力,加速OpenFOAM模拟过程中的计算,提高计算效率 ,从而更快速地完成复杂的流体动力学模拟等任务。 DCU(Deep Computing Unit)与GPU的区别 这里的DCU的D是Data还是该是Deep? 确认是deep DCU 加速卡是一种协处理器,其架构类似于GPU,具有相似的特性,本文通过在新型国产超算平台上安装OpenFOAM,并在单节点实现了多块DCU 加速卡与OpenFOAM 的结合,创建了全新的基于DCU 加速卡的求...
GDB 操作笔记:以 OpenFOAM Laplacian 跟踪为例
GDB 相关操作笔记(OpenFOAM-Laplacian 跟踪示例)常用命令总结1234567891011121314151617181920212223242526info locals //显示所有局部变量,OpenFOAM里别用,会爆炸info variables/classes/functions/selectors //顾名思义,但都别乱用,容易爆炸info break //显示所有breakpointsinfo source //显示当前位置的文件调用关系,非常有用,尤其是被调用的文件是link的时候n //next,单个文件里的下一行s //step,下一步,能够跳转进入function内部finish //从当前function跳出return //取消当前函数的执行,并立即返回,后面可以跟一个数值,作为函数的返回值c //continue直到下一个breakpointr //run,开始运行codeb //设置brea...
HPC 计算杂记
逻辑处理器、线程(Thread)和核心(Core)是计算机处理器架构中的三个相关但不同的概念。以下是它们之间的区别和联系: 核心(Core): 核心是CPU内部的一个物理单元,能够独立执行计算任务。 每个核心都有自己的一套执行单元和缓存。 在多核心处理器中,每个核心可以并行处理不同的任务。 线程(Thread): 线程是操作系统能够进行运算调度的最小单位,是被系统独立调度和分派的基本单位。 一个进程(Process)可以包含多个线程,每个线程可以并行执行不同的任务。 线程共享进程的内存空间和资源,但拥有自己的程序计数器、寄存器集合和堆栈。 逻辑处理器(Logical Processor): 逻辑处理器是指从操作系统的角度看,能够独立执行线程的处理器。 逻辑处理器可以是物理核心,也可以是超线程技术(Hyper-Threading Technology,HT)创建的虚拟核心。 超线程技术允许单个物理核心模拟多个逻辑核心,每个逻辑核心可以执行不同的线程。 区别: 物理核心是实际存在的硬件单元,而线程是操作系统层面的概念,用于任务的并行执行。 逻辑处理器可以是物理...
机器学习 vs 深度学习
简单来说,Deep Learning(深度学习)是 Machine Learning(机器学习)的一个子集。如果把人工智能(AI)比作一个圆圈,那么机器学习就在圆圈内部,而深度学习则是机器学习内部的一个更小的圆圈。 它们的核心区别在于数据的处理方式以及对硬件的依赖程度。 1. 核心差异对比 特性 Machine Learning (传统机器学习) Deep Learning (深度学习) 数据依赖 在小数据集上表现良好。 需要海量数据(大数据)才能发挥优势。 特征工程 人工干预:需要专家手动提取特征(如颜色、形状、边缘)。 自动提取:神经网络自动从原始数据中学习特征。 硬件需求 普通 CPU 即可运行。 高度依赖 GPU/TPU 进行大规模并行计算。 执行时间 训练时间短,推理速度快。 训练时间可能长达数天甚至数周。 算法结构 线性回归、决策树、支持向量机 (SVM)。 多层神经网络 (CNN, RNN, Transformers)。 2. 关键区别:特征提取 (Feature Extraction)这是两者最本质的区别。 机器学习 ...
Pandoc:Markdown 转 Docx 实用配置
Pandoc_MdToDocx“工业级别的参数”指高级、专业级的参数选项,用于实现高质量、格式化的Word文档导出(适合学术论文、报告或企业文档等“工业级”场景)。Pandoc是一个强大的开源文档转换工具(官网:https://pandoc.org/),它可以将Markdown(.md)文件转换为DOCX(Microsoft Word格式),并保留标题、列表、表格、图片、代码块、数学公式等格式。 在Windows下,Pandoc的使用与其他平台类似(命令行驱动)。我会先介绍安装和基本使用,然后列出关键参数(聚焦于提升导出质量到“工业级别”的选项),最后给出示例和提示。这些参数基于Pandoc的最新稳定版(截至2023年为v3.x),可以帮助您从Markdown快速生成专业化的Word文档。 1. Windows下Pandoc的安装和准备 下载安装:从官网下载Windows安装包(.msi格式),安装后Pandoc会添加到系统PATH中。打开命令提示符(CMD)或PowerShell,运行pandoc --version验证安装。 依赖: 对于基本DOCX导出,无需额外依赖。 如果...
Ubuntu 硬件传感信息查看(CPU 温度/风扇转速)
Ubuntu 下查看 CPU 温度、风扇转速等硬件传感信息的常用工具下面按用途分为命令行与图形界面两类,并给出快速上手命令与要点。多数工具依赖内核的 hwmon/ACPI/厂商驱动,若读不到数据,见文末“读不到传感器时的排查”。 一览表(按硬件/场景) 硬件/场景 推荐工具(CLI) 推荐工具(GUI/桌面) CPU/主板温度、风扇转速 lm-sensors(sensors) Psensor、Vitals(GNOME 扩展)、KDE Plasma System Monitor、Indicator Sensors NVIDIA 显卡温度/风扇 nvidia-smi GPU 图形软件(Psensor 也可显示) AMD 显卡温度/风扇 amdgpu_top、rocm-smi/amd-smi Psensor/KDE(接入 lm-sensors) NVMe SSD 温度 nvme-cli(nvme smart-log) Psensor(经 lm-sensors...
工业级 Python 项目从零构建与规范清单
工业级 Python 项目从零构建与规范清单下面给出一套在团队/企业中可落地的“从零到上线”的项目骨架、工具链与最佳实践。适用于库、CLI 工具与服务端项目(Web/微服务)。示例采用现代 pyproject.toml 工作流与 src/ 布局,工具以稳定与团队协作友好为优先。 1. 选型与总原则 Python 版本策略:统一最低版本(如 3.10+),设定 EOL 升级节奏;CI 覆盖需要支持的多个版本。 布局:推荐 src/ 布局,避免测试时意外导入本地目录。 依赖管理:使用基于 pyproject.toml 的单一真源。 现代方案:uv(快、全能)、Poetry(成熟)、PDM(纯 PEP 实现)、pip-tools(简洁可控)。 代码质量四件套:格式化(black/ruff format)、静态检查(ruff)、类型检查(mypy/pyright)、测试(pytest)。 自动化:pre-commit 钩子 + CI(GitHub Actions/GitLab CI)。 配置与秘密:12-Factor,环境变量优先;...
论文阅读:Fu 2017 OpenFOAM 沸腾模拟
2017-Fu [!PDF|yellow] 2017-Fu-boilInOpenFOAM, p.2 Implementation and validation of two-phase boiling flow models in OpenFOAM 付博在2017年发的文章,涉及到OpenFOAM中开发两相流沸腾模型 [!PDF|note] 2017-Fu-boilInOpenFOAM, p.2 The model consists of six conservation equations for the liquid and the vapor phase, allowing for the thermodynamic non-equilibrium and compressibility of both phases. In addition, the model includes two transport equations for the turbulence kinetic energy and energy dissipation and one tr...
