Intel® FPGA SDK for OpenCL™ Pro Edition: 最佳实践实践指南

ID 683521
日期 9/26/2022
Public
文档目录

A. Intel® FPGA SDK for OpenCL™ Pro版最佳实践指南修订历史

文档版本 英特尔 Quartus Prime版本 修订内容
2022.09.26 22.3
  • 版本维护。
2022.06.21 22.2
  • 版本维护。
2022.03.28 22.1
  • 版本维护。
2021.12.13 21.4
  • 版本维护。
2021.10.04 21.3
  • 版本维护。
2021.06.21 21.2
  • 删除一些过时的图像,并改善查看您内核的report.html 文件章节中的某些描述。
2021.03.29 21.1
  • 更新了专用变量存储的Area Report消息
  • Optimize Global Memory Accesses中添加了关于如何计算全局带宽使用的新的小节。
  • 添加了新主体查看全局存储器信息来描述report.html文件中System Viewer的全局存储器视图。
  • 更新了主题Schedule Viewer的功能,以已包含关于依赖项线路的详细信息。
  • 将Graph Viewer报告更名为System Viewer。
2020.12.14 20.4 版本维护。
2020.09.28 20.3
  • 循环融合主题中行程计数条件松弛内容的少许更新。
  • 添加了一个主题查看设计中的吞吐量瓶颈
  • 添加新主题循环瓶颈
  • 更新了访问JSON格式的HLD FPGA Reports高层次设计报告布局主题,以包含Bottlenecks查看器。
  • 分析您的内核来确定性能瓶颈分析您内核的最佳实践中的少许更新。
  • Instrumenting the Kernel Pipeline with Performance Counters (-profile)中,删除了关于本地盘运行主机应用程序的要点。
  • 更新了主题标题和调用Profiler Runtime Wrapper的说明。
  • 全面更新了分析Autorun Kernels主题。
  • Intel® VTune™ Profiler重命名为Viewing Profiling Data Using Intel® VTune™ Profiler,并对主题描述进行少许更新。
  • 性能数据类型主题中,更新了说明,在Types of 性能数据类型列表中添加了两个新的信息类型,删除了信息类型列表,并添加了注释。
  • 解释分析信息主题描述中进行少许更新。
  • 停顿、占用率、带宽主题的描述进行少许更新。
  • 删除了Intel FPGA dynamic profiler for OpenCL的信息以及在高停顿百分比主题中的截屏
  • No Stalls, Low Occupancy Percentage, and Low BandwidthNo Stalls, High Occupancy Percentage, and Low Bandwidth的标题进行少许更新并更新了其中的图示。
  • Intel FPGA Dynamic Profiler for OpenCL Limitations中删除了限制并添加了新的限制。
  • 删除了如下主题:
    • Intel FPGA Dynamic Profiler for OpenCL GUI
    • Launching the Intel FPGA Dynamic Profiler for OpenCL GUI (report)
    • Source Code Tab
    • Tool Tip Options
    • Kernel Execution Tab
    • Autorun Captures Tab
    • Activity
    • Cache Hit
    • Low Bandwidth Efficiency
    • Autorun Profiler Data
  • 添加了如下新主题:
    • 减少Profiling时的面积资源使用
    • 获取运行时的Profiling数据
    • 分离Execution和Data Post Processing
    • Temporal 性能收集
    • 通道深度
2020.06.22 20.2
  • 更新了Preloading Data to Local Memory中有关使用local_mem_size属性的指南。
  • Reviewing Loop Information中添加了不同场景下调度程序的行为。
  • 嵌套式循环主题中删除了“无序循环迭代”。
  • 简化对局部存储器的存储器访问中关于英特尔 Stratix 10器件的双泵支持的内容进行了少许更新。
2020.04.13 20.1
  • 更新了主题标题,以及整个优化全局存储器的两个或多个Bank主题。
  • 更新了整个查看您内核的report.html文件章节。
  • 删除了Reviewing fMAX II Information主题,因为Fmax II报告已弃用。请参阅Loop Analysis报告。
  • 对Loop Analysis报告添加了fmax相关信息。
  • 添加了新主题性能数据类型
  • 添加了新主题Intel VTune Profiler
  • 添加了新主题调用Profiler Runtime Wrapper以获得Profiling
  • 对现有的分析您的内核以确定性能瓶颈章节进行少许更新,并重新组织该主题的内容。
  • 添加新主题循环融合
  • 全面更新单个Work-Item内核中的循环主题
  • 全面更新影响循环启动间隔的循环携带依赖性主题。
  • 全面更新启动间隔和最大频率之间的权衡主题。
