英特尔图形性能分析器概述

英特尔 GPA 是一套软件工具,它能提供平台级游戏性能分析功能,优化应用性能。

英特尔 GPA 包含以下组件:

  • 英特尔 GPA 监控器 - 将英特尔 GPA 连接至应用(处于本地或远程电脑上),以便配置 HUD 模式和键盘快捷键。
  • 英特尔 GPA 系统分析器 HUD(平视显示系统) - 实时显示应用性能指标,位于 Microsoft DirectX* 应用之上。该工具有助于了解显卡应用的高等级性能配置,以便判断应用会占用大量 CPU 资源还是大量 GPU 资源。如果应用会占用大量 GPU 资源,可以利用英特尔 GPA 帧分析器,通过键盘快捷键捕获一个 GPU 帧来进行详细的分析。如果应用会占用大量 CPU 资源,可以利用英特尔 GPA 平台分析器,通过键盘快捷键捕获轨迹文件来进行详细的分析。在 HUD 中按 Ctrl-F1 查看键盘快捷键列表。
  • 英特尔 GPA 帧分析器 - 支持详细地查看所捕获的帧文件。该文件包含所有用于渲染所选 3D 帧的 Microsoft DirectX* 环境及每绘图调用/区域 GPU 指标。该工具有助于在帧等级、渲染目标等级及绘图调用等级上了解应用性能,在无需重新编译或重新构建应用的情况下支持详细分析和“如果……将会怎样”优化实验。
  • 英特尔 GPA 平台分析器 - 在异构(CPU+GPU)电脑平台上,通过代码直观地显示随时间推移任务的执行情况。该工具在应用运行过程中收集轨迹数据,对代码在所有线程上的执行情况进行详细的分析,使 CPU 任务处理与 GPU 任务处理相关联。工具自动调整整个系统内所有内核的时钟,以便能够在时间表上分析基于 CPU 的工作负载和基于 GPU 的工作负载。

利用 GPA 监控器启动游戏

  1. 查看 Intel GPA Monitor(英特尔 GPA 监控器)是否运行于工具托盘上。

    如果没有,利用 Windows“Start”(开始)菜单启动 GPA 监控器。
  2. 双击Intel GPA Monitor(英特尔 GPA 监控器)图标或右键点击该图标,选择 Analyze
    Application…
    (分析应用Analyze Application(分析应用)对话框将显示。
  3. Recent Applications(最近的应用)列表中选择
    gpasample.exe,点击Run(运行)。“Intel GPA Sample”(英特尔
    GPA 样本)应用开始运行并且 GPA 仪表处于活跃状态,现在可以快速分析性能了。

查看英特尔 GPA 系统分析器 HUD

  1. 点击“Intel
    GPA Sample”(英特尔 GPA 样本)窗口将其激活。按 Ctrl-F1
    HUD(平视显示系统)显示模式之间切换:
  • HUD 关闭
  • 仅显示
    FPS
  • 显示性能图表
  • 显示键盘快捷键“Help”(帮助)



    注:有些游戏可能已设置专门的键盘快捷键组合。如果键盘快捷键在游戏操作中无效,那么可以在 GPA 监控器参数设置中指定新的键盘快捷键。

尝试使用可用的键盘快捷键。例如,按 Alt-W 切换至
Wireframe(全帧显示)模式,然后按 Alt-D 禁用所有覆盖。

分析 GPU

  1. 如要利用一帧进行深入的分析,按 Ctrl-Shift-C 捕获一帧。短暂的延迟后,会看到一条提示信息:“Capture Complete”(捕获完毕),并显示帧文件的路径。
  2. 关闭“Intel
    GPA Sample”(英特尔 GPA 样本)应用,利用 Windows“Start”(开始)菜单打开Intel GPA Frame Analyzer(英特尔 GPA 帧分析器)
  3. Intel GPA Frame Analyzer 启动时,它会打开帧捕获的文件对话框,从列表中选择一个文件,然后单击打开。
  4. Intel GPA Frame Analyzer(英特尔 GPA 帧分析器)启动时,将显示 Open Frame Capture File(打开帧捕获文件) 对话框。从列表中选择帧,点击 Open(打开)。

    借助丰富的特性集,Intel GPA Frame Analyzer(英特尔 GPA 帧分析器)支持深入的逐帧性能分析。现在,仅需在ERG 可视化)面板中选择一个或多个条。垂直条代表“erg”。“erg”指帧中任何可能将像素渲染至帧缓冲区的条目,如“draw”(绘图)调用或“clear”(清空)调用。默认状态下,erg 条的高度表示 erg 在
    GPU 上的执行时间。

    选择 erg 时,相应的几何形状突出显示于 Frame
    View
    (帧视图)窗口中。

