Skip to content
Gains Summary
Main Navigation 首页 / Home
C++ 编程 / C++ Programming
系统与高性能 / Systems & Performance
Web 开发 / Web Development
人工智能 / Artificial Intelligence
工业软件 / Industrial Software
其他内容 / Other Topics
C++ 编程 / C++系统与性能 / SystemsWeb 开发 / Web人工智能 / AI工业软件 / Industrial

外观

Sidebar Navigation

← 工业软件 / Industrial Software

基础与架构 / Foundations & Architecture

1. 工业软件基础与架构 / Industrial Software Fundamentals and Architecture

2. 工业软件概述 - 认识现代制造业的"大脑" / Industrial Software as the Brain of Modern Manufacturing

3. CAD 计算机辅助设计 - 工业设计的起点 / Computer-Aided Design as the Starting Point of Industrial Design

4. CAE 计算机辅助工程 - 工业仿真的核心 / Computer-Aided Engineering as the Core of Industrial Simulation

5. 前处理与后处理 - CAE 仿真的两端 / Pre-Processing and Post-Processing in CAE Simulation

6. 求解器基础 - CAE 软件的"引擎" / Solvers as the Computational Engine of CAE Software

7. 主流工业软件介绍 - 江湖门派一览 / An Overview of Major Industrial Software Platforms

8. 工业软件文件格式 - 数据流转的"通行证" / Industrial Software File Formats for Data Interoperability

9. 技术栈与开发语言 - 工业软件开发的技术基础 / Technology Stacks and Programming Languages for Industrial Software

10. 软件架构详解 - 工业软件的"骨骼" / Software Architecture as the Skeleton of Industrial Applications

11. CAE 前处理-求解流水线 — 架构设想 / An Architectural Design for a CAE Preprocessing-to-Solver Pipeline

12. 基于 OCC、VTK、Gmsh 与 CalculiX 的前处理到求解闭环程序初步架构设想 / A Preliminary FEA Architecture with OCC, VTK, Gmsh, and CalculiX

本页目录

技术栈与开发语言 - 工业软件开发的技术基础 / Technology Stacks and Programming Languages for Industrial Software ​

日期:2026-04-29 标签:#C++ #Python #Qt #OpenGL #Eigen #并行计算 前置知识:工业软件概述


本章目标 ​

  • 理解工业软件开发的技术栈组成
  • 掌握主要编程语言的特点和用途
  • 了解 GUI 框架的选择
  • 理解图形引擎和数学库
  • 认识数据格式和存储技术

第1部分:工业软件技术栈总览 ​

1.1 技术栈层次结构 ​

┌─────────────────────────────────────────────────────────────────────────────┐
│                          工业软件技术栈                                      │
├─────────────────────────────────────────────────────────────────────────────┤
│                                                                             │
│  ┌─────────────────────────────────────────────────────────────────────┐  │
│  │                        用户界面层 (UI Layer)                            │  │
│  │  Qt / MFC / WPF / Web / Electron                                    │  │
│  └─────────────────────────────────────────────────────────────────────┘  │
│                                    ↓                                        │
│  ┌─────────────────────────────────────────────────────────────────────┐  │
│  │                       业务逻辑层 (Business Logic)                       │  │
│  │  建模引擎 / 求解器 / 前后处理                                          │  │
│  └─────────────────────────────────────────────────────────────────────┘  │
│                                    ↓                                        │
│  ┌─────────────────────────────────────────────────────────────────────┐  │
│  │                        核心算法层 (Core Algorithms)                     │  │
│  │  几何引擎 / 网格引擎 / 数值计算                                        │  │
│  └─────────────────────────────────────────────────────────────────────┘  │
│                                    ↓                                        │
│  ┌─────────────────────────────────────────────────────────────────────┐  │
│  │                        数据持久层 (Data Layer)                          │  │
│  │  文件 I/O / 数据库 / HDF5 / protobuf                                  │  │
│  └─────────────────────────────────────────────────────────────────────┘  │
│                                    ↓                                        │
│  ┌─────────────────────────────────────────────────────────────────────┐  │
│  │                        系统平台层 (Platform Layer)                       │  │
│  │  Windows / Linux / 硬件加速 (CUDA/OpenCL)                            │  │
│  └─────────────────────────────────────────────────────────────────────┘  │
│                                                                             │
└─────────────────────────────────────────────────────────────────────────────┘
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

1.2 工业软件 vs 互联网软件 ​

