前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Intel OpenCL 之 Pipeline(一):基本概念

Intel OpenCL 之 Pipeline(一):基本概念

作者头像
AI异构
发布2020-07-29 11:08:38
1.1K0
发布2020-07-29 11:08:38
举报
文章被收录于专栏:AI异构AI异构

Pipeline

Pipeline是一种非常重要的并行策略,我们以一个小例子简单说明一下:

代码语言:javascript
复制
for(unsigned i = 0; i < 1024; i++)
{
   y[i] = (a[i] + b[i] + c[i] + d[i] + e[i] + f[i] + g[i] + h[i]) >> 3;
}

顺序执行:

pipeline-11

Pipeline执行:

pipeline-12

假设一步操作需要一个cycleloop迭代一次需要8个cycle。 那么顺序执行需要8*1024个cycle,而pipeline只需要8+1024个cycle(从第8个cycle开始,每个cycle输出一个结果)。

接下来,从pipeline执行的图示中提取完整的一列:

pipeline-13

绘制下图来表示整个loop的执行情况:

pipeline-14

Pipeline Stage

上面的例子中,每一步操作为一个pipeline stage,那么,这个例子里共有8个pipeline stage

pipeline-15

Altera OpenCL SDK 对pipeline的优化

实际上,编译器在生成pipeline结构时可以更加灵活,比如下面的例子:

代码语言:javascript
复制
C = (A >> 5) + B;
F = (D – E) << 3;
G = C + F;

根据手册, SDK会将上面的代码例化为下面的结构,把C和F的生成看成两条独立的线索。这样,每个cycle都能得到一个C和F,输出一个G。

pipeline-16

pipeline-17

常用术语

  1. Loop Trip count:Loop的总迭代次数。 上面的例子中,loop_Trip_count=1024。
  2. Loop Latency:loop执行一次完整迭代需要的时钟周期数
  3. Loop Initiation Interval(II):loop两次迭代之间的时钟周期数

pipeline-18

所以,执行一个完整loop所需时钟周期数为:

对于嵌套循环:

代码语言:javascript
复制
for(unsigned i=0; i<N; i++){
  ...
  for(unsigned j=0; j<M; j++){
    ...
  }
}

总的时钟周期数应为:

参考

Intel FPGA SDK for OpenCL Best Practices Guide

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-03-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AI异构 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Pipeline
  • Pipeline Stage
  • Altera OpenCL SDK 对pipeline的优化
  • 常用术语
  • 参考
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档