AMD OpenCL 大学教程(2): OpenCL概述

1、OpenCL架构 OpenCL可以实现混合设备的并行计算,这些设备包括CPU,GPU,以及其它处理器,比如Cell处理器,DSP等。使用OpenCL编程,可以实现可移植的并行加速代码。[ 但由于各个OpenCL device不同的硬件性能,可能对于程序的优化还要考虑具体的硬件特性 ]

1、opencl架构

OpenCL可以实现混合设备的并行计算,这些设备包括CPU,GPU,以及其它处理器,比如Cell处理器,DSP等。使用OpenCL编程,可以实现可移植的并行加速代码。[但由于各个OpenCL device不同的硬件性能,可能对于程序的优化还要考虑具体的硬件特性]。

通常OpenCL架构包括四个部分:

平台模型(Platform Model) 执行模型(Execution Model) 内存模型(Memory Model) 编程模型(Programming Model)

2、OpenCL平台模型

不同厂商的OpenCL实施定义了不同的OpenCL平台,通过OpenCL平台,主机能够和OpenCL设备之间进行交互操作。现在主要的OpenCL平台有AMD、Nvida,Intel等。OpenCL使用了一种Installable Client Driver模型,这样不同厂商的平台就能够在系统中共存。在我的计算机上就安装有AMD和Intel两个OpenCL Platform[现在的OpenCL driver模型不允许不同厂商的GPU同时运行]。

AMD OpenCL 大学教程(2): OpenCL概述

OpenCL平台通常包括一个主机(Host)和多个OpenCL设备(device),每个OpenCL设备包括一个或多个CU(compute units),每个CU包括又一个或多个PE(process element)。 每个PE都有自己的程序计数器(PC)。主机就是OpenCL运行库宿主设备,在AMD和Nvida的OpenCL平台中,主机一般都指x86 CPU。

对AMD平台来说,所有的CPU是一个设备,CPU的每一个core就是一个CU,而每个GPU都是独立的设备。

AMD OpenCL 大学教程(2): OpenCL概述

3、OpenCL编程的一般步骤

下面我们通过一个实例来了解OpenCL编程的步骤,假设我们用的是AMD OpenCL平台(因为本人的GPU是HD5730),安装了AMD Stream SDK 2.6,并在VS2008中设置好了include,lib目录等。

首先我们建立一个控制台程序,最初的代码如下:

 1: #include "stdafx.h"
 2: #include 
 3: #include 
 4: #include 
 5: 
 6: #pragma comment (lib,"OpenCL.lib")
 7: 
 8: int main(int argc, char* argv[])
 9: {
 10: return 0;
 11: }

第一步,我们要选择一个OpenCL平台,所用的函数就是

AMD OpenCL 大学教程(2): OpenCL概述

通常,这个函数要调用2次,第一次得到系统中可使用的平台数目,然后为(Platform)平台对象分配空间,第二次调用就是查询所有的平台,选择自己需要的OpenCL平台。代码比较长,具体可以看下AMD Stream SDK 2.6中的TemplateC例子,里面描述如何构建一个robust的最小OpenCL程序。为了简化代码,使程序看起来不那么繁琐,我直接调用该函数,选取系统中的第一个OpenCL平台,我的系统中安装AMD和Intel两家的平台,第一个平台是AMD的。另外,我也没有增加错误检测之类的代码,但是增加了一个status的变量,通常如果函数执行正确,返回的值是0。

 1: #include "stdafx.h"
 2: #include 
 3: #include 
 4: #include 
 5: 
 6: #pragma comment (lib,"OpenCL.lib")
 7: 
 8: int main(int argc, char* argv[])
 9: {
 10: cl_uint status;
 11: cl_platform_id platform;
 12: 
 13: status = clGetPlatformIDs( 1, &platform, NULL );
 14: 
 15: return 0;
 16: }

第二步是得到OpenCL设备,

AMD OpenCL 大学教程(2): OpenCL概述

这个函数通常也是调用2次,第一次查询设备数量,第二次检索得到我们想要的设备。为了简化代码,我们直接指定GPU设备。

 1: #include "stdafx.h"
 2: #include 
 3: #include 
 4: #include 
 5: 
 6: #pragma comment (lib,"OpenCL.lib")
 7: 
 8: int main(int argc, char* argv[])
 9: {
 10: cl_uint status;
 11: cl_platform_id platform;
 12: 
 13: status = clGetPlatformIDs( 1, &platform, NULL );
 14: 
 15: cl_device_id device;
 16: 
 17: clGetDeviceIDs( platform, CL_DEVICE_TYPE_GPU,
 18: 1,
 19: &device,
 20: NULL);
 21: 
 22: return 0;
 23: }

