首页 > 其他分享 >(15-418)Lecture 3 Parallel Programming Abstractions

(15-418)Lecture 3 Parallel Programming Abstractions

时间:2023-12-18 19:11:07浏览次数:33  
标签:15 Abstractions 程序 模型 Programming 实例 gang 共享 ISPC

抽象VS实现

实例:ISPC程序

ISPC是一种SPMD(single program multiple data)编译器。

利用ISPC编写的计算sin(x)的程序如下图:

image.png

ISPC提供了一种抽象,当调用ISPC函数时(即程序中调用sinx的语句),会产生一个gang,这个gang含有多个ISPC实例,每个实例会执行自己的代码,当每个实例都执行完后,恢复原先的执行流。

imageee5d4afb6a52310d.png

两种ISPC程序

第一种ISPC程序如下图,共有4个实例,不同实例在同一时间访问的数据是连续的。

image89b72da36c50b0ce.png

第二种ISPC程序如下图,不同实例在同一时间访问的数据不再连续。

image-20231127095825158.png

ISPC通过SIMD指令实现gang这种抽象,而很显然由于局部性原理,第一种程序的性能更好,ISPC通过一条SIMD指令可以加载这些相邻的数据,第二种程序虽然也可以用SIMD指令实现,但是指令代价更高。

image-20231127100139346.png

提高抽象的层次

继续提高抽象的层次,现在把ISPC程序中的for循环换位foreach循环,foreach循环,foreach表明下面的循环是由一个gang中的实例并行执行的,而为了实现foreach,ISPC把循环的不同部分分配给实例。

imageca9e02120b8dacc4.png

小结

从程序员的视角看,执行一个gang会产生programCount的逻辑指令流,程序员不需要了解逻辑指令流的执行方式。ISPC编译器通过生成SIMD指令来执行gang。

image2bbf6e0fa8e9fdb9.png

三种并行模型

共享地址空间模型

线程通过读写共享变量完成通信,共享变量就如同一个公告栏,任何线程都能对其读或写,用于同步的原语也是共享变量(例如锁)。

imaged5cfc082483827f3.png

共享地址空间模型有多种实现方式,例如共享总线、多级网络。对于共享地址空间模型的多核处理器,任意的核访问一个不在Cache中的内存地址所需时间相同

非一致性内存访问(NUMA)

与共享地址模型类似,所有核都可以访问任意地址,但是访问不同地址的代价不同。NUMA提供了良好的可扩展性,访问局部内存的延迟更低、带宽更高。

imagec05ab09071084245.png

消息传递模型

与上面两种模型不同,消息传递模型中的每个线程有独立的内存空间,线程间通过传递、接受消息进行交流。

imagecb338d620151af28.png

数据并行模型

同一个操作,运用在数组不同元素上。实现数据并行模型一般采用SPMD的方式,可以把其视作map(function, collection),其中function是运动在每一个元素上的独立操作,collection指的是这些元素的集合。

下图中的ISPC程序行为是不确定的,数据并行模型没有提供迭代顺序的规范。

image.png

使用流编程模型来描述数据并行,kernel没有副作用的函数,并且一次只会操作一个元素。

image.png

流编程模型的优点

流编程模型不用担心程序出现的不确定行为,并且编译器可以优化程序流,下图是一个例子,编译器可以得知tmp这一中间变量是不必要的,减少内存访问,提高内存带宽。

image.png

流编程模型的缺点

流编程模型通常需要大量的操作符来描述复杂的数据结构,下图显示了gather这一操作符,gather操作根据R0中的索引来把mem_base地址中的数据按顺序加载到R1中。

image.png

课程总结

三种编程模型提供了并行程序的组织形式,而现代的并行系统更多是多种模型混合,例如CUDA支持在kernel中支持访问共享内存。

现代机器提供不同的

标签:15,Abstractions,程序,模型,Programming,实例,gang,共享,ISPC
From: https://www.cnblogs.com/Kyo-Kyo/p/17912009.html