2019.09.30 19.3
  • 全面更新主题Load-Store Units
    • 删除了Streaming Load-Store UnitsSemi-Streaming Load-Store UnitsGlobal Infrequent Load-Store Units小节。
    • Local-Pipelined Load-Store Units更改为Pipelined Load-Store Units,并在本小节中添加了更多信息。
    • 更新了Cached小节中的代码片段。
    • 添加了新主题控制Load-Store Units何时使用每个LSU
  • 全面更新了通过控制存储器复制因子来优化对局部存储器的访问主题,并替换了代码片段。
  • 更新了通道主题,以包含更多关于depth属性的信息。
  • 添加关于 Schedule Viewer的新主题。
  • 查看模块信息查看集群信息主题中少许更新。
  • 添加了新主题查看系统信息,并将某些现有指令移动到该页。
  • 图形查看器的功能主题删除了系统视图相关信息和图像,并将其移动到查看系统信息主题中。
  • 更新了高层次设计报告布局查看报告摘要主题中的图示。
  • 访问JSON格式的HLD FPGA报告主题进行少许更新。
2019.07.01 19.2
  • Intel® FPGA SDK for OpenCL™ Pro版编程指南中的如下主题添加到分析您的内核以确定性能瓶颈中:
    • 启动GUI(报告)
    • 通过Performance Counters (-profile)将代码自动注入内核流水线
    • 分析Autorun内核
  • 删除了HTML Report: Area Report Messages主题并将其子主题移动至查看区域信息下。
  • 查看区域信息中,在 Intel® FPGA SDK for OpenCL™ Pro版编程指南中对analyze-area添加了注释。
  • 将“System Viewer”、“Block Viewer”和“Cluster Viewer”主题合并成Graph Viewer报告。相关主题和图示已相应更新。
  • Single Work-Item Kernel versus NDRange Kernel中,更新了accum_swg内核代码第6行。
2019.05.08 19.1
  • 更新了Kernel Execution Tab,因为不再支持“Memory Copy (from device)”和“Memory Copy (to device)”。
  • 添加了文档存档章节。
2019.04.01 19.1
2018.09.24 18.1
2018.05.04 18.0
表 21.   Intel® FPGA SDK for OpenCL™ 最佳实践指南文档修订历史
日期 版本 修订内容
2017年12月 2017.12.08
  • 添加了如下新主题:
    • Autorun Captures Tab
    • Autorun Profiler Data
2017年11月 2017.11.06
2017年5月 2017.05.08
2016年12月 2016.12.02 少量编辑修改。
2016年10月 2016.10.31
  • 将Altera SDK for OpenCL重新命名为 Intel® FPGA SDK for OpenCL™
  • 将Altera离线编译器更名为 Intel® FPGA SDK for OpenCL™ Offline Compiler
  • Align a Struct with or without Padding中,修改了代码片段以更正属性相对于声明的放置位置。
  • 添加了主题查看您内核的report.html文件,其中的子主题描述了HTML GUI,GUI提供的各种报告,以及有关如何利用HTML报告中的信息优化OpenCL设计实例的预排。
  • Review Your Kernel's Area Report to Identify Inefficiencies in Resource Usage更改为HTML Report: Area Report Messages,并删除了如下子小节:
    • Area Report Messages for Global Memory and Global Memory Interconnect
    • Area Report Messages for Local Memory
    • Area Report Messages for Channels
  • 添加了主题HTML Report: Kernel Design Concepts,其中包含有关内核、全局存储器互连、局部存储器、嵌套循环、单个work-item内核中的循环和通道的子主题。
  • 解释分析信息中,重新组织并添加了如下内容:
    • 额外解释了“停顿”、“占用率”、“带宽”、有效性和缓冲命中(cache hit)。
    • 关于解决令人不满意的Profiler指标的建议
  • 基于Optimization Report Feedback解决单个Work-Item内核依赖项中,修改图示优化单个Work-Item的工作流程,以将HTML报告取代面积报告。
  • 删除了Optimization Report小节,以及相关子小节,因为该信息现在是HTML报告的一部分。
  • Review Kernel Properties and Loop Unroll Status in the Optimization Report更改为Review Kernel Properties and Loop Unroll Status in the HTML Report,因为现在优化报告是report.html文件的一部分。