判断应用占用大量 GPU 资源还是大量 CPU 资源

启动图形应用:

  • 双击任务栏上的Intel GPA Monitor(英特尔 GPA 监控器)图标或右键点击该图标,选择Open(打开)

    在 (命令行)中,输入所需的应用路径或点击Browse(浏览)找到应用。
  • (可选)在Working Folder(工作文件夹)可编辑组合框中,输入应用将运行的所在目录。例如,一些游戏使用处于不同路径下而不是游戏文件内的启动程序或任务包。
  • 点击 Run(运行)

分析CPUGPU占用情况

  1. 利用默认的键盘快捷键 Alt+H 应用 Null Hardware(空硬件)覆盖模式。Null Hardware(空硬件)模拟无限快速的
    GPU,并且不会向 GPU 发送任何基元。如果 Null Hardware(空硬件)提高帧速率,则应用占用大量 GPU 资源。
  2. 分别利用默认的键盘快捷键 Alt+N 和 Alt+H 应用 Disable Draw Calls(禁用绘图调用)和 Null Hardware(空硬件)覆盖模式。
  • 如果发现应用性能没有任何变化,则说明应用占用大量 CPU 资源。

    解决方法:

    捕获一个轨迹文件:在英特尔 GPA 监控器的Profiles(配置)设置中启用跟踪选项,按 Ctrl+Shift+T 捕获轨迹文件。然后,利用英特尔 GPA 平台分析器显示如何在平台上执行应用中的各种 CPU 任务。
  • 如果 Disable Draw Calls(禁用绘图调用)提高帧速率,而 Null Hardware(空硬件)没有提高帧速率,则应用占用驱动器中的大量绘图调用;

    解决方法:

    通过最大程度减少应用生成的绘图调用的次数,减少应用所需的驱动器工作量。

此外,还可以通过英特尔 GPA 系统分析器 HUD 界面,根据GPU
Busy
GPU 繁忙) 和 GPU FrequencyGPU
频率)指标来检查应用性能。

分析GPU占用指标

  1. 双击任务栏上的 Intel GPA Monitor(英特尔 GPA 监控器)图标或右键点击该图标,选择Preferences(属性)
  2. 打开Metrics tab(标准选项卡),选择GPU BusyGPU 繁忙) 和 GPU FrequencyGPU
    频率)指标。
  3. 点击 Ok
  4. 对显示于应用之上的指标进行分析。

    对于占用大量 GPU 资源的工作负载,GPU 繁忙)的指标值是
    100%。当值低于 100% 即表示 GPU 在闲置状态下占用时间,等待来自 CPU 的数据(在这种情况下,游戏或应用可能是占用大量 CPU 资源的工作负载)。

    如果对于特定的系统配置,GPU frequencyGPU 频率)始终处于峰值;如果 GPU 频率始终处于范围的低端,则可能表示应用占用大量 CPU 资源和/或 GPU 未被充分利用。

    解决方法:

    1. 捕获一个具有低速率的帧,以便借助英特尔 GPA 帧分析器进行详细分析:使用默认的捕获键盘快捷键组合Ctrl-Shift-C。英特尔 GPA 将自动生成唯一的文件名称,以便在保存帧数据使用。

    2. 启动英特尔 GPA 帧分析器。

    3. 在监控器组合框中,选择 <This Machine(本设备)>

    4. 在 File Location(文件位置) 字段内选择将要分析的 Local File(本地文件) ,点击 OK

    5. 在 Open(打开)窗口中选择所需捕获的文件并点击OK

    6. 分析帧捕获情况。

分析帧捕获情况

将对以下主要方面进行分析:

分析最费时的erg

Erg 指帧中任何可能将像素渲染至帧缓冲区的条目。

默认状态下,Erg 可视化面板显示整个帧,erg 条的高度与 GPU 上执行的 erg 的相对持续时间相等。erg 条越高,erg 的总体渲染时间越长。