┌─────────────────────────────────────────────────────────────────────────────┐
│                       工业软件 vs 互联网软件                                │
├─────────────────────────────────────────────────────────────────────────────┤
│                                                                             │
│                    │  工业软件        │  互联网软件        │              │
│  ──────────────────┼──────────────────┼───────────────────┤              │
│  开发语言          │  C++ 为主        │  Java/Python/Go  │              │
│  性能要求          │  极高            │  中等             │              │
│  实时性           │  高              │  低               │              │
│  界面复杂度       │  高(CAD/CAE)   │  中等             │              │
│  数据处理         │  密集计算        │  频繁I/O          │              │
│  并行计算         │  必须            │  可选              │              │
│  稳定性要求       │  极高            │  高               │              │
│  用户规模         │  数千/万        │  百万/亿           │              │
│  发布周期         │  年              │  周/天             │              │
│                                                                             │
│  工业软件 = 计算密集 + 图形密集 + 稳定性优先                                 │
│                                                                             │
└─────────────────────────────────────────────────────────────────────────────┘
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

第2部分:编程语言 ​

2.1 C++ - 工业软件的核心语言 ​

地位:工业软件开发的首选语言

为什么 C++?

┌─────────────────────────────────────────────────────────────────────────────┐
│                          为什么工业软件用 C++?                              │
├─────────────────────────────────────────────────────────────────────────────┤
│                                                                             │
│  1. 性能优先                                                              │
│     - 接近硬件的执行效率                                                   │
│     - 内存控制精细                                                         │
│     - 编译时优化                                                           │
│                                                                             │
│  2. 面向对象 + 泛型编程                                                   │
│     - 复杂数据结构抽象                                                     │
│     - 模板元编程                                                          │
│     - 策略模式灵活                                                         │
│                                                                             │
│  3. 跨平台能力                                                            │
│     - Windows/Linux/Mac                                                   │
│     - 嵌入式也支持                                                        │
│                                                                             │
│  4. 生态丰富                                                              │
│     - OpenGL/DirectX 绑定                                                 │
│     - 几乎所有高性能库支持                                                 │
│                                                                             │
└─────────────────────────────────────────────────────────────────────────────┘
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

C++ 标准演进:

C++98/03 → C++11 → C++14 → C++17 → C++20 → C++23

关键特性:
- C++11:智能指针、lambda、auto、范围for、线程库
- C++14:泛型 lambda、变量模板
- C++17:结构化绑定、if constexpr、并行算法
- C++20:概念(Concepts)、协程、模块、Ranges
1
2
3
4
5
6
7

在工业软件中的应用:

几乎所有核心模块:
- 几何内核
- 网格引擎
- 求解器
- 图形渲染
- 文件 I/O
1
2
3
4
5
6

2.2 Fortran - 科学计算的遗产 ​

历史地位:科学计算领域的老牌语言

为什么还在用?

┌─────────────────────────────────────────────────────────────────────────────┐
│                          Fortran 的遗产                                     │
├─────────────────────────────────────────────────────────────────────────────┤
│                                                                             │
│  1. 历史积累                                                              │
│     - 大量求解器代码 1960s-2000s 积累                                     │
│     - 验证了几十年的算法                                                  │
│     - 重写成本极高                                                        │
│                                                                             │
│  2. 数值计算优势                                                          │
│     - 数组操作高效                                                         │
│     - 数学库丰富                                                           │
│     - 编译器优化成熟                                                      │
│                                                                             │
│  3. 简单直接                                                              │
│     - 没有复杂的 OOP 包袱                                                 │
│     - 工程师容易理解和维护                                                │
│                                                                             │
│  现状:                                                                   │
│  新代码一般用 C++,老求解器用 Fortran,新老混合(互调接口)                  │
│                                                                             │
└─────────────────────────────────────────────────────────────────────────────┘
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

Fortran ↔ C++ 互调:

fortran
! Fortran 代码
SUBROUTINE SOLVE(A, B, N) BIND(C)
  USE ISO_C_BINDING
  IMPLICIT NONE
  REAL(C_DOUBLE), INTENT(INOUT) :: A(*), B(*)
  INTEGER(C_INT), VALUE :: N
  ! 求解逻辑
END SUBROUTINE
1
2
3
4
5
6
7
8
cpp
// C++ 调用 Fortran
extern "C" {
  void solve_(double* A, double* B, int* n);
}

int main() {
  solve_(A.data(), B.data(), &n);
}
1
2
3
4
5
6
7
8

2.3 Python - 脚本与 API ​

现代工业软件的 Python 集成:

┌─────────────────────────────────────────────────────────────────────────────┐
│                          Python 在工业软件中的角色                          │
├─────────────────────────────────────────────────────────────────────────────┤
│                                                                             │
│  1. 自动化脚本                                                             │
│     - 批量处理                                                            │
│     - 参数化分析                                                          │
│     - 工作流自动化                                                        │
│                                                                             │
│  2. API 接口                                                               │
│     - ANSYS: PyMAPDL                                                     │
│     - Abaqus: Abaqus Scripting Interface                                 │
│     - SOLIDWORKS: python-pptx (非官方)                                    │
│                                                                             │
│  3. 数据处理                                                               │
│     - NumPy: 数值计算                                                    │
│     - Pandas: 数据分析                                                   │
│     - Matplotlib: 可视化                                                │
│                                                                             │
│  4. 机器学习集成                                                           │
│     - TensorFlow/PyTorch                                                │
│     - 拓扑优化                                                           │
│     - 代理模型                                                           │
│                                                                             │
└─────────────────────────────────────────────────────────────────────────────┘
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

ANSYS PyMAPDL 示例:

python
from ansys.mapdl.core import launch_mapdl

# 启动 MAPDL
mapdl = launch_mapdl()

# 前处理
mapdl.prep7()
mapdl.et(1, 'SHELL181')
mapdl.mp('EX', 1, 2e11)  # 弹性模量
mapdl.mp('PRXY', 1, 0.3)  # 泊松比

# 建模
mapdl.rectng(0, 1, 0, 1)
mapdl.mesh(0.05)

# 求解
mapdl.solve()

# 后处理
result = mapdl.result
stress = result nodal_stress(0)

mapdl.exit()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

2.4 C# / .NET - Windows 应用开发 ​

应用场景:

Windows 桌面应用
- Autodesk Revit 插件
- 一些内部工具
- WPF 界面开发
1
2
3
4

特点:

优点:
- 开发效率高
- UI 框架成熟
- 与 Windows 集成好

缺点:
- 跨平台困难
- 性能不如 C++
1
2
3
4
5
6
7
8

第3部分:GUI 框架 ​

3.1 Qt - 跨平台 GUI 首选 ​

特点:

┌─────────────────────────────────────────────────────────────────────────────┐
│                              Qt 框架                                        │
├─────────────────────────────────────────────────────────────────────────────┤
│                                                                             │
│  起源:1991年,Qt Company(前身 Trolltech)                                │
│  现在:Digia → Qt Company → The Qt Company                                │
│  许可:GPL / 商业                                                          │
│                                                                             │
│  核心模块:                                                               │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌──────────┐             │
│  │   Qt Core │  │  Qt GUI  │  │Qt Widgets│  │ Qt QML   │             │
│  │  核心库  │  │  图形    │  │  界面    │  │  现代UI  │             │
│  └──────────┘  └──────────┘  └──────────┘  └──────────┘             │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌──────────┐             │
│  │ Qt 3D   │  │ Qt OpenGL│  │ Qt Network│  │Qt SQL    │             │
│  │  3D渲染 │  │  OpenGL  │  │  网络    │  │  数据库  │             │
│  └──────────┘  └──────────┘  └──────────┘  └──────────┘             │
│                                                                             │
│  使用者:ANSYS Discovery、SOLIDWORKS Visualize、Paraview                 │
│                                                                             │
└─────────────────────────────────────────────────────────────────────────────┘
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

Qt 信号槽机制:

cpp
// Qt 信号槽示例
class MeshViewer : public QWidget {
  Q_OBJECT

public:
  MeshViewer(QWidget* parent = nullptr);

private slots:
  void onLoadMeshClicked();      // 槽函数
  void onMeshLoaded(const QString& filename);

signals:
  void meshChanged(Mesh* mesh);  // 信号

private:
  Mesh* m_mesh;
};

// 连接信号和槽
connect(this, &MeshViewer::meshChanged,
        this, &MeshViewer::updateViewport);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

3.2 MFC - 传统 Windows 开发 ​

现状:

历史代码遗留
新项目基本不用
维护老版本

特点:
- 直接 Windows API
- 效率高
- 学习曲线陡峭
- 代码复杂
1
2
3
4
5
6
7
8
9

3.3 Electron / Web - 现代趋势 ​

桌面应用 Web 化:

ANSYS Minerva - 基于 Web 的仿真平台
Autodesk Fusion 360 - 云端集成
1
2

技术栈:

前端:React / Vue / Angular
桌面:Electron / Tauri
通信:WebSocket / gRPC
1
2
3