相关文章

  • 文心一言 VS 讯飞星火 VS chatgpt (159)-- 算法导论12.3 6题
    六、用go语言,当TREE-DELETE中的结点z有两个孩子时,应该选择结点y作为它的前驱,而不是作为它的后继。如果这样做,对TREE-DELETE应该做些什么必要的修改?一些人提出了一个公平策略,为前驱和后继赋予相等的优先级,这样得到了较好的实验性能。如何对TREE-DELETE进行修改来实现这......
  • RS232转profinet网关扫码枪自由口与1500程序对比
    RS232转profinet网关扫码枪自由口与1500程序对比RS232转profinet网关(XD-PNR200)自由口是一种用于将RS232串口信号转换为profinet协议的设备,它具有自由口的功能。本文以某自动化生产线为例进行案例研究。通过RS232转Profinet网关(XD-PNR200),将生产线的多个RS232扫码枪与PLC连接起来,......
  • 12.15
    AGENT/agent.html<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>房产经纪人页面</title><style>.form{width:600px;margin:0auto;......
  • Educational Codeforces Round 159 (Rated for Div. 2)
    EducationalCodeforcesRound159(RatedforDiv.2)A-BinaryImbalance解题思路:有一对\((0,1)\),那么\(0\)就能无限增长。代码:#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;constintN=2e5+10;typedefpair<ll,ll>pii;constllm......
  • 2023 China Collegiate Programming Contest (CCPC) Guilin Onsite (The 2nd Universa
    题解:https://files.cnblogs.com/files/clrs97/2023Guilin_Tutorial.pdf Code:A.EasyDiameterProblem#include<bits/stdc++.h>usingnamespacestd;constintN=300;constintmod=1e9+7;typedefpair<int,int>pii;vector<pair<int,int......
  • Toyota Programming Contest 2023#8(AtCoder Beginner Contest 333)
    ToyotaProgrammingContest2023#8(AtCoderBeginnerContest333)A-ThreeThrees代码:#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;constintN=1e6+10;typedefpair<ll,ll>pii;#definefifirst#definesesecondvoid......
  • Codeforces Round 915 (Div. 2)
    基本情况A题还没进入状态,卡了快10分钟。B题一开始想复杂了,以为是树的直径,后面推出来发现针对叶子数目讨论就行了,正确思路出来太慢了(一个半小时)。C题留了半个多小时,随便口胡了一个LIS思路,但是判断无解没思路。C.LargestSubsequenceProblem-C-Codeforces首先我们把字......
  • 2023-2024-1 20231415 <计算机基础与程序设计》第十二周学习总结
     这个作业属于哪个班级https://edu.cnblogs.com/campus/besti/2023-2024-1-CFAP/这个作业要求在哪里https://www.cnblogs.com/rocedu/p/9577842.html#WEEK12作业目标《C语言程序设计》第11章并完成云班课测试作业正文https://i.cnblogs.com/posts/edit教材......
  • 文心一言 VS 讯飞星火 VS chatgpt (158)-- 算法导论12.3 5题
    五、用go语言,假设为每个结点换一种设计,属性x.p指向x的双亲,属性x.succ指向x的后继。试给出使用这种表示法的二叉搜索树T上SEARCH、INSERT和DELETE操作的伪代码。这些伪代码应在O(h)时间内执行完,其中h为树T的高度。(提示:应该设计一个返回某个结点的双亲的子过程......
  • 文心一言 VS 讯飞星火 VS chatgpt (158)-- 算法导论12.3 5题
    五、用go语言,假设为每个结点换一种设计,属性x.p指向x的双亲,属性x.succ指向x的后继。试给出使用这种表示法的二叉搜索树T上SEARCH、INSERT和DELETE操作的伪代码。这些伪代码应在O(h)时间内执行完,其中h为树T的高度。(提示:应该设计一个返回某个结点的双亲的子过程......