下面我们来看下OpenCL中Context的概念:

通常,Context是指管理OpenCL对象和资源的上下文环境。为了管理OpenCL程序,下面的一些对象都要和Context关联起来:

Noiz Agent Noiz Agent

AI声音创作Agent平台

Noiz Agent 323 查看详情 Noiz Agent

—设备(Devices):执行Kernel程序对象。

—程序对象(Program objects): kernel程序源代码

—Kernels:运行在OpenCL设备上的函数。

—内存对象(Memory objects): device处理的数据对象。

—命令队列(Command queues): 设备之间的交互机制。

注意:创建一个Context的时候,我们必须把一个或多个设备和它关联起来。对于其它的OpenCL资源,它们创建时候,也要和Context关联起来,一般创建这些资源的OpenCL函数的输入参数中,都会有context。

AMD OpenCL 大学教程(2): OpenCL概述

AMD OpenCL 大学教程(2): OpenCL概述

这个函数中指定了和context关联的一个或多个设备对象,properties参数指定了使用的平台,如果为NULL,厂商选择的缺省值被使用,这个函数也提供了一个回调机制给用户提供错误报告。

现在的代码如下:

 1: #include "stdafx.h"
 2: #include 
 3: #include 
 4: #include 
 5: 
 6: #pragma comment (lib,"OpenCL.lib")
 7: 
 8: int main(int argc, char* argv[])
 9: {
 10: cl_uint status;
 11: cl_platform_id platform;
 12: 
 13: status = clGetPlatformIDs( 1, &platform, NULL );
 14: 
 15: cl_device_id device;
 16: 
 17: clGetDeviceIDs( platform, CL_DEVICE_TYPE_GPU,
 18: 1,
 19: &device,
 20: NULL);
 21: cl_context context = clCreateContext( NULL,
 22: 1,
 23: &device,
 24:                
 25: 
 26: return 0;
 27: }

接下来,我们要看下命令队列。在OpenCL中,命令队列就是主机的请求,在设备上执行的一种机制。

在Kernel执行前,我们一般要进行一些内存拷贝的工作,比如把主机内存中的数据传输到设备内存中。

另外要注意的几点就是:对于不同的设备,它们都有自己的独立的命令队列;命令队列中的命令(kernel函数)可能是同步的,也可能是异步的,它们的执行顺序可以是有序的,也可以是乱序的。

AMD OpenCL 大学教程(2): OpenCL概述

命令队列在device和context之间建立了一个连接。

命令队列properties指定以下内容:

是否乱序执行(在AMD GPU中,好像现在还不支持乱序执行) 是否启动profiling。Profiling通过事件机制来得到kernel执行时间等有用的信息,但它本身也会有一些开销。

如下图所示,命令队列把设备和context联系起来,尽管它们之间不是物理连接。AMD OpenCL 大学教程(2): OpenCL概述

添加命令队列后的代码如下:

 1: #include "stdafx.h"
 2: #include 
 3: #include 
 4: #include 
 5: 
 6: #pragma comment (lib,"OpenCL.lib")
 7: 
 8: int main(int argc, char* argv[])
 9: {
 10: cl_uint status;
 11: cl_platform_id platform;
 12: 
 13: status = clGetPlatformIDs( 1, &platform, NULL );
 14: 
 15: cl_device_id device;
 16: 
 17: clGetDeviceIDs( platform, CL_DEVICE_TYPE_GPU,
 18: 1,
 19: &device,
 20: NULL);
 21: cl_context context = clCreateContext( NULL,
 22: 1,
 23: &device,
 24: NULL, NULL, NULL);
 25: 
 26: cl_command_queue queue = clCreateCommandQueue( context,
 27: device,
 28: CL_QUEUE_PROFILING_ENABLE, NULL );
 29: 
 30: return 0;
 31: }

 原文作者:迈克老狼

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/895357.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月28日 17:29:44
下一篇 2025年11月28日 17:30:40

相关推荐

  • AMD首款CPU 50年了逆向工程克隆Intel 8080:成本50美分卖700美元

    10月26日消息,相比于intel成立之初的传奇,amd的起家似乎有点不太高尚,但也是特定历史背景下的特殊经历,不可能再被复制。 整整50年前,AMD的第一款CPU处理器诞生了,它就是AM9080。 它的争议之处在于并非原生自主设计,而是通过对Intel 8080处理器进行逆向工程研究,克隆而来。 …

    2025年12月6日 行业动态
    000
  • RTX 5060 Ti 8GB版本没人买吗 曝英伟达正限制其供货 以防堆积在仓库中

    根据媒体Playground报道,由于RTX 5060 Ti 8GB型号市场需求减弱,NVIDIA已开始实施供应管控策略,减少对该型号显卡向合作伙伴及零售商的出货量,以避免库存积压风险。 Board Channels一位消息人士指出,随着RTX 5060 Ti 16GB版本正式进入市场,8GB版本的…

    2025年12月6日 行业动态
    000
  • qq浏览器占用CPU和内存过高怎么优化_qq浏览器性能占用降低方法

    首先启用或重置QQ浏览器硬件加速以减轻CPU负担,接着通过任务管理器结束高占用的后台进程,然后清理缓存并禁用冲突插件释放系统资源,最后更新浏览器和显卡驱动确保软硬件性能最优。 如果您在使用QQ浏览器观看视频或浏览网页时,发现电脑运行缓慢、风扇狂转,这很可能是由于QQ浏览器进程占用了过高的CPU和内存…

    2025年12月6日 电脑教程
    000
  • 构建支持TPM 2.0模块的Windows系统实现BitLocker自动加密的配置流程

    答案:Windows系统需启用TPM 2.0并配置组策略以实现BitLocker自动加密。1. 确认BIOS中TPM 2.0已启用,通过tpm.msc验证状态;2. 首次使用时运行manage-bde -tpm -initialize初始化TPM;3. 在gpedit.msc中配置操作系统驱动器策略…

    2025年12月6日 电脑教程
    000
  • RTX 5060 Ti 8GB卖不动了!限制供货、不许降价

    10月27日消息,当初RTX 4060 Ti 16GB发布时饱受争议,而到了RTX 5060 Ti这一代,市场风向却彻底逆转,16GB版本俨然成为主流首选。 据多个渠道消息确认,英伟达已针对RTX 5060 Ti系列执行明确的供货调控政策,对8GB与16GB两个版本实行差异化供应,形成“精准投放”的…

    2025年12月6日 行业动态
    000
  • 如何在安装mysql时选择数据存储路径

    安装 MySQL 时可自定义数据存储路径以优化磁盘空间与性能;2. Windows 用户可通过 MySQL Installer 在 Custom 模式下的 Advanced Options 中设置 Data Directory;3. Linux 与高级用户推荐通过编辑配置文件 my.cnf 或 my…

    2025年12月6日 数据库
    000
  • 游戏提示”找不到 DirectX 12 适配器或运行时” 分享6种解决方法

    在运行某些游戏时,玩家可能会遇到提示“找不到 directx 12 适配器或运行时”的报错。这条提示说明你的系统无法满足运行该游戏所需的 directx 12 图形接口要求。以下将列出多种有效的解决方法,帮助你排查并解决这个问题。 一、确认显卡是否支持 DirectX 12 DirectX 12 依…

    2025年12月5日 电脑教程
    000
  • win10怎么查看windows defender隔离区_查找并恢复Defender隔离项目的方法

    首先通过Windows安全中心查看隔离文件,进入病毒和威胁防护的扫描历史记录,筛选已隔离项目;也可通过文件资源管理器访问C:ProgramDataMicrosoftWindows DefenderQuarantine路径查看,需管理员权限;确认文件安全后,在安全中心选择恢复或删除操作,恢复后可将其添…

    2025年12月5日
    000
  • win10外接显示器没反应怎么解决_外接显示器连接无响应的故障排除

    首先检查连接线和电源,确认显示器输入源正确;接着在Windows 10中使用“显示设置”检测屏幕并调整投影模式;更新或重装显卡驱动;设置合适的分辨率与刷新率;最后通过替换法测试笔记本、显示器及线缆以定位故障。 如果您已将Windows 10笔记本连接至外接显示器,但屏幕无任何显示或系统未识别设备,则…

    2025年12月5日
    000
  • 不懂电脑的人买台式电脑怎么买 新手选购指南

    现今台式电脑仍然是办公与游戏领域的核心设备。那么,台式电脑该如何选购呢?对于不了解硬件的新手而言,面对繁杂的参数和品牌,往往不知所措。别担心!今天驱动哥将手把手教你从零开始,用最通俗易懂的方式挑选一台真正适合自己的台式机,轻松避坑! 一、先搞清楚你的用途 第一步,必须明确你买电脑主要是用来做什么。常…

    2025年12月5日 电脑教程
    100
  • 笔记本电脑配置怎么看 一文读懂

    在入手一台新的笔记本电脑后,许多用户都希望快速掌握设备的硬件配置,比如处理器型号、内存大小、硬盘种类以及显卡信息等。了解这些参数不仅有助于评估设备性能是否满足日常使用或专业需求,也为后续的硬件升级和故障排查提供了依据。本文将围绕 windows 操作系统,介绍几种实用且便捷的方法来查看笔记本电脑的详…

    2025年12月5日 电脑教程
    100
  • 怎样把c盘的东西移到d盘或e盘 分享四种方法

    随着电脑使用时间的增加,不少用户会遇到c盘(系统盘)空间逐渐不足的问题,进而引发系统运行缓慢、程序无法安装等困扰。由于操作系统、临时数据以及多数软件默认安装路径均位于c盘,因此合理迁移部分文件至d盘或e盘,是缓解c盘压力的有效方式。下面将详细介绍几种安全且高效的文件迁移方法。 方法1:手动迁移个人文…

    2025年12月5日 电脑教程
    000
  • 电脑显卡怎么看 新手也能掌握的几种方法

    显卡作为电脑中的关键组件之一,其性能直接决定了游戏运行流畅度、图像处理速度、视频剪辑效率以及ai计算能力。然而,不少用户在面对如何准确获取自己电脑显卡型号与性能参数时仍感到困惑。本文将为你全面解析几种实用、便捷且高效的查看方法,助你快速掌握显卡信息的获取技巧。 方法一:通过任务管理器查看 1. 右击…

    2025年12月4日 电脑教程
    000
  • 电脑显示图标变扁了怎么办 7种方法快速恢复正常

    很多用户在使用电脑过程中会遇到桌面图标突然变扁的问题,视觉上显得非常不协调。这种情况通常与屏幕分辨率、显示缩放比例或显卡设置有关。本文将为你提供7种有效的解决方法,帮助你快速恢复图标的正常显示效果。 一、检查并调整屏幕分辨率 错误的分辨率设置可能导致图标被拉伸或压缩,从而出现变形现象。 1. 在桌面…

    2025年12月4日 电脑教程
    000
  • directx12怎么启用 开启方法介绍

    directx 12(简称dx12)如今已成为众多3a级大作和现代图形应用的标准配置。相较于directx 11,dx12在多线程渲染、图形性能优化以及资源调度方面具备显著优势,能够更充分地释放显卡硬件的潜能。因此,不少玩家关心:如何启用directx 12?需要满足哪些条件?本文将为你全面解析dx…

    2025年12月4日 电脑教程
    100
  • 曝 AMD RX9060 XT 显卡将亮相台北电脑展 预计 6 月初开售

    近期,根据相关爆料,amd radeon rx 9060 xt 显卡将在 5 月 20 日至 23 日举行的台北国际电脑展 (computex 2025) 上首次亮相。紧接着,这款显卡将于 6 月初正式推出市场。 根据之前的泄露信息,AMD Radeon RX 9060 XT 采用全新的 &#822…

    2025年12月3日
    000
  • 怎么看独立显卡开了没 4种简单方法快速判断

    在现代计算机系统中,显卡(gpu)是决定图形处理能力的核心组件之一。然而,许多用户常常不清楚自己的设备是否真正启用了独立显卡,尤其是在运行游戏或专业软件时,担心性能未能充分发挥。本文将围绕“怎么看独立显卡开了没”这一常见问题,提供多种实用的检测方法,帮助你准确判断独立显卡是否正在被使用。 一、集成显…

    2025年12月3日 电脑教程
    000
  • RayLink如何实现远程游戏串流_RayLink低延迟游戏体验的优化方案

    首先调整RayLink串流分辨率为720p、帧率至30fps以降低数据量;接着启用NVENC或AMD AMF硬件编码减轻CPU负担;通过千兆有线连接并禁用Wi-Fi确保网络稳定;关闭后台高占用程序及自启应用释放系统资源;最后在路由器开启QoS,为设备分配静态IP并将RayLink端口设为最高优先级,…

    2025年12月3日 软件教程
    000
  • 如何卸载office2010_Office2010版本卸载方法

    首先使用微软官方工具卸载Office 2010,若失败则尝试控制面板标准卸载;仍无效时可借助Revo Uninstaller等第三方工具深度清理,最后手动删除残留文件与注册表项以确保彻底清除。 如果您尝试通过常规方式卸载 Office 2010,但遇到“安装程序包的语言不受系统支持”或卸载过程无响应…

    2025年12月3日 软件教程
    000
  • win10如何卸载office_Win10系统卸载Office方法

    1、通过Windows设置卸载Microsoft Office;2、使用控制面板程序和功能移除传统安装版本;3、运行微软官方Support and Recovery Assistant工具深度清理;4、手动删除残留文件与注册表项确保彻底清除。 如果您在使用Win10系统时需要移除已安装的Office…

    2025年12月3日 软件教程
    000

发表回复

登录后才能评论
关注微信