隔离潜在的性能瓶颈

运行试验,隔离应用中的潜在性能瓶颈。如果利用特定的覆盖模式在渲染某一个帧的过程中显著提高应用性能,那么应查看应用在管线的这个阶段执行哪些行为可能导致性能下降。

  1. 选择希望修改的erg。
  2. 打开Experiments(试验)选项卡,选择所需的试验。

    可以根据已选定的erg,在一个erg、任意一组erg
    或帧内的所有erg 上运行试验。此外,还可以在选定的erg 上同时运行多个试验。

可以在Render
Target Viewer
(渲染目标查看器) 中的 Details(详细信息) 选项卡下查看应用覆盖模式的结果。

修改 DirectX* 状态

如果渲染后的场景并非所想象的场景,可以在英特尔
GPA 帧分析器中更改一些
DirectX 状态来进行调试,就会立即看到经修改的状态会如何影响场景。 

如欲修改
DirectX 状态,请执行以下操作:

  • Scene Overview(场景概览)面板或Erg VisualizationErg
    可视化)面板中选择所需的 erg。
  • 点击Tab(选项卡)面板中的State(状态)选项卡。
  • 在选项卡之间切换,更改相应的 DirectX 状态。

如果所做的修改影响到 erg 的性能,那么将在 Erg VisualizationErg
可视化)Scene
Overview
(场景概览)Render
Target Viewer
(渲染目标查看器)面板中看到发生的变化。

修改着色器代码

可以尝试创建或修改着色器,查看变化结果能否缩短渲染时间,并且使整体场景质量保持在可接受的水平。所需做的就是选择erg,点击“Shaders”(着色器)选项卡,指定一个源代码,或手动编辑代码,或利用其它编辑器剪切和粘贴代码。

分析的轨迹捕获文件

分析多线程应用中的 CPU 任务

英特尔 GPA 平台分析器能够看到随时间的推移,应用中的各种任务的执行情况。工具为应用在平台上的执行方式提供了系统级的描绘。

利用应用支持英特尔 GPA 平台分析器中的分析

英特尔 GPA 平台分析器是一项基于仪表的工具。当利用英特尔
GPA 监控器捕获跟踪文件时,可以立即看到英特尔
GPA 的默认仪表对
Direct3D 应用带来的影响。通过将仪表
API 调用插入至代码中,可以获得更多英特尔
GPA 提供的轨迹数据。

现在,可以:

  • 查看任务执行时间
  • 了解任务中嵌套的子任务会对任务执行持续时间带来怎样的影响
  • 了解应用中的任务如何在线程中执行

查看所选 CPU GPU 帧上的指标

当将轨迹文件加载至英特尔 GPA 平台分析器后,便可查看一组任务的相关统计数据

  1. 在时间表内选择任务
  2. 查看Metadata(元数据)面板。通过点击,可以在时间表内选择单独的任务,或者在点击任务的同时按住 Ctrl 键选择多项任务,或者用鼠标拖拉出一个选择框,圈住希望分析的一组任务。

    默认状态下,Metadata(元数据)面板位于英特尔
    GPA 平台分析器 GUI 的右侧。

    如果没有看到Metadata(元数据)面板,可以在Panels(面板)菜单内激活它。

查看选定任务的相关统计数据

当将轨迹文件加载至英特尔 GPA 平台分析器后,便可查看一组任务的相关统计数据

  1. 在时间表内选择任务
  2. 查看Statistics(统计数据)面板。通过点击,可以在时间表内选择单独的任务,或者在点击任务的同时按住 Ctrl 键选择多项任务,或者用鼠标拖拉出一个选择框,圈住希望分析的一组任务。

    默认状态下,Statistics(统计数据)面板位于英特尔
    GPA 平台分析器 GUI 的右侧。

    如果没有看到Statistics(统计数据)面板,可以在Panels(面板)菜单内激活它。

分析 Direct3D CPU GPU 上的帧执行时间

当捕获来自
Direct3D 应用的轨迹并将其加载至英特尔
GPA 平台分析器时,将看到一个轨道上标有‘DX CPU: Thread 0’,另一个轨道上标有‘DX GPU: Thread 0’。每个轨道包含一个任务,表示每一帧分别在
CPU 和
GPU 上执行。如果从View(视图)菜单中选择Sort
by Name
(按名称排列),则这两个轨道将并排显示。

