---
title: 系统调优方法
description: "通常GPU优化都涉及两大需求，首先是CPU代码如何使用CUDA进行改造，第二个是已有的CUDA代码如何进行加速，APOD优化流程就是为了应对这两个需求而诞生的，该优化流程要求每次只并行化当前的最主要性能瓶颈。比如一个老代码/项目，有10处运行缓慢的地方，需要先找出其中的最主要影响速度/最慢的地方，而暂时忽略剩下9处。这样做的好处是，每次都可以观察到看到优化成果，而不至于一次性的积攒太多的优化任务。"
url: https://www.hikunpeng.com/document/detail/zh/perftuning/gputuing-wp/kunpenggpu_19_0009.html
sourcePath: /source/zh/perftuning/gputuing-wp/kunpenggpu_19_0009.html
indexId: c3016bd80305be2b1668a2cf9b3be596be809b31bb9ba6ab420bee93051c052757
---
# 系统调优方法

通常GPU优化都涉及两大需求，首先是CPU代码如何使用CUDA进行改造，第二个是已有的CUDA代码如何进行加速，APOD优化流程就是为了应对这两个需求而诞生的，该优化流程要求每次只并行化当前的最主要性能瓶颈。比如一个老代码/项目，有10处运行缓慢的地方，需要先找出其中的最主要影响速度/最慢的地方，而暂时忽略剩下9处。这样做的好处是，每次都可以观察到看到优化成果，而不至于一次性的积攒太多的优化任务。

- 评估（Assess）：对于一个项目，第一步要做的是评估，得到项目代码中每部分的执行时间。有了这部分内容，开发者就可以找到并行优化的瓶颈所在，并开始尝试用GPU进行加速。根据前面提到的阿姆达尔定律和古斯塔夫森定律，可以确定并行优化的性能上界。
- 并行化（Parallelize）：找到瓶颈所在并确定优化的目标和期望，就可以优化代码。调用一些GPU加速库（如cuBLAS，cuFFT或者Thrust）可能会很有效。另一方面，有些应用需要开发者重构代码，这一步主要是暴露可以被并行优化的代码。
- 实现（Optimize）：确定了需要被并行优化的部分之后，就要考虑具体的实现方式了。具体的实现方式通常只有一种，所以需要充分理解应用的需求。APOD是一个反复迭代的过程（找到可以优化的点，实现并测试优化，验证优化效果，然后再重复）。因为对于开发者来说，没有必要最初就找到解决所有性能瓶颈的策略。优化可以在不同的level上进行，配合性能分析工具是很有帮助的。
- 验证（Deploy）：大的原则是当优化完一处之后，立刻将这一部分代码部署到生产环境，而不是再去寻找其他可以优化的地方。这样做有很多重要的原因，比如这会使得用户尽早从这个优化中收益。逐步迭代的方式，有助于减少风险，保证线上的稳定性。