第4部分:图形引擎 ​

4.1 OpenGL ​

地位:工业图形标准

核心概念:

┌─────────────────────────────────────────────────────────────────────────────┐
│                          OpenGL 渲染管线                                    │
├─────────────────────────────────────────────────────────────────────────────┤
│                                                                             │
│  应用阶段                                                                │
│       ↓                                                                 │
│  顶点着色器 (Vertex Shader)                                              │
│       ↓                                                                 │
│  图元组装 (Primitive Assembly)                                           │
│       ↓                                                                 │
│  几何着色器 (Geometry Shader) ← 可选                                      │
│       ↓                                                                 │
│  光栅化 (Rasterization)                                                 │
│       ↓                                                                 │
│  片元着色器 (Fragment Shader)                                            │
│       ↓                                                                 │
│  测试与混合 (Tests & Blending)                                          │
│       ↓                                                                 │
│  帧缓冲                                                                 │
│                                                                             │
└─────────────────────────────────────────────────────────────────────────────┘
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

现代 OpenGL 示例:

cpp
// 顶点着色器
#version 450
layout(location = 0) in vec3 position;
layout(location = 1) in vec3 normal;

uniform mat4 mvp;

out vec3 vNormal;

void main() {
    gl_Position = mvp * vec4(position, 1.0);
    vNormal = normal;
}

// 片元着色器
in vec3 vNormal;
out vec4 fragColor;

