版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1,云计算中的并行数据处理,2,目录,背景 并行处理硬件系统 并行处理软件系统 消息传递接口 大规模异构并行架构,3,1. 背景,物联网、云计算=? 麦肯锡: “数据,已经渗透到当今每一个行业和业务职能领域,成为重要的生产因素。人们对于海量数据的挖掘和运用,预示着新一波生产率增长和消费者盈余浪潮的到来。”,4,BigData,May 2011,麦肯锡 ,Big Data:The next generation frontier for innovation, competition and productivity 2012年3月,美国奥巴马政府宣布投资2亿美元启动“大数据研究和发展计划”,
2、2012年12月24日 人民日报发表当“大数据”来敲门,5,国内,2012年9月计算机学会通讯刊登了李国杰院士等撰写的学术界谈大数据的专题文章 人民日报发表当“大数据”来敲门等相关文章 第一届中国云计算大会 ,2009年5月 主办单位:中国电子学会 第五届,指导单位:工业和信息化部、国家发展和改革委员会、科学技术部,6,领域,搜索引擎 电子商务 (淘宝网,) 生物 天气预报 核物理 3D动漫 图像处理,7,遥感大数据,“十二五”期间的目标100颗卫星在轨稳定运行 4月26日,我国高分辨率对地观测系统首发星“高分一号”成功发射 2012年,我国首颗高分辨率测绘卫星“资源三号”在太原卫星发射 ;每
3、天接收、处理和存储的数据达到1790GB NASA在2011 年10 月1 日至2012年9 月30 日期间统计 EOSDIS 平均每日数据存档增长为6.4 TB/d, 终端用户平均每日分发数据量为17.1TB/d, 总存档数据量达7.4 PB.,8,遥感的数据处理平台,加拿大PCI Geomatica 美国的ENVI 美国ERDAS公司的ERDAS IMAGING 法国的像素工厂(Pixel Factory) 中国测绘科学研究院研制的PixelGrid,9,并行遥感数据分析,ESRI provides several cloud-based GIS solutions: ArcGIS Ser
4、ver on Amazon EC2, 云检索 云存储 云订购 云服务 云发布,10,IBM超级计算机再次战胜人类 大数据分析,由IBM和美国德克萨斯大学联合研制的超级计算机“沃森”(Watson)近日在美国最受欢迎的智力竞猜电视节目危险边缘中击败该节目历史上两位最成功的选手肯-詹宁斯和布拉德-鲁特,成为危险边缘节目新的王者。 Watson由90台IBM Power 750服务器和 DeepQA分析软件组成,(2880 cores and 16 Terabytes of memory ),11,技术分析,Watson通过摄像头拍下屏幕上的文字,然后进行光学识别,得到以文字而不是图像形式存储的题目
5、文本: 信息检索能力+信息的提取以及分析+自动推理+Natural Language Processing watson需要一个语音合成引擎将这个答案的文本转换成语音并播放出来就可以了。,12,大数据与云计算,以“大数据大带宽推动云计算应用与创新”为主题的第五届中国云计算大会 在以客户为中心,来构建大网络和大数据,最终以云计算服务模式来交付,以达到最终的愿景:即正确的时间、精确的位置、适当的方法和终端,让客户得到所需的服务。” 采集 存储 分析,13,大数据与云计算,14,目录,背景 并行处理硬件系统 并行处理软件系统 消息传递接口 大规模异构并行架构,15,世界Top500,16,IBM S
6、equoia(红杉),compute nodes :32*16*2*96=98304,17,国内Top100,18,天河一号,103个机柜、占地面积近千平方米、总重量155吨 ,每年电费可高达1800万元 计算结点B(Intel XeonEP+NVIDIA GPU):7168个,含14336个CPU、7168个GPU; 点点通信带宽40Gbps ;延迟1.2us 总容量为1PB;,19,国产三台千万亿次机,20,国家超算中心,上海超级计算中心 天津超级计算中心 (投资6亿元 ) 深圳超级计算中心(总投资8亿元) 长沙超级计算中心( 总投资7.2亿元) 济南超级计算中心 (投资6亿元 ) 广州超
7、级计算中心 (投资16亿元 ) 。,21,高校高性能计算平台建设,南京大学高性能计算机系统 花费二千万元建成的。 在“2009年第七,在全国高校系统“科学计算/教育”领域中排名第一。 南京微结构国家实验室 吉林大学高性能计算中心 1300万元 , 40万亿次,在2010年6月TOP500 第239位,居全国高校首位。 清华大学 3千万元,100T , CPU计算峰值可达104万亿, GPGPU部分的计算峰值可达68万亿次/秒,百万亿次超算系统在9个机柜中即可实现,22,地方政府,北京亦庄的北京云计算基地 上海云海计划 成都云计算中心 无锡城市云计算中心 鄂尔多斯绿色云计算数据中心,23,并行计
8、算基础-计算机体系结构,并行计算机 共享存储的对称多处理器系统 SMP 分布存储的大规模并行处理系统(MPP) 计算机集群系统(Cluster) 集群系统优点: 可靠性、扩展性和性价比,24,图 世界500强计算机体系结构发展趋势图,集群系统的发展,25,系统总体架构,26,27,集群系统,由节点和集群互连网络组成,再配置上全局软件,是一种松散耦合的多机系统.通过各节点的并行运行,可以实现高性能的并行计算. 节点:机架式或者刀片式 网络:InfiniBand和千兆以太网.,28,性能评测,29,集群性能评测,理论峰值主频每个时钟周期浮点运算的次数CPU数,HPL(High Performanc
9、e Linpack),30,Green500 Data intensive computing,31,软件环境组成,操作系统 作业调度系统 管理和监控软件 并行开发软件 客户端软件,32,High performance Linpack,1、操作系统 LINUX 2、并行软件MPICH2 3、数学库 Gotoblas,BLAS(Basic Linear Algebra Subprograms) 4、 HPL,33,34,并行计算平台的使用,申请帐号 熟悉软件 :putty 和winscp 熟悉常用Linux命令 掌握MPI函数 Linux环境下vi编辑器编写程序 或者本地编写后上传程序 Lin
10、ux编译链接运行,35,摩尔定律的困境,CPU发展规律: “摩尔定律” :由于物理定律的限制,采用提高CPU制程和主频的办法遇到了工艺上的壁垒,暂时无法突破 GPU发展规律: 1993年开始,GPU的性能以每年2.8倍的速度增长,峰值发展趋势,带宽发展趋势,36,二者的区别与联系,CPU和GPU的联系 都是计算机体系结构中的重要部分 超大规模集成电路元件 能够完成浮点运算功能 GPU的设计目标与CPU是不同的: CPU的微架构是按照兼顾“指令并行执行”和“数据并行运算”的思路而设计。 CPU的大部分晶体管主要用于构建控制电路和Cache CPU的5%是ALU,控制电路设计更加复杂 CPU的内存
11、延迟是GPU的1/10 GPU其实是由硬件实现的一组图形函数的集合。 GPU控制电路相对简单,而且对Cache的需求小,所以可以把大部分的晶体管用于计算单元 GPGPU的40%是ALU GPGPU的内存带宽是CPU的10倍,37,GPU(graphics processing unit ),NVIDIA公司在1999年发布GeForce256图形处理芯片时首先提出GPU的概念。 1999年,T 非常适合处理计算密集型的数据并行任务; Sandy Bridge:每颗CPU核心、高速缓存段、核显和内核管理中心等可以互相交换数据,GPU普适性,46,Intel HD Graphics,HD Grap
12、hics (6 execution units) HD Graphics 2500 (6 ) HD Graphics 4000 (16) Haswell HD Graphics (GT1, 6) HD Graphics 4200, 4 XXX, (GT2, 20) HD Graphics 5000, Iris Graphics 5100 (GT3, 40 Iris Pro Graphics 5200,47,Accelerated Processing Unit,APU ,CPU通过北桥访问内存;采用Fusion Compute Link来将北桥、GPU、IO连接在一起, 同时在GPU和北桥之间
13、搭建Radeon Memory Bus,目的是让GPU与内存进行高速数据交换, 从而提升3D性能与并行计算性能。,48,GPU开发软件,DirectX(MS) OpenGL CUDA (2007年6月, NVIDIA) Open CL Direct Compute,C+AMP Matlab OpenACC PortlandGroup(PGI),PGI Accelerator,49,CUDA,2006年11月与G80一同诞生 2007年6月,1.0版与Tesla 2013年5 ,CUDA 5.5,50,Compute Unified Device Architecture,51,Open Com
14、puting Language,苹果发起,Khronos开发 2008年6月苹果公司提出 AMD, Intel, ARM, NVIDIA, Qualcomm, Nokia, IBM, Samsung, TI等 Microsoft是例外 适合CPU、GPU、CELL、DSP架构 AMD AMD Accelerated Parallel Processing SDK 2.5,全面支持OpenCL 1.1 NVIDIA 支持OpenCL,52,开发工具,intel 2012年,推出SDK for OpenCL Applications AMD 2012年,推出了CodeXL 1.0 beta 帮助开
15、发者更好利用CPU, GPU和APU计算性能的综合开发工具套装,具有强大的GPU调试、CPU和GPU代码分析、及静态的OpenCL kernel性能分析等能力。,53,OpenACC,英伟达、Cray、Portland Group (PGI) 以及 CAPS OpenACC: Directives for GPUs ,OpenMP void saxpy_parallel(int n, float a, float *x, float *restrict y) #pragma acc kernels for (int i = 0; i n; +i) yi = a*xi + yi; ,54,图形A
16、PI,DirectX OpenGL 1.0 September 30, 1995 January 1992. 2.0 1996 September 7, 2004 3.0 September 15, 1996 July 11, 2008 4.0 Never launched March 11, 2010 5.0 August 4, 1997 6.0 August 7, 1998 7.0 September 22, 1999 8.0 November 12, 2000 9.0 December 19, 2002 10.0 November 30, 2006 11 october 22, 2009
17、,55,DirectCompute,2009年10月22日,微软公司正式发布Windows 7,DirectX 11集成在Windows 7 中同步登场 DirectCompute是Microsoft DirectX的一部分。 DirectX 10: DirectCompute 4.0 DirectX 10.1:DirectCompute 4.1 DirectX 11: DirectCompute 5.0 。 2011,6月16,AMD Fusion开发者峰会上,微软发布了C+ AMP,(Accelerated Massive Parallelism ),56,C+AMP,微软于11年6月推出
18、的一个异构并行编程框架,Visual Studio 11开发者预览版起支持。 六个特征 C+ 而不是 C 主流 最小的改动 可移植的 通用且不会过时 开放,57,MIC-Xeon Phi,入门级3100 高端5100 顶级7100 XeonPhi5110P拥有60个核心,每一个核心 都有着4个线程,1.05GHz,2级缓存为 30MB,最大支持8GB的GDDR5 内存寻址,内存带宽高达320Gbps,双精度 浮点计算能力能够达到1TFLOPS $2,649,58,Xeon Phi,开发代号为KnightsCorner PCI Express Vector Processing Unit (VP
19、U). OS由Linux修改, uOS Micro Operating System 包括C、C+和Fortran 支持OpenMP、pThread、MPI,59,计算的发展,1997年,top 1,美国桑迪亚国家实验室的“ASCI 红”,是世界上首个突破每秒一万亿次(TeraFLOPS)浮点运算的系统,它采用了9298个英特尔奔腾 Pro处理器,成本约每一万亿次55,000,000美元。, 2011年,每一万亿次(TeraFLOPS)的拥有成本降到了低于1000美元。高性能计算确确实实已经为所有人触手可及。,60,云终端,Imagination Technologies ,PowerVR的S
20、GX系列 (PowerVR G6230/6430, 100GFLOPS 高通(QUALCOMM) Adreno320, OpenCL 1.2 博通(Broadcom)BCM系列 NVIDIA Tegra ARM的Mali图形处理单元。 Mali-T628核心数量4-8个, OpenCL,61,并行处理软件系统,基础知识 OpenMP 消息传递接口 Matlab OpenCL,62,负载均衡问题,63,负载均衡问题,64,负载均衡问题经典算法,65,负载均衡问题,66,性能分析,67,Amdahl定律,68,Gustafson定律,69,加速比性能定律,Sun printf(I am the m
21、ain thread.n); #pragma omp parallel private(nthreads, thread_id) nthreads = omp_get_num_threads(); thread_id = omp_get_thread_num(); printf(Hello. I am thread %d out of a team of %dn, thread_id, nthreads); printf(Here I am, back to the main thread.n); return 0; ,73,几点说明,#pragma omp parallel, 创建并行区:并
22、行区里每个线程都会去执行并行区中的代码。 控制并行区中线程的数量 并行区内线程数=系统中核的个数。 set OMP_NUM_THREADS=4 gcc : gcc -fopenmp hello.c -o hello,74,循环并行化,循环并行化是是把一个循环分成多部分在不同的进程上执行。 #pragma omp parallel for for(int i=0; in; i+) zi = xi+yi; 工作原理:将for循环中的工作分配到一个线程组中,线程组中的每一个线程将完成循环中的一部分内容;,75,消息传递接口( MPI ),MPI库函数 MPI目前支持C、C+和FORTRAN语。 一个
23、MPI并行程序由一组运行在相同或不同计算机上的进程构成。 进程组(process group) 进程号(rank),76,消息传递接口( MPI ),下面给出基于C语言的并行程序框架 #include 并行库 int main(int argc , char *argv ) 使用MPI_Init函数初始化并行计算环境; 使用MPI_Comm_size函数返回指定通信器中进程的数目; 使用MPI_Comm_rank函数返回指定通信器中本进程的进程号; 并行程序代码和进程通信代码; 使用MPI_Finalize退出并行计算环境,并行程序结束; Return 0; ,77,并行Hello world
24、,#include mpi.h int main( argc, argv ) int argc; char *argv; int rank, size; MPI_Init( ,Hello world from process 0 of 3Hello world from process 1 of 3Hello world from process 2 of 3,78,MPI程序的的编译与运行,mpif77 o hello hello.f 或 mpicc o hello hello.c 生成hello的可执行代码. mpirun np 4 hello 4 指定np的实参,表示进程数,由用户指定.
25、 hello 要运行的MPI并行程序.,%小写o,np: The number of process.,79,通信模式,点对点通信(point to point communication) 阻塞型:MPI_Send和MPI_Recv。 非阻塞型:MPI_Isend和MPI_Irecv。 聚合通信(collective communication) 一对多通信: 广播MPI_Bcast 多对一通信:数据收集MPI_Gather, 多对多通信:全交换MPI_Alltoall,80,发送消息语法,MPI_Send(void *buf, int count, MPI_Datatype datatyp
26、e, int dest, int tag, MPI_Comm comm) 将缓冲区中的count个datatype数据类型的数据发送到目的进程dest,本次发送的消息标志是tag,使用这一标志就可以把本次发送的消息和本进程向同一日的进程发送的其它消息区别开来;MPI_SEND操作指定的发送缓冲区是由count个类型为datatype的连续数据空间组成,81,接收消息语法,MPI_Recv(void *buf, int count, MPI_Datatype datatype, int source, int tag,MPI_Commn comm., MPI_Status *status) 从指
27、定的进程source接收消息,其它参数意义与发送操作类似;应该注意的是,接收到消息的长度必须小于或等于接收缓冲区的长度,这是因为如果接收到的数据过大,而MPI没有截断机制,接收缓冲区会发生溢出错误。,82,/* first.c */,#include “mpi.h”/*MPI的头函数, int main(int argc, char * argv ) int rank, size, tag=333; int buf20 MPI_Status status MPI_Init( ,83,聚合通信 (Collective Communication ),从一个进程到本组内的所有 进程的播送 broa
28、dcast 从本组所有进程收集数据到 一个进程gather 从一个进程分散数据到 本组内的所有进程sactter,84,85,2020年11月,MPI并行程序设计,85/217,数据聚集 Reduce Allreduce Reduce-scatter Scan,MPI 预定义全局数据运算符: MPI_MAX / MPI_MIN; MPI_SUM 求和 MPI_PROD 求积MPI_LAND 逻辑与 MPI_LOR 逻辑或 MPI_MAXLOC/MPI_MINLOC 最大/小值求下相应位置 ,86,87,88,int p, myrank; float buf; MPI_Comm comm; MP
29、I_Init(,Broadcast - 数据广播,int MPI_Bcast ( void *buffer,/*发送/接收buf*/ int count,/*元素个数*/ MPI_Datatype datatype, int root,/*指定根进程*/ MPI_Comm comm) 根进程既是发送缓冲区也是接收缓冲区,89,Gather - 数据收集,int p, myrank; float data10;/*分布变量*/ float* buf; MPI_Comm comm; MPI_Init(,data . MPI_Gather(); .,data . MPI_Gather(); .,da
30、ta . MPI_Gather(); .,Process 0 myrank = 0,Process 1 myrank = 1,Process p-1 myrank = p-1,根进程接收其他进程来的消息(包括根进程),按每在进程在通信组中的编号依次联接在一下,存放在根进程的接收缓冲区中. int MPI_Gather ( void *sendbuf, int sendcnt, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm ),buf,90,S
31、catter - 数据分散,int p, myrank; float data10; float* buf; MPI_Comm comm; MPI_Init(,data . MPI_Scatter(); .,data . MPI_ Scatter(); .,data . MPI_ Scatter(); .,Process 0 myrank = 0,Process 1 myrank = 1,Process p-1 myrank = p-1,根进程中存储了p个消息,第i个消息将传给第i个进程. int MPI_Scatter ( void *sendbuf, int sendcnt, MPI_Da
32、tatype sendtype, void *recvbuf, int recvcnt, MPI_Datatype recvtype, int root, MPI_Comm comm ),buf,91,Reduce - 全局数据运算,int p, myrank; float data = 0.0; float buf; MPI_Comm comm; MPI_Init(,data . MPI_Scatter(); .,data . MPI_ Scatter(); .,data . MPI_ Scatter(); .,Process 0 myrank = 0,Process 1 myrank =
33、1,Process p-1 myrank = p-1,对组中所有进程的发送缓冲区中的数据用OP参数指定的操作进行运算,并将结果送回到根进程的接收缓冲区中. int MPI_Reduce ( void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, int root, MPI_Comm comm ),buf,+,92,MPI集合通信函数,All:表示结果到所有进程. V:Variety,被操作的数据对象和操作更为灵活.,%,93,避免死锁deadlock,发送和接收是成对出现的,忽略这个原则 很可能会产生
34、死锁,总会死锁的通信调用次序,94,安全的通信调用次序,95,实例分析:求PI,96,串行代码,h=1.0/(double)n; sum=0.0; for (i=1; i=n; i+) x=h*(double)i 0.5); sum += f(x); pi=h*sum;,double f(double a) return (4.0/(1.0+a*a); ,97,并行代码,h=1.0/(double)n; sum=0.0; for (i=myid+1; i=n; i+=numprocs) x=h*(double)i 0.5); sum += f(x); mypi=h*sum; MPI_Reduc
35、e(,double f(double a) return (4.0/(1.0+a*a); ,98,cpi.c,#include mpi.h #include #include double f( double ); double f( double a ) return (4.0 / (1.0 + a*a); ,99,cpi.c,int main( int argc, char *argv) int done = 0, n, myid, numprocs, i; double PI25DT = 3.141592653589793238462643; double mypi, pi, h, su
36、m, x; double startwtime = 0.0, endwtime; int namelen; char processor_nameMPI_MAX_PROCESSOR_NAME; MPI_Init(,100,cpi.c,n = 100; while (!done) if (myid = 0) startwtime = MPI_Wtime(); MPI_Bcast(,101,cpi.c,if (n = 0) done = 1; else h = 1.0 / (double) n; sum = 0.0; for (i = myid + 1; i = n; i += numprocs)
37、 x = h * (double)i - 0.5); sum += f(x); mypi = h * sum;,102,2020年11月,MPI并行程序设计,cpi.c,MPI_Reduce( ,103,CUDA架构发展,104,CUDA逻辑结构及内存结构,在CUDA的程序架构中,程序执行区域分为两个部分:Host 与Device。 Host 指在CPU上执行的部分 Device指在GPU 上执行的部分,这部分又称为“kernel” 通常,Host 程序会将需要并行计算的数据复制到 GPU 的显存,再由 GPU 执行 Device程序,完成后再由Host 程序将结果从GPU 显存中取回,105
38、,示例,cuda.cu,#include /* 运行在GPU端的程序 */_global_ void vectorADD(int* a, int* b, int* c) int index = threadIdx.x;/获得当前线程的序号 if(index blockDim.x) c = a + b;int main () /* 定义10个GPU运算线程 */ int N = 10; /* 本地开辟三个数组存放我们要计算的内容 */ int* h_a = (int*) malloc (N * sizeof(int); /*h_b ,int* h_c ; /* 初始化数组A, B和C */ fo
39、r(int i=0; iN; i+) h_a = i; h_b = i; h_c = 0; ,106,示例,cuda.cu,int size = N * sizeof(int); /* 计算10个int型需要的空间 */ /* 在GPU上分配同样大小的三个数组 */ int* d_a; int* d_b; int* d_c; cudaMalloc(void*) /* 验证计算结果 */ ,107,数据并行与任务并行,数据并行是所有线程中执行的内核(kernel)是相同的,只是处理的数据会根据内核代码分支等原因而不同。 任务并行则在每个线程中执行不同的代码,108,OpenCL,开放计算语言 O
40、pen Computing Language 苹果发起,Khronos开发 2008年6月苹果公司提出 AMD, Intel, ARM, NVIDIA, Qualcomm, Nokia, IBM, Samsung, TI等 Microsoft是例外 适合CPU、GPU、CELL、DSP、ARM、FPGA、Altera,109,OpenCL,由一个并行计算API和一种针对此类计算的编程语言组成 C99编程语言并行扩展子集; 适用于各种类型异构处理器的坐标数据和基于任务并行计算API; 基于IEEE 754标准的数字条件; 与OpenGL、OpenGL ES和其他图形类API高效互通 提供了基于任
41、务分割和数据分割的并行计算机制 Khronos Group /opencl/,110,OpenCL四种模型,OpenCL allows parallel computing on heterogeneous devices CPUs, GPUs, Cell, DSPs, etc) Provides portable accelerated code 平台模型(Platform Model) 执行模型(Execution Model) 内存模型(Memory Model) 编程模型(Programming Model),111,Platform Mode
42、l,Each OpenCL implementation (i.e. an OpenCL library from AMD, NVIDIA, etc.) defines platforms which enable the host system to interact with OpenCL-capable devices Currently each vendor supplies only a single platform per implementation OpenCL uses an “Installable Client Driver” model The goal is to
43、 allow platforms from different vendors to co-exist Current systems device driver model will not allow different vendors GPUs to run at the same time,112,Platform Model,The model consists of a host connected to one or more OpenCL devices A device is divided into one or more compute units Compute uni
44、ts are divided into one or more processing elements Each processing element maintains its own program counter,113,Host/Devices,The host is whatever the OpenCL library runs on x86 CPUs for both NVIDIA and AMD Devices are processors that the library can talk to CPUs, GPUs, and generic accelerators For
45、 AMD All CPUs are combined into a single device (each core is a compute unit and processing element) Each GPU is a separate device,113,114,执行模型,OpenCL的执行模型可以分为两部分,一部分是在 host上执行的主程序(host program),另一部分是在 OpenCL设备上执行的内核程序(kernels),OpenCL通过主程序来定义上下文并管理内核程序在OpenCL设备的执行。 OpenCL执行模型的核心工作就是管理 kernel在OpenCL设
46、备上的运行。在 Host创建一个 kernel程序之前必须先为该 kernel创建一个标识了索引的工作空间,kernel会在工作空间每个节点 (workitem)上执行,115,Thread Structure,Work-items can uniquely identify themselves based on: A global id (unique within the index space) A work-group ID and a local ID within the work-group,116,Thread Structure,API calls allow thread
47、s to identify themselves and their data Threads can determine their global ID in each dimension get_global_id(dim) get_global_size(dim) Or they can determine their work-group ID and ID within the workgroup get_group_id(dim) get_num_groups(dim) get_local_id(dim) get_local_size(dim) get_global_id(0) =
48、 column, get_global_id(1) = row get_num_groups(0) * get_local_size(0) = get_global_size(0),117,Memory Model,118,使用OpenCL编程的6个步骤,查找支持OpenCL的硬件设备(Device),并创建上下文(Context) 创建命令队列(Command Queue)及包含了内核的程序(Program);如果该程序是源代码,则还需进行在线编译。 创建程序执行过程中需要的内存对象(Buffer)及图像对象(Image Object),并初始化 创建内核对象(可理解为Kernel中的函数)
49、并设置其所需参数 设置内核的索引空间(NDRange)并执行内核。其中NDRange通过全局尺寸(GlobalSize)和工作包尺寸(WorkGroup)来进行管理。 将运行的结果拷贝回主机(Host)内存。,119,主机处理器上运行的代码,打开OpenCL上下文, 获得并选择执行设备, 创建命令队列,以接受并执行内存请求, 分配OpenCL内存对象以掌握用于计算内核的输入和输出, 在线编译及构建计算内核代码, 建立参数和执行域, 开始执行计算内核 收集结果。,120,cl_uint numPlatforms ; cl_platform_id platform = NULL; status =
50、 clGetPlatformIDs (0 , NULL, ,使用示例,121,clGetPlatformInfo,char pbuff100; status = clGetPlatformInfo (platforms i, CL_PLATFORM_VENDOR ,sizeof (pbuff),pbuff, NULL); platform = platforms i ; If(!Strcmp(pbuff,”Advanced Micro Devices,Inc.”))break;,122,Selecting Devices,We can specify which types of device
51、s we are interested in (e.g. all devices, CPUs only, GPUs only) This call is performed twice as with clGetPlatformIDs The first call is to determine the number of devices, the second retrieves the device objects,Once a platform is selected, we can then query for the devices that it knows how to inte
52、ract with,122,123,clGetDeviceInfo,clGetDeviceInfo (cl_device_id device, cl_device_info param_name, size_t param_value_size, void *param_value, size_t *param_value_size_ret) 用户可以通过 clGetDeviceInfo获得每个设备的具体信息,例如设备类型,生产商,设备是否支持某些拓展功能等等,124,Contexts,A context refers to the environment for managing OpenC
53、L objects and resources To manage OpenCL programs, the following are associated with a context Devices: the things doing the execution Program objects: the program source that implements the kernels Kernels: functions that run on OpenCL devices Memory objects: data that are operated on by the device
54、 Command queues: mechanisms for interaction with the devices Memory commands (data transfers) Kernel execution Synchronization,125,Contexts,This function creates a context given a list of devices The properties argument specifies which platform to use (if NULL, the default chosen by the vendor will
55、be used) The function also provides a callback mechanism for reporting errors to the user,126,cl_platform_id platform_id;cl_device_id device_id; cl_uint num_of_devices=0; / retreive a list of platforms avaible clGetPlatformIDs(1, ,127,Command Queues,A command queue is the mechanism for the host to r
56、equest that an action be performed by the device Perform a memory transfer, begin executing, etc. A separate command queue is required for each device Commands within the queue can be synchronous or asynchronous Commands can execute in-order or out-of-order,128,Command Queues,A command queue establi
57、shes a relationship between a context and a device The command queue properties specify: If out-of-order execution of commands is allowed If profiling is enabled Profiling is done using events (discussed in a later lecture) and will create some overhead,129,Memory Objects,Memory objects are OpenCL d
58、ata that can be moved on and off devices Objects are classified as either buffers or images Buffers Contiguous chunks of memory stored sequentially and can be accessed directly (arrays, pointers, structs) Read/write capable Images Opaque objects (2D or 3D) Can only be accessed via read_image() and write_image() Can either be read or written in a kernel, but not both,130,Creating buffers,This function creates a buffer (cl_mem object) for the given context Images are more complex and will be covered in a later lecture The flags specify: the combination of reading and writing allowed
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026浙江温州桐君堂药材有限公司招聘营业员1人备考题库(原创题)附答案详解
- 2026广东广州市天河区东风实验小学招聘小学高年段语文教师备考题库附答案详解(能力提升)
- 2026年内蒙古自治区鄂尔多斯市高职单招综合素质考试题库附答案详细解析
- 2026年广西壮族自治区贵港市高职单招职业适应性测试考试题库附答案详细解析
- 2026年辽宁现代服务职业技术学院单招职业适应性测试题库附答案详细解析
- 2026年上半年眉山市彭山区公开考试招聘中小学教师(32人)考试参考试题及答案解析
- 2026年石家庄信息工程职业学院单招职业适应性测试题库含答案详细解析
- 2026年广西壮族自治区柳州市高职单招职业适应性测试考试题库有答案详细解析
- 2026年江西陶瓷工艺美术职业技术学院单招职业适应性测试题库有答案详细解析
- 2026年安徽城市管理职业学院单招职业技能考试题库附答案详细解析
- 风电施工安全培训课件
- 学生社交能力与同伴关系的培养
- 脱硫石膏处置协议书
- 景观照明设施运行维护经费估算
- 航天禁(限)用工艺目录(2021版)-发文稿(公开)
- 动物的呼吸和氧气运输
- 醛-亚胺-壳聚糖水凝胶的构筑及性能研究进展
- 无人机行业信息安全培训
- 管理会计学 第10版 课件 第4章 经营预测
- 2023年华南师范大学教师招聘考试历年真题库
- 2023年新改版教科版五年级下册科学全册练习题(一课一练)
评论
0/150
提交评论