一个(或几个)轨道可与应用的一个渲染线程相关,还将看到与应用执行的每个
Direct3D 调用相关的任务。获得这些信息,将看到:

  • 每一帧在 CPU 和
    GPU 上的执行时间。
  • 在 CPU 帧整个持续时间中,Direct3D 调用占多长时间。
  • GPU 执行相对于
    CPU 的延迟时间。

如果 GPU 帧任务的执行时间相比 CPU 帧长很多,则应用可能占用大量
GPU 资源,在这种情况下,应利用英特尔
帧分析器查看优化应用
GPU 执行的可能机会。另一方面,如果如果
CPU 帧任务的执行时间相比
GPU 帧长很多,则应用可能占用大量
CPU 资源。在这种情况下,应利用英特尔
平台分析器查看随时间推移各种任务在代码中的执行情况。

分析 CPU GPU 轨迹

  1. 关闭Intel GPA Frame Analyzer(英特尔
    GPA 帧分析器),双击工具托盘上的Intel GPA Monitor(英特尔
    GPA 监视器)图标。Analyze Application(分析应用)对话框将显示。
  2. Recent Applications(最近的应用)列表中选择 gpasample.exe,点击Run(运行)
  3. Intel GPA Sample(英特尔 GPA 样本)中,点击Boulders按钮切换至 boulders。在
    HUD 中按Ctrl-F1 查看键盘快捷键列表。捕获 CPU+GPU 轨迹进行分析:按 Ctrl-Shift-T 捕获轨迹文件。短暂的延迟后,会看到一条提示信息:“Capture
    Complete”(捕获完毕),并显示轨迹文件的路径。
  4. 关闭 Intel GPA Sample(英特尔 GPA 样本)应用,利用 Windows“Start”(开始)菜单打开 Intel GPA Platform Analyzer(英特尔 GPA 平台分析器)
  5. 当Intel GPA Platform Analyzer(英特尔
    GPA 平台分析器)启动时,将显示 Open Trace Capture File(打开轨迹捕获文件)对话框。从列表中选择轨迹,点击Open(打开)。
  6. 通过这个简单的示例,仅能了解Intel GPA Platform Analyzer(英特尔
    GPA 平台分析器)的一些基本概念。为了最大程度地发挥Intel GPA Platform Analyzer(英特尔
    GPA 平台分析器)的作用,应“标记”游戏代码,分析游戏的行为。
  7. 首先,将鼠标放在Intel GPA Platform Analyzer(英特尔
    GPA 平台分析器)的中心,利用鼠标滚轮放大。注意看 CPU 与 GPU 帧的相关性。选择一个或多个 CPU 和 GPU 帧(拖拉鼠标),注意看Top Level Task Statistics(统计数据)和Summary(总结)面板上显示的信息。
  8. 现在,放大到更大程度。注意嵌套的任务,显示 CPU 在每个应用代码块中所占用的时间。例如,如果将场景渲染的主要循环的迭代作为一级任务,并将对象作为子任务隔离渲染,那么将会发现与轨迹顶部绘制的每个循环迭代相对应的模块。

分析实时媒体的性能指标

通过使用英特尔 GPA监控器,可以在运行应用程序时,实时跟踪媒体的指标。这些指标包括GPU利用率细分到GPU引擎和媒体操作类型。

  1. 右键单击英特尔 GPA 监控器在工具栏中的图标。
  2. 选择Media Performance...(媒体性能…)。Media Performance(媒体性能) 对话框就会显示出来。
  3. 查看实施指标,检查下面内容:
  • 应用程序是否能够通过微软 的DXVA或英特尔
    的媒体软件开发工具的接口卸载视频处理到GPU
  • 每种类型的媒体操作的GPU利用率

如果GPU的通用指标接近100%?

如果看到GPA通用指标较高接近100%,应用程序是占用大量 GPA 资源。它可能发生在不受约束的媒体处理中(卸载所有的视频操作到GPU),例如通过在第二代英特尔酷睿处理器上的英特尔 快速同步技术实现的视频编码或转码

如果不是上一种情况,点击Capture(捕获)创建一个媒体性能轨迹捕获轨迹文件,方便在英特尔
GPA平台分析器上的可视化和详细信息的分析。

如果看到由非媒体操作引起显著GPU利用率?

