opencl简介

2010年十月,tianhe-1A速度2566TFLOPS,速度世界第一,采用了GPU。
2009年的世界前三没有采用gpu。
Nvidia的Fermi,AMD的Evergreen,IBM的Cell Broadband Engine这些芯片的体系结构的目的基本相同,但是很难找出他们的共通之处。他们都有自己的指令集,在opencl出现之前,如果需要在三种不同的芯片上编程需要掌握三种不同的编程语言。opencl是为了隐去不同芯片对编程的影响,让程序员更加关注编程本身,由苹果公司向芯片公司建议提出。
opencl标准只是在c和c++的基础上定义了一些的数据类型、数据结构和函数。
各芯片厂商不仅提供兼容opencl的硬件还提供开发工具编译opencl代码。不需要针对特定厂商的芯片编写代码。一次编写opencl例程可以保证在其兼容的新派你上编译,运行。可以靠同样的代码在不同的平台的硬件上完成相同的任务,只需要重新编译程序即可。
1.2.3并行编程
在opencl中,运算任务被称为内核。内核时针对一个或者多个兼容opencl的设备而特别编写的函数,并通过主机应用程序发送到相应的一个或者多个设备上。
主机应用程序通过名为上下文的容器来管理所连接的设备。
主机必须从一个名为程序(program)的内核容器中选择函数,才能创建出内核程序;然后向内核函数中调入相应的参数数据,并发送到名为指令序列的数据结构中。
指令序列时主机实现对设备控制的一种机制,当内核入列时,设别会执行相应的函数。
opencl提供的任务并行机制,其他开发工具提供的时数据并行机制。

为了编译运行opencl,必须要有一套兼容opencl的开发工具。框架包含三个部分:
平台层:通过它来访问设备,设定上下文
运行时:让主机应用程序将内核和指令队列发送到上下文的设备上
编译器:构建含由可执行内核的程序

你可能感兴趣的:(opencl简介)