113 lines
3.3 KiB
Markdown
113 lines
3.3 KiB
Markdown
|
|
# Tracy 性能测试代码说明
|
|||
|
|
|
|||
|
|
这个项目包含多个高性能计算测试用例,用于展示 Tracy 性能分析器的功能。
|
|||
|
|
|
|||
|
|
## 测试内容
|
|||
|
|
|
|||
|
|
### 1. 矩阵乘法 (Matrix Multiplication)
|
|||
|
|
- 200x200 矩阵相乘
|
|||
|
|
- 展示计算密集型操作的性能
|
|||
|
|
- 三重循环,复杂度 O(n³)
|
|||
|
|
|
|||
|
|
### 2. 快速排序 (Quick Sort)
|
|||
|
|
- 对 100,000 个随机整数进行排序
|
|||
|
|
- 展示递归算法的性能特征
|
|||
|
|
- 平均复杂度 O(n log n)
|
|||
|
|
|
|||
|
|
### 3. 质数计算 (Prime Numbers)
|
|||
|
|
- 使用埃拉托斯特尼筛法
|
|||
|
|
- 计算 0-1,000,000 范围内的所有质数
|
|||
|
|
- 展示循环嵌套和内存访问模式
|
|||
|
|
|
|||
|
|
### 4. 蒙特卡罗π值计算 (Monte Carlo Pi)
|
|||
|
|
- 使用随机采样方法估算π值
|
|||
|
|
- 10,000,000 次迭代
|
|||
|
|
- 展示随机数生成和条件判断的性能
|
|||
|
|
|
|||
|
|
### 5. 斐波那契数列 (Fibonacci)
|
|||
|
|
- **递归方法**: fibonacci(35) - 展示递归调用的开销
|
|||
|
|
- **动态规划**: fibonacci(90) - 展示优化算法的性能差异
|
|||
|
|
|
|||
|
|
### 6. 向量点积 (Vector Dot Product)
|
|||
|
|
- 10,000,000 维向量点积计算
|
|||
|
|
- 展示大规模线性代数运算
|
|||
|
|
- 内存访问密集型操作
|
|||
|
|
|
|||
|
|
### 7. 复杂数学运算 (Complex Math)
|
|||
|
|
- sin, cos, tan, sqrt, log 等函数组合
|
|||
|
|
- 1,000,000 次迭代
|
|||
|
|
- 展示浮点运算性能
|
|||
|
|
|
|||
|
|
### 8. 内存密集型操作 (Memory Intensive)
|
|||
|
|
- 创建 1000x1000 二维数组
|
|||
|
|
- 填充和遍历大量数据
|
|||
|
|
- 展示内存分配和访问模式
|
|||
|
|
|
|||
|
|
### 9. 多线程测试 (Multi-Threading)
|
|||
|
|
- 8 个线程并行执行
|
|||
|
|
- 每个线程执行 50,000,000 次计算
|
|||
|
|
- 展示多线程性能和同步开销
|
|||
|
|
|
|||
|
|
## 如何使用
|
|||
|
|
|
|||
|
|
### 1. 编译项目
|
|||
|
|
```bash
|
|||
|
|
# 在 Visual Studio 中打开项目
|
|||
|
|
# 选择 Release 配置以获得最佳性能测试结果
|
|||
|
|
# 构建项目
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2. 启动 Tracy Profiler
|
|||
|
|
```bash
|
|||
|
|
# 从 Tracy 仓库的 profiler 目录运行
|
|||
|
|
# 或使用预编译的 Tracy.exe
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 3. 运行测试程序
|
|||
|
|
```bash
|
|||
|
|
# 运行 MyProject.exe
|
|||
|
|
# Tracy Profiler 会自动连接(如果启用了 TRACY_ON_DEMAND)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 4. 在 Tracy 中观察
|
|||
|
|
- 查看每个函数的执行时间
|
|||
|
|
- 比较递归 vs 动态规划的性能差异
|
|||
|
|
- 观察多线程的并行执行情况
|
|||
|
|
- 分析热点函数和瓶颈
|
|||
|
|
|
|||
|
|
## Tracy 宏说明
|
|||
|
|
|
|||
|
|
- `ZoneScoped`: 自动追踪整个函数的执行时间
|
|||
|
|
- `ZoneScopedN("名称")`: 追踪代码块并指定自定义名称
|
|||
|
|
- `FrameMark`: 标记帧边界,便于区分不同的测试轮次
|
|||
|
|
|
|||
|
|
## 性能优化建议
|
|||
|
|
|
|||
|
|
根据 Tracy 的分析结果,你可以:
|
|||
|
|
|
|||
|
|
1. **识别热点**: 找出耗时最长的函数
|
|||
|
|
2. **优化算法**: 比较不同算法实现(如递归 vs 动态规划)
|
|||
|
|
3. **并行化**: 识别可以并行化的计算
|
|||
|
|
4. **缓存优化**: 观察内存访问模式,优化数据结构
|
|||
|
|
5. **减少递归**: 递归调用会带来额外开销
|
|||
|
|
|
|||
|
|
## 预期结果
|
|||
|
|
|
|||
|
|
在 Tracy Profiler 中,你应该能够看到:
|
|||
|
|
|
|||
|
|
- **矩阵乘法**: 相对较长的执行时间,CPU 密集
|
|||
|
|
- **递归斐波那契**: 大量重复的函数调用(可视化调用树)
|
|||
|
|
- **动态规划斐波那契**: 单次执行,线性时间
|
|||
|
|
- **多线程**: 8 个并行执行的线程,清晰的时间线
|
|||
|
|
- **质数计算**: 循环密集,但相对高效
|
|||
|
|
- **蒙特卡罗**: 稳定的执行时间,随机数生成开销
|
|||
|
|
|
|||
|
|
## 提示
|
|||
|
|
|
|||
|
|
- 使用 Release 配置编译可以获得更接近实际应用的性能数据
|
|||
|
|
- 多次运行测试可以在 Tracy 中观察性能的一致性
|
|||
|
|
- 尝试修改参数(矩阵大小、迭代次数等)观察性能变化
|
|||
|
|
- 使用 Tracy 的统计功能分析函数调用次数和平均执行时间
|
|||
|
|
|
|||
|
|
|