GPU可以被非媒体操作显著地利用,如 GHAL3D 和Unknown(未知)。为了分析和优化通过在微软*
的DirectX上执行的图形操作,请使用英特尔图形性能分析工具

在指标数据或整体性能不符合期望的情况下,可以点击Capture(捕获)创建一个媒体性能轨迹捕获轨迹文件,方便在英特尔
GPA平台分析器上的可视化和详细信息的分析。捕获轨迹文件提供了一个有关代码如何与英特尔
媒体软件开发工具包和微软*
的DXVA2工作以及与媒体相关的工作载荷如何在GPU上执行的系统层次的图片

分析媒体性能轨迹捕获文件

如果应用程序占用大量GPU资源及GPU的利用率低于90%:

  1. 通过英特尔
    GPA平台分析器,打开一个媒体性能轨迹捕获文件。
  2. 缩放和定位GPU(标记为灰色轨迹的空隙GPU EU队列和GPU MFX队列)。

    队列为空和应用程序故障造成的GPU闲置时段,且GPU正在处理当前的操作,请提交下一个操作到队列中。
  3. 查找GPU闲置时段的原因并优化应用程序的性能:
  • 如果闲置时段与CPU上调用的阻塞函数相匹配,如英特尔媒体SDK 函数MFX_SyncOperation,应该优化应用程序以平衡异步优点,并提交下一个操作,而不等待当前操作的完成。
  • 如果闲置时段由CPU上的英特尔媒体SDK操作CopySystemToVideoMemory 或CopyVideoToSystemMemory引起CopySystemToVideoMemory或CopyVideoToSystemMemory对CPU造成的闲置期间,应该在位于视频内存的表面工作,微软的DirectX * 9.0表面或英特尔 媒体SDK不透明表面,以优化应用程序。
  • 如果闲置时段由其他操作引起,如在同一个线程的音频处理和文件操作,例如提交到英特尔媒体SDK或微软的DirectX视频操作,考虑创建额外的线程以更好地并行化。

最佳方法

如欲获得最佳性能,建议:

  • 在一个64位的操作系统中运行英特尔 GPA 帧分析器或英特尔 GPA 平台分析器,这个操作系统的内存至少为4GB(游戏数据越复杂,需要越多的内存)。
  • 禁用其它尽可能多的非基本流程(包括屏保),以确保良好的性能和指标的精确性。
  • 以全屏模式运行游戏,避免
    Windows 桌面及其它进程的
    GPU 开销。
  • 开始运行英特尔
    GPA 帧分析器或英特尔
    GPA 平台分析器前退出游戏,以确保英特尔
    GPA 应用可利用最多资源。
  • 确保内存容量至少为
    2-4 GB。游戏数据越复杂,所需内存越大。
  • 当使用低性能电脑,如上网本,或分析复杂的游戏时,应采用至少配置有
    2-4 GB 内存的客户端/服务器,使英特尔 GPA 帧分析器或英特尔 GPA 平台分析器运行于强大的系统之上。