2016年5月 2016.05.02
  • 添加了主题删除因为对存储器阵列的访问而导致的循环携带依赖项以引入ivdep pragma。
  • 提高存储器访问效率的策略中,添加了以下主题来解释如何使用numbanksbankwidth内核属性配置局部存储器系统的几何结构:
    • 通过存储(Banking)局部存储器提高内核性能
    • 基于阵列索引优化局部存储器Bank的几何结构配置
  • 提高存储器访问效率的策略下,添加了主题通过控制存储器复制因子来优化对局部存储器的访问,以解释singlepumpdoublepump内核属性的使用。
  • 添加了关于面积报告消息的信息。请参阅查看您的内核Area Report来确定效率低下的资源使用小节了解更多信息。
  • 删除了Kernel-Specific Area Report小节,因为已被增强的面积报告取代。请参阅查看您的内核面积报告来确定效率低下的资源使用部分了解更多信息。
  • 更新了Optimization Report下的子小节,以包含增强型的优化报告消息。
    • 添加了Optimization Report Message for Speed-Limiting Constructs
  • 更新了基于Optimization Report Feedback解决单个Work-Item 内核依赖项下的子小节,以包含增强型的优化报告消息。
  • 更新了图示单Work-Item内核工作流程的优化,以包含访问增强的面积报告查看资源使用情况的步骤。
  • 提高NDRange内核数据处理效率的策略下,添加了在Optimization Report中查看内核属性和循环展开状态小节。
2015年11月 2015.11.02
  • 添加了主题多线程主机应用程序
  • 指定最大工作组大小或者需要的工作组大小中添加了有关存储器barrier的注意事项。
2015年5月 15.0.0
  • 存储器访问考量中,添加了关于在针对Cyclone® V器件的内核中声明__constant指针参数时可能发生的性能下降的注意事项。
  • 单个Work-Item内核的优良设计实践中,删除了Initialize Data Prior to Usage in a Loop小节并添加了在尽可能深的范围内声明变量小节。
  • 添加了通过推断移位寄存器来移除循环携带的依赖性。该主题讨论了在单个work-item内核中,如何将双精度浮点数组推断为移位寄存器可以消除循环携带的依赖项。
  • 添加了特定内核的区域报告来显示Altera Offline Compiler在编译期间生成的特定内核的.area文件的实例。
  • Transfer Data Via offline compiler Channels重新命名为Transfer Data Via offline compiler Channels or OpenCL Pipes,并添加了如下内容:
    • 关于通道如何帮助提高内核性能的更多信息。
    • 关于OpenCL管道的信息。
  • 数据类型考量重新命名为数据类型选择考量
2014年12月 14.1.0
  • 重新组织了Optimization Report Messages小节中的信息流程,以更新报告消息和优化报告的布局。
  • 包含新的优化报告消息,以详细说明不成功和次优流水线执行的原因。
  • 优化报告消息下添加了复杂设计的简化分析的优化报告消息子小节以描述简化的内核分析中新的报告消息。
  • 使用Optimization Report的反馈解决单个Work-Item内核依赖项重命名为基于Optimization Report Feedback解决单个Work-Item内核携带依赖项
  • 基于Optimization Report Feedback解决单个Work-Item内核携带依赖项下添加了将循环携带依赖项传输到局部存储器子小节,以描述解决循环携带依赖项的新策略。
  • 更新了Resource-Driven Optimization和Compilation Considerations小节,因为已弃用-O3 --util <N> Altera® Offline Compiler (offline compiler)命令选项。
  • 合并并简化Heterogeneous Memory BuffersHost Application Modifications for Heterogeneous Memory Accesses小节。
  • 添加小节对齐结构并移除结构字段之间的填充
  • 删除了小节Ensure 4-Byte Alignment to All Data Structures
  • 修改图示单个Work-Item优化工作流程,以包含仿真(emulation)和分析(profiling)