void main() {
    vec3 light = normalize(vec3(1.0, 1.0, 1.0));
    float diff = max(dot(vNormal, light), 0.0);
    fragColor = vec4(0.8 + 0.2 * diff);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

4.2 Vulkan ​

新一代图形 API:

目的:更低的 CPU 开销、更直接的硬件控制

对比 OpenGL:
- 显式渲染,减少驱动开销
- 更好的多线程支持
- 学习曲线陡峭

工业软件应用:
- ANSYS AVx (部分)
- 新一代查看器
- 高端可视化
1
2
3
4
5
6
7
8
9
10
11

4.3 DirectX ​

Windows 游戏/应用标准:

工业软件中:
- Windows 平台独占应用
- 某些 CAD 软件底层使用
- 游戏引擎集成(Unity/Unreal)
1
2
3
4

第5部分:数学库 ​

5.1 Eigen ​

定位:C++ 矩阵运算库

特点:

┌─────────────────────────────────────────────────────────────────────────────┐
│                              Eigen 特点                                    │
├─────────────────────────────────────────────────────────────────────────────┤
│                                                                             │
│  1. 头文件库                                                              │
│     - 无需编译安装                                                        │
│     - 模板库                                                              │
│                                                                             │
│  2. 语法简洁                                                              │
│     - 接近数学表达式                                                      │
│                                                                             │
│  3. 性能优秀                                                              │
│     - 自动 SIMD 优化                                                     │
│     - 表达式模板                                                          │
│                                                                             │
│  4. 功能完整                                                              │
│     - 矩阵运算                                                            │
│     - 线性代数                                                            │
│     - 几何变换                                                            │
│                                                                             │
└─────────────────────────────────────────────────────────────────────────────┘
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

示例:

cpp
#include <Eigen/Dense>

using namespace Eigen;

// 求解线性方程组 Ax = b
Matrix3d A;
A << 1, 2, 3,
     4, 5, 6,
     7, 8, 10;

Vector3d b;
b << 3, 3, 4;

Vector3d x = A.colPivHouseholderQr().solve(b);

// 矩阵运算
MatrixXd C = A * A.transpose();
VectorXd eigenvalues = C.eigenvalues().real();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

5.2 LAPACK / MKL ​

LAPACK:

Linear Algebra Package

Fortran 写的线性代数库
求解:
- 线性方程组
- 特征值问题
- 奇异值分解

几乎所有求解器的底层依赖
1
2
3
4
5
6
7
8
9

MKL (Intel Math Kernel Library):

Intel 的数学库,包含:
- LAPACK
- BLAS
- 稀疏矩阵求解器
- 矢量数学库
- 随机数生成

优化:自动使用 AVX/SSE 指令集
1
2
3
4
5
6
7
8

5.3 PETSc ​

并行科学计算库:

PETSc = Portable, Extensible Toolkit for Scientific Computation

功能:
- 分布式矩阵/向量
- 迭代求解器
- 预条件子
- 并行 I/O

典型应用:
- 大规模 CFD
- 结构力学
- 多物理场
1
2
3
4
5
6
7
8
9
10
11
12

第6部分:数据格式 ​

6.1 HDF5 ​

定位:科学数据存储标准

特点:

┌─────────────────────────────────────────────────────────────────────────────┐
│                              HDF5 特点                                     │
├─────────────────────────────────────────────────────────────────────────────┤
│                                                                             │
│  1. 层级数据结构                                                          │
│     /simulation/step100/stress                                            │
│     /simulation/step100/displacement                                      │
│                                                                             │
│  2. 高效压缩                                                              │
│     - 支持多种压缩算法                                                    │
│     - 大幅减少存储空间                                                    │
│                                                                             │
│  3. 并行 I/O 支持                                                         │
│     - MPI-IO                                                              │
│     - 高速写入大规模数据                                                  │
│                                                                             │
│  4. 类型丰富                                                              │
│     - 数值数组                                                            │
│     - 字符串                                                              │
│     - 复合类型                                                            │
│                                                                             │
│  ANSYS、Abaqus、OpenFOAM 都用 HDF5                                        │
│                                                                             │
└─────────────────────────────────────────────────────────────────────────────┘
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

结构示例:

HDF5 文件结构:

/                     (根组)
├── Mesh              (几何组)
│   ├── Nodes         (节点坐标)
│   ├── Elements      (单元连接)
│   └── Boundaries    (边界)
├── Results           (结果组)
│   ├── Displacement  (位移)
│   └── Stress        (应力)
└── Metadata          (元数据)
    ├── Time          (时间)
    └── AnalysisType  (分析类型)
1
2
3
4
5
6
7
8
9
10
11
12
13

6.2 Protocol Buffers ​

Google 的序列化库:

用途:
- 网络通信
- 配置文件
- 跨语言数据交换

特点:
- 二进制格式,小巧
- 模式定义(.proto)
- 向后兼容

工业软件应用:
- 云端 API
- 分布式计算
- 数据格式定义
1
2
3
4
5
6
7
8
9
10
11
12
13
14

示例:

protobuf
// mesh.proto
syntax = "proto3";

message Node {
  int32 id = 1;
  double x = 2;
  double y = 3;
  double z = 4;
}

message Mesh {
  repeated Node nodes = 1;
  repeated Element elements = 2;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14

第7部分:并行计算 ​

7.1 并行技术栈 ​

┌─────────────────────────────────────────────────────────────────────────────┐
│                          并行计算技术栈                                      │
├─────────────────────────────────────────────────────────────────────────────┤
│                                                                             │
│                          应用层                                            │
│     ┌─────────────┐  ┌─────────────┐  ┌─────────────┐                  │
│     │ MPI 进程    │  │ OpenMP 线程 │  │   CUDA/GPU  │                  │
│     └─────────────┘  └─────────────┘  └─────────────┘                  │
│           ↓                 ↓                ↓                           │
│                          中间层                                          │
│     ┌─────────────────────────────────────────────────────────┐          │
│     │              MPI + OpenMP + CUDA 混合编程               │          │
│     └─────────────────────────────────────────────────────────┘          │
│                              ↓                                          │
│                          运行时                                          │
│     ┌─────────────┐  ┌─────────────┐  ┌─────────────┐                  │
│     │  MPICH      │  │   Intel TBB │  │ CUDA Runtime │                  │
│     └─────────────┘  └─────────────┘  └─────────────┘                  │
│                                                                             │
└─────────────────────────────────────────────────────────────────────────────┘
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

7.2 MPI 并行 ​

消息传递接口:

cpp
#include <mpi.h>

int main(int argc, char** argv) {
    MPI_Init(&argc, &argv);

    int rank, size;
    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
    MPI_Comm_size(MPI_COMM_WORLD, &size);

    // 分发数据
    if (rank == 0) {
        // 主进程:发送数据
        for (int i = 1; i < size; i++) {
            MPI_Send(data[i], count, MPI_DOUBLE, i, 0, MPI_COMM_WORLD);
        }
    } else {
        // 从进程:接收数据
        MPI_Recv(data[rank], count, MPI_DOUBLE, 0, 0, MPI_COMM_WORLD, &status);
    }

    // 并行计算
    parallel_solve(data[rank], count);

    // 收集结果
    if (rank == 0) {
        for (int i = 1; i < size; i++) {
            MPI_Recv(results[i], count, MPI_DOUBLE, i, 0, MPI_COMM_WORLD, &status);
        }
    } else {
        MPI_Send(results[rank], count, MPI_DOUBLE, 0, 0, MPI_COMM_WORLD);
    }

    MPI_Finalize();
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34

7.3 OpenMP ​

共享内存并行:

cpp
#include <omp.h>

#pragma omp parallel for num_threads(8)
for (int i = 0; i < n; i++) {
    // 每个线程处理一部分
    stress[i] = compute_stress(displacement[i]);
}

// 并行归约
double total_energy = 0.0;
#pragma omp parallel for reduction(+:total_energy)
for (int i = 0; i < n; i++) {
    total_energy += element_energy[i];
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14

7.4 CUDA ​

GPU 通用计算:

cpp
__global__ void computeStress(double* displacement, double* stress, int n) {
    int i = blockIdx.x * blockDim.x + threadIdx.x;
    if (i < n) {
        stress[i] = stiffness[i] * displacement[i];
    }
}

int main() {
    // 分配 GPU 内存
    double *d_displacement, *d_stress;
    cudaMalloc(&d_displacement, n * sizeof(double));
    cudaMalloc(&d_stress, n * sizeof(double));

    // 拷贝数据到 GPU
    cudaMemcpy(d_displacement, h_displacement, n * sizeof(double), cudaMemcpyHostToDevice);

    // 启动核函数
    int blockSize = 256;
    int numBlocks = (n + blockSize - 1) / blockSize;
    computeStress<<<numBlocks, blockSize>>>(d_displacement, d_stress, n);

    // 拷贝结果回 CPU
    cudaMemcpy(h_stress, d_stress, n * sizeof(double), cudaMemcpyDeviceToHost);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

核心总结 ​

总结1:语言选择 ​

核心模块:C++(性能、面向对象、跨平台)
求解器:Fortran(遗产)+ C++(新代码)
脚本/API:Python(自动化、机器学习)
界面:Qt(跨平台)、WPF(Windows)
1
2
3
4

总结2:库选择 ​

图形:OpenGL/Vulkan
数学:Eigen + MKL/PETSc
数据:HDF5(大规模)、protobuf(通信)
UI:Qt
并行:MPI + OpenMP + CUDA
1
2
3
4
5

总结3:技术趋势 ​

1. 云化:Web界面、微服务架构
2. GPU加速:CUDA/OpenCL 在求解器中的应用
3. AI集成:PyTorch/TensorFlow 辅助设计
4. 跨平台:Qt 主导
1
2
3
4

章节测试 ​

测试1:语言选择 ​

工业软件的核心模块(几何内核、求解器)主要用什么语言开发?为什么?

测试2:GUI 框架 ​

Qt 的主要特点是什么?有哪些工业软件使用了 Qt?

测试3:数学库 ​

Eigen 和 LAPACK 的主要区别是什么?各自的优势场景?

测试4:并行技术 ​

MPI 和 OpenMP 的主要区别是什么?

测试5:数据格式 ​

HDF5 格式适合存储什么类型的数据?有什么优势?


参考答案 ​

测试1答案 ​

主要用 C++,因为工业软件需要接近硬件的执行效率、C++ 性能优秀、内存控制精细、跨平台能力强、生态丰富。

测试2答案 ​

Qt 是跨平台的 C++ GUI 框架,特点是头文件库(无需编译)、信号槽机制、模块丰富。使用 Qt 的工业软件包括 ANSYS Discovery、SOLIDWORKS Visualize、ParaView 等。

测试3答案 ​

Eigen 是 C++ 头文件模板库,适合中小规模稠密矩阵运算,开发效率高;LAPACK 是 Fortran 编写的线性代数库,适合大规模线性代数问题,是几乎所有求解器的底层依赖。

测试4答案 ​

MPI 是消息传递接口,用于多进程分布式内存并行;OpenMP 是共享内存并行编程API,用于单进程多线程并行。

测试5答案 ​

HDF5 适合存储大规模科学数据(仿真结果、网格数据),优势是层级数据结构、高效压缩、并行 I/O 支持、跨平台。


相关笔记 ​

  • [[05 - 求解器基础]] - 求解器技术
  • [[09 - 软件架构详解]] - 架构设计

下一步学习 ​

  • [ ] 阅读 09 - 软件架构详解

学习状态:完成

最后更新于:

Pager
上一篇8. 工业软件文件格式 - 数据流转的"通行证" / Industrial Software File Formats for Data Interoperability
下一篇10. 软件架构详解 - 工业软件的"骨骼" / Software Architecture as the Skeleton of Industrial Applications

持续记录,持续成长

Copyright © Tidenflow