英特尔® 图形性能分析器(Intel® GPA)的更多相关文章

  1. 英特尔® 图形性能分析器 2019 R1 版本

    了解并下载全新英特尔® 图形性能分析器 2019 R1 版本.新版本新增了 DX11 和 Vulkan 多帧流捕获模式,可以在“帧和图形跟踪分析器”中分析 Vulkan 应用.此外,帧分析器还添加了 ...

  2. Linux 4.20内核得到更新,英特尔CPU 性能降低50%

    根据HKEPC的报道,Linux近日发布了 4.20 内核的一些漏洞修复更新,更新后可能会出现50% 的性能损失,是今年内所有安装Spectre/Meltdown 修补程式中效能跌幅最大的一次. 据报 ...

  3. 在配有英特尔® Iris™ 显卡的系统上通过优化对 Just Cause 3 进行增强

    高端 PC 继续通过高性能显卡驱动桌面游戏. 一流的"梦想机器"基于第六代智能 英特尔® 酷睿™ 处理器i7-6700K等 CPU,通常与高端独立显卡配合使用以运行要求最严苛的游戏 ...

  4. 面向英特尔® x86 平台的 Unity* 优化指南: 第 1 部分

    原文地址 目录 工具 Unity 分析器 GPA 系统分析器 GPA 帧分析器 如要充分发挥 x86 平台的作用,您可以在项目中进行多种性能优化,以最大限度地提升性能. 在本指南中,我们将展示 Uni ...

  5. 增加游戏受众:在英特尔核显上运行MR游戏

    为了获得良好的用户体验,通常VR游戏需要稳定在每秒90帧,这意味着整个场景只有11.1毫秒的时间来进行左右眼渲染,这就是为何VR游戏需要配备高端的独立显卡.现在来看看我们如何使用最新版英特尔图形性能分 ...

  6. 将 Android* Bullet 物理引擎移植至英特尔&#174; 架构

    简单介绍 因为眼下的移动设备上可以使用更高的计算性能.移动游戏如今也可以提供震撼的画面和真实物理(realistic physics). 枪战游戏中的手雷爆炸效果和赛车模拟器中的汽车漂移效果等便是由物 ...

  7. Intel 英特尔

    英特尔 英特尔 基本资料   公司名称:英特尔(集成电路公司)    外文名称:Intel Corporation(Integrated Electronics Corporation)    总部地 ...

  8. 英特尔发布全新英特尔® INDE 2015工具套件

    2014年10月15日,英特尔发布了全新的英特尔® Integrated Native Developer Experience 2015工具套件(简称英特尔® INDE).该产品提供了一系列最佳工具 ...

  9. 现代英特尔® 架构上的 TensorFlow* 优化——正如去年参加Intel AI会议一样,Intel自己提供了对接自己AI CPU优化版本的Tensorflow,下载链接见后,同时可以基于谷歌官方的tf版本直接编译生成安装包

    现代英特尔® 架构上的 TensorFlow* 优化 转自:https://software.intel.com/zh-cn/articles/tensorflow-optimizations-on- ...

随机推荐

  1. java类private/this的使用

    package 类的练习; public class Person { private String name; private int age; private String sex; privat ...

  2. 用PyCharm打个专业的招呼

    PyCharm 是什么 PyCharm(读作"拍恰姆")是 JetBrains 全家桶中的一员,专门用来写 Python 的: 官方网址是: https://www.jetbrai ...

  3. fist-第五天冲刺随笔

    这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzzcxy/2018SE1 这个作业要求在哪里 https://edu.cnblogs.com/campus/fz ...

  4. 手把手教你使用Rollup打包📦并发布自己的工具库🔧

    DevUI是一支兼具设计视角和工程视角的团队,服务于华为云DevCloud平台和华为内部数个中后台系统,服务于设计师和前端工程师. 官方网站:devui.design Ng组件库:ng-devui(欢 ...

  5. day3(django配置跨域)

    1.跨越原理 1. 首先浏览器安全策略限制js ajax跨域访问服务器 2. 如果服务器返回的头部信息中有当前域: // 允许 http://localhost:8080 这个网站打开的页面中的js访 ...

  6. E: Package xxx has no installation candidate成功解决

    E: Package 'php5' has no installation candidate 问题 分析 首先这个问题的最主要的原因就是因为当前Linux系统的下载源中找不到相应的文件,所以说我们需 ...

  7. 第8.20节 Python中限制动态定义实例属性的白名单:__slots__

    一. 引言 按照<第7.10节 Python类中的实例变量定义与使用>.<第7.14节Python类中的实例方法解析>中的介绍,当定义了一个类,并且创建了该类的实例后,可以给该 ...

  8. 第2章 Python编程基础知识目录

    第2.1节 简单的Python数据类型.变量赋值及输入输出 第2.2节 Python的语句 第2.3节 Python运算符大全 老猿Python,跟老猿学Python! 博客地址:https://bl ...

  9. PyQt(Python+Qt)学习随笔:Qt Designer中QAbstractButton派生按钮部件的shortcut 属性

    shortcut 属性保存与按钮关联的快捷键.可以使用shortcut()和setShortcut(QKeySequence)访问和设置该属性. 关于这个属性官网介绍的不多,经老猿实际验证,它与tex ...

  10. python中的Restful

    哇,昨天组里进行总结的时候,小哥哥和小姐姐真是把我给秀到了,跟他们一比,我总结的太垃圾了,嘤嘤嘤.因为我平常不怎么总结,总结的话,有word还有纸质的,现在偏向于纸质,因为可以练练字.个人观点是,掌握 ...