2014年6月 14.0.0
  • 将文档重命名为 Intel® FPGA SDK for OpenCL™ 最佳实践指南
  • 重组信息流程。
  • 良好设计实践重新命名为良好OpenCL内核设计实践
  • 通过离线编译器Channel传送数据中添加了通道信息。
  • 分析您的内核来识别性能瓶颈中添加了profiler(分析程序)信息。
  • 添加了小节单个Work-Item内核与NDRange内核
  • 更新了单个Work-Item执行小节。
  • 删除了Performance Warning Messages小节。
  • 单个Work-Item内核编程考量重新命名为单个Work-Item内核的优良设计实践
  • 添加了小节提高单个Work-Item内核性能的策略
  • 优化数据处理效率重命名为提高NDRange内核数据处理效率的策略
  • 删除了Resource Sharing小节。
  • 浮点操作重命名为优化浮点操作
  • 存储器访问效率的优化重命名为提高存储器访问效率的策略
  • 更新了全局存储器的手动分区小节。
  • 添加了小节优化FPGA面积使用的策略
2013年12月 13.1.1
  • 更新了小节指定最大工作组大小或者需要的工作组大小
  • 添加了小节异构存储器缓冲区
  • 更新了小节单个Work-Item执行
  • 添加了小节Performance Warning Messages
  • 更新了小节单个Work-Item内核编程考量
2013年11月 13.1.0
  • 重组信息流程。
  • 更新了小节 Intel® FPGA SDK for OpenCL™ Compilation Flow
  • 更新了小节Pipelines;插入图示Example Multistage Pipeline Diagram
  • 删除了如下图示:
    • Instruction Flow through a Five-Stage Pipeline Processor
    • Vector Addition Kernel Compiled to an FPGA
    • Effect of Kernel Vectorization on Array Summation
    • Data Flow Implementation of a Four-Element Accumulation Kernel
    • Data Flow Implementation of a Four-Element Accumulation Kernel with Loop Unrolled
    • Complete Loop Unrolling
    • Unrolling Two Loop Iterations
    • Memory Master Interconnect
    • Local Memory Read and Write Ports
    • Local Memory Configuration
  • 更新如下小节优良设计实践
  • 删除以下小节:
    • Predicated Execution.
    • Throughput Analysis
    • Case Studies
  • Optimizing Data Processing Efficiency更新并重命名为Optimization of Data Processing Efficiency
  • Replicating Compute Units versus Kernel SIMD Vectorization重命名为Compute Unit Replication versus Kernel SIMD Vectorization
  • Using num_compute_units and num_simd_work_items Together重命名为Combination of Compute Unit Replication and Kernel SIMD Vectorization
  • Memory Streaming更新并重命名为Contiguous Memory Accesses
  • Optimizing Memory Access更新并重命名为General Guidelines on Optimizing Memory Accesses
  • Optimizing Memory Efficiency 更新并重命名为Optimization of Memory Access Efficiency
  • Optimization of Memory Access Efficiency下插入Single Work-Item Execution子小节。
2013年6月 13.0 SP1.0
  • 更新了包含复杂退出路径的OpenCL内核源代码的支持状态。
  • 更新了图示Effect of Kernel Vectorization on Array Summation以更正Store和Global Memory之间数据流。
  • 更新了Loop Unrolling小节中 unroll pragma指令的内容。
  • 更新了局部存储器小节的内容。
  • 更新了图示Local Memories Transferring Data Blocks within Matrices A and B以更正Matrix B中的数据传输模式。
  • 删除了图示Loop Unrolling with Vectorization
  • 删除了小节Optimizing Local Memory Bandwidth
2013年5月 13.0.1
  • 更新了术语。例如,流水线被计算单元代替;矢量lane以SIMD矢量lane替代。
  • 优良设计实践下添加如下小节:
    • Preprocessor Macros
    • Floating-Point versus Fixed-Point Representations
    • Recommended Optimization Methodology
    • Sequence of Optimization Techniques
  • 更新了代码片段。
  • 更新了图示Data Flow with Multiple Compute Units.
  • 更新了图示Compute Unit Replication versus Kernel SIMD Vectorization
  • 更新了图示Optimizing Throughput Using Compute Unit Replication and SIMD Vectorization
  • 更新图示Memory Streaming
  • 插入图示Local Memories Transferring Data Blocks within Matrices A and B
  • 重新组织流程信息。更新了图示、列表和实例的编号。
  • 包含有关新内核属性的信息: max_share_resources num_share_resources
2013年5月 13.0.0
  • 更新了流水线讨论的内容。
  • 更新了案例学习的代码实例和结果列表。
  • 更新了图示。
2012年11月 12.1.0 首次发布。