OpenCL快速入门教程

这篇文章不会从GPU结构的技术概念和性能指标入手。
我们将会从OpenCL的基础API开始,使用一个小的kernel作为例子来讲
【菜科解读】
这是第一篇真正的OpenCL教程。
这篇文章不会从GPU结构的技术概念和性能指标入手。
我们将会从OpenCL的基础API开始,使用一个小的kernel作为例子来讲解基本的计算管理。
首先我们需要明白的是,OpenCL程序是分成两部分的:一部分是在设备上执行的(对于我们,是GPU),另一部分是在主机上运行的(对于我们,是CPU)。
在设备上执行的程序或许是你比较关注的。
它是OpenCL产生神奇力量的地方。
为了能在设备上执行代码,程序员需要写一个特殊的函数(kernel函数)。
这个函数需要使用OpenCL语言编写。
OpenCL语言采用了c语言的一部分加上一些约束、关键字和数据类型。
在主机上运行的程序提供了API,所以i可以管理你在设备上运行的程序。
主机程序可以用C或者C++编写,它控制OpenCL的环境(上下文,指令队列…)。
设备(Device)
我们来简单的说一下设备。
设备,像上文介绍的一样,OpenCL编程最给力的地方。
我们必须了解一些基本概念:
Kernel:你可以把它想像成一个可以在设备上执行的函数。
当然也会有其他可以在设备上执行的函数,但是他们之间是有一些区别的。
Kernel是设备程序执行的入口点。
换言之,Kernel是唯一可以从主机上调用执行的函数。
现在的问题是:我们如何来编写一个Kernel?在Kernel中如何表达并行性?它的执行模型是怎样的?解决这些问题,我们需要引入下面的概念:
SIMT:单指令多线程(SINGLE INSTRUCTION MULTI THREAD)的简写。
就像这名字一样,相同的代码在不同线程中并行执行,每个线程使用不同的数据来执行同一段代码。
Work-item(工作项):Work-item与CUDA Threads是一样的,是最小的执行单元。
每次一个Kernel开始执行,很多(程序员定义数量)的Work-item就开始运行,每个都执行同样的代码。
每个work-item有一个ID,这个ID在kernel中是可以访问的,每个运行在work-item上的kernel通过这个ID来找出work-item需要处理的数据。
Work-group(工作组):work-group的存在是为了允许work-item之间的通信和协作。
它反映出work-item的组织形式(work-group是以N维网格形式组织的,N=1,2或3)。
Work-group等价于CUDA thread blocks。
像work-items一样,work-groups也有一个kernel可以读取的唯一的ID。
ND-Range:ND-Range是下一个组织级别,定义了work-group的组织形式(ND-Rang以N维网格形式组织的,N=1,2或3);
这是ND-Range组织形式的例子
Kernel
现在该写我们的第一个kernel了。
我们写一个小的kernel将两个向量相加。
这个kernel需要四个参数:两个要相加的向量,一个存储结果的向量,和向量个数。
如果你写一个程序在cpu上解决这个问题,将会是下面这个样子:
void vector_add_cpu (const float* src_a, const float* src_b, float* res, const int num){ for (int i = 0; i Plantform(平台):主机加上OpenCL框架管理下的若干设备构成了这个平台,通过这个平台,应用程序可以与设备共享资源并在设备上执行kernel。
平台通过cl_plantform来展现,可以使用下面的代码来初始化平台:
// Returns the error codecl_int oclGetPlatformID (cl_platform_id *platforms) // Pointer to the platform object
Device(设备):通过cl_device来表现,使用下面的代码:
// Returns the error codecl_int clGetDeviceIDs (cl_platform_id platform,cl_device_type device_type, // Bitfield identifying the type. For the GPU we use CL_DEVICE_TYPE_GPUcl_uint num_entries, // Number of devices, typically 1cl_device_id *devices, // Pointer to the device objectcl_uint *num_devices) // Puts here the number of devices matching the device_type
Context(上下文):定义了整个OpenCL化境,包括OpenCL kernel、设备、内存管理、命令队列等。
上下文使用cl_context来表现。
使用以下代码初始化:
// Returs the contextcl_context clCreateContext (const cl_context_properties *properties, // Bitwise with the properties (see specification)cl_uint num_devices, // Number of devicesconst cl_device_id *devices, // Pointer to the devices objectvoid (*pfn_notify)(const char *errinfo, const void *private_info, size_t cb, void *user_data), // (don't worry about this)void *user_data, // (don't worry about this)cl_int *errcode_ret) // error code result
Command-Queue(指令队列):就像它的名字一样,他是一个存储需要在设备上执行的OpenCL指令的队列。
“指令队列建立在一个上下文中的指定设备上。
多个指令队列允许应用程序在不需要同步的情况下执行多条无关联的指令。
”
cl_command_queue clCreateCommandQueue (cl_context context,cl_device_id device,cl_command_queue_properties properties, // Bitwise with the propertiescl_int *errcode_ret) // error code result
下面的例子展示了这些元素的使用方法:
cl_int error = 0; // Used to handle error codescl_platform_id platform;cl_context context;cl_command_queue queue;cl_device_id device;// Platformerror = oclGetPlatformID(&platform);if (error != CL_SUCCESS) { cout Kernel:你应该已经知道了,像在上文中描述的一样,kernel本质上是一个我们可以从主机上调用的,运行在设备上的函数。
你或许不知道kernel是在运行的时候编译的!更一般的讲,所有运行在设备上的代码,包括kernel和kernel调用的其他的函数,都是在运行的时候编译的。
这涉及到下一个概念,Program。
Program:OpenCL Program由kernel函数、其他函数和声明组成。
它通过cl_program表示。
当创建一个program时,你必须指定它是由哪些文件组成的,然后编译它。
你需要用到下面的函数来建立一个Program:
// Returns the OpenCL programcl_program clCreateProgramWithSource (cl_context context, cl_uint count, // number of files const char **strings, // array of strings, each one is a file const size_t *lengths, // array specifying the file lengths cl_int *errcode_ret) // error code to be returned
当我们创建了Program我们可以用下面的函数执行编译操作:
cl_int clBuildProgram (cl_program program, cl_uint num_devices, const cl_device_id *device_list, const char *options, // Compiler options, see the specifications for more details void (*pfn_notify)(cl_program, void *user_data), void *user_data)
查看编译log,必须使用下面的函数:
cl_int clGetProgramBuildInfo (cl_program program, cl_device_id device, cl_program_build_info param_name, // The parameter we want to know size_t param_value_size, void *param_value, // The answer size_t *param_value_size_ret)
最后,我们需要“提取”program的入口点。
使用cl_kernel:
cl_kernel clCreateKernel (cl_program program, // The program where the kernel isconst char *kernel_name, // The name of the kernel, i.e. the name of the kernel function as it's declared in the codecl_int *errcode_ret)
注意我们可以创建多个OpenCL program,每个program可以拥有多个kernel。
以下是这一章节的代码:
// Creates the program// Uses NVIDIA helper functions to get the code string and it's size (in bytes)size_t src_size = 0;const char* path = shrFindFilePath("vector_add_gpu.cl", NULL);const char* source = oclLoadProgSource(path, "", &src_size);cl_program program = clCreateProgramWithSource(context, 1, &source, &src_size, assert(error == CL_SUCCESS);// Builds the programerror = clBuildProgram(program, 1, &device, NULL, NULL, NULL);assert(error == CL_SUCCESS);// Shows the logchar* build_log;size_t log_size;// First call to know the proper sizeclGetProgramBuildInfo(program, device, CL_PROGRAM_BUILD_LOG, 0, NULL, &log_size);build_log = new char[log_size+1];// Second call to get the logclGetProgramBuildInfo(program, device, CL_PROGRAM_BUILD_LOG, log_size, build_log, NULL);build_log[log_size] = '\0';cout OpenCL,快速,入门教程,这是,第,一篇,真正,的,
深度ghostxp快速装机版最新推荐
软件支持 在线重装、U盘制作、自定义重装 等多种模式。
深度的系统技术非常成熟,深度出品的系统一直都是倍受追捧的。
尽管xp系统退役了也好,仍然阻挡不了用户们对深度ghostxp快速装机版热捧和追求,成人之美也是一种美德,这就告诉你深度技术xp装机版系统下载的方法。
资深的电脑行家就一定知道深度ghostxp快速装机版系统的价值,现在喜欢深度技术xp装机版系统的朋友们可多了,你想要下载安装深度技术xp快速装机版系统吗?让本人来告诉你免费的下载方法吧!深度ghostxp图解详情(1)深度ghostxp图解详情(2) 一、深度ghostxp快速装机版系统主要特点 1、安装维护方便快速 - 全自动无人值守安装,采用万能GHOST技术,安装系统过程只需5-8分钟,适合新旧各种机型。
- 集成常见硬件驱动,智能识别+预解压技术,绝大多数硬件可以快速自动安装相应的驱动。
- 支持IDE、SATA光驱启动恢复安装,支持WINDOWS下安装,支持PE下安装。
- 自带WinPE微型操作系统和常用分区工具、深度DOS工具,装机备份维护轻松无忧。
- 集成了SATA/RAID/SCSI驱动,支持P45、MCP78、780G、690G开启SATA AHCI/RAID。
2、运行稳定,兼容性好 - 使用XP SP3官方免激活版做为源安装盘,通过正版验证,集成了最新安全补丁。
- 自动安装AMD/Intel双核CPU驱动和优化程序,发挥新平台的最大性能。
- 支持95599农业银行网银,输入密码不会出现浏览器无响应的问题。
3、预先优化与更新 - 集成DX9最新版,MSJAVA虚拟机,VB/VC常用运行库,microsoft update控件和WGA认证。
- 已经破解并禁用SFC,TCP/IP连接数量1024,破解UXTHEME支持非官方主题。
- 系统仅做适当精简和优化,在追求速度的基础上充分保留原版性能及兼容性。
- 集成最常用的办公,娱乐,维护和美化工具,常用软件一站到位。
- 我的文档、收藏夹已移动到D盘,免去重装系统前的资料备份。
4、智能与自动技术 - 智能检测笔记本:如果是笔记本则自动关闭小键盘并打开无线及虚拟网络服务。
- 自动杀毒:安装过程自动删除各分区下的autorun病毒,删除灰鸽子变种及磁碟机病毒。
- 智能分辨率设置:安装过程可选择几种常见的分辨率,如不选择将只能识别最优分辨率,第一次进入桌面分辨率已设置好。
- 智能分区判断:电脑城装机如未划分D盘,QQ压缩包将被移动到桌面,可装好系统后自行解压。
- 自动清除启动项:显卡启动项,声卡启动项只运行一次,第二次重启即可清除。
二、深度ghostxp快速装机版安装说明 1、光盘安装: 用刻录软件,选择 映像刻录 方式来刻录ISO文件,刻录前请先校验一下文件的准确性,刻录速度推荐24X! 在BIOS中设置光驱启动,选择第一项即可自动安装到硬盘第一分区。
有隐藏分区的品牌机建议手动安装。
2、硬盘安装: 如已刻录光盘,在WINDOWS下双击光盘自动播放程序,选择 安装WINDOWS 即可。
如未刻录光盘,在WINDOWS下使用虚拟光驱加载ISO光盘镜像,双击光盘自动播放程序,选择 安装WINDOWS 。
提示:安装前请务必备份好原系统的重要数据。
建议提前转移个人资料并备份硬件驱动。
三、深度ghostxp快速装机版系统优化 1、默认Administrator账号无密码,建议设置密码。
2、使用 深度系统优化工具 对系统进行优化。
3、宽带ADSL拨号用户,为本地连接设置固定IP地址。
4、如不使用打印机,关闭后台打印服务可有效节省内存占用。
5、在 设备管理器 - IDE ATA/ATAPI 控制器 中,将主要和次要 IDE 通道高级设置里的设备类型里可以选择无的都设置成无,启动时将不检测未使用的IDE通道。
四、深度技术xp装机版常见问题 1、GHOST安装过程中断,出现以下提示 output error file to the following location: A:\ghosterr.txt 原因一般是读取或写入数据出错,可能是光盘质量问题或光驱读盘能力不佳,或写入硬盘出现错误。
2、Realteck HD Audio声卡的前置耳麦和耳机接口无法使用 这是由于最新的官方Realteck声卡驱动程序自身新特性导致的,而并非系统原因。
如果遇到这种情况,可以到 控制面板 中的 声音,语音和音频设备 找到 Realtek HD音频管理器-- 音频I/O--〉接头设置--〉选上 禁用前面板插孔检测 。
3、装完系统提示没有通过正版验证,右下角出现五角星提示 这种情况大部分是由于系统时间不对造成的,请将计算机时间校正准确以后重启计算机即可,千万不要使用一些所谓的破解工具,那样并不能解决问题。
4、安装过程中蓝屏或者系统不断重启应该怎么办? 遇到这样的情况,一般是由于windows在安装驱动的过程中识别错误造成的,可以重新GHOST恢复系统,在出现驱动选择画面的时候按[ESC]键,取消所有驱动的集成即可解决问题。
5、GHOST后整个硬盘变为了一个分区 一般是手动操作GHOST错误,将分区镜像恢复到整个硬盘导致。
请立即关闭计算机,不要再向硬盘内写入数据。
建议将硬盘接到其他电脑做为从盘,使用相关软件进行分区表恢复。
如数据重要,请到专业的数据恢复公司求助。
深度技术ghostxp下载内容详情讲解到此就讲解完毕了,也就是说介绍深度技术xp快速装机版系统下载的环节就结束了,一个操作系统好不好的话,首先是从系统的详情开始了解的,如果你觉得深度技术合乎你的心意的话,就赶紧下载吧,免费提供,不要钱的哦! 标签: 注意:本站所刊载的文章均为学习交流之用,请勿用于商业用途。
对于商业使用,请联系各自版权所有者,否则法律问题自行承担。
Win7系统升级指南:全面解析升级步骤与要点 Win7系统损坏修复教程:详细步骤助你快速解决问题 深度的系统技术非常成熟,深度出品的系统一直都是倍受追捧的。
尽管xp系统退役了也好,仍然阻挡不了用户们对深度ghostxp快速装机版热捧和追求,成人之美也是一种美德,这就告诉你深度技术xp装机版系统下载的方法。
资深的电脑行家就一定知道深度ghostxp快速装机版系统的价值,现在喜欢深度技术xp装机版系统的朋友们可多了,你想要下载安装深度技术xp快速装机版系统吗?让本人来告诉你免费的下载方法吧!深度ghostxp图解详情(1)深度ghostxp图解详情(2) 一、深度ghostxp快速装机版系统主要特点 1、安装维护方便快速 - 全自动无人值守安装,采用万能GHOST技术,安装系统过程只需5-8分钟,适合新旧各种机型。
- 集成常见硬件驱动,智能识别+预解压技术,绝大多数硬件可以快速自动安装相应的驱动。
- 支持IDE、SATA光驱启动恢复安装,支持WINDOWS下安装,支持PE下安装。
- 自带WinPE微型操作系统和常用分区工具、深度DOS工具,装机备份维护轻松无忧。
- 集成了SATA/RAID/SCSI驱动,支持P45、MCP78、780G、690G开启SATA AHCI/RAID。
2、运行稳定,兼容性好 - 使用XP SP3官方免激活版做为源安装盘,通过正版验证,集成了最新安全补丁。
- 自动安装AMD/Intel双核CPU驱动和优化程序,发挥新平台的最大性能。
- 支持95599农业银行网银,输入密码不会出现浏览器无响应的问题。
3、预先优化与更新 - 集成DX9最新版,MSJAVA虚拟机,VB/VC常用运行库,microsoft update控件和WGA认证。
- 已经破解并禁用SFC,TCP/IP连接数量1024,破解UXTHEME支持非官方主题。
- 系统仅做适当精简和优化,在追求速度的基础上充分保留原版性能及兼容性。
- 集成最常用的办公,娱乐,维护和美化工具,常用软件一站到位。
- 我的文档、收藏夹已移动到D盘,免去重装系统前的资料备份。
4、智能与自动技术 - 智能检测笔记本:如果是笔记本则自动关闭小键盘并打开无线及虚拟网络服务。
- 自动杀毒:安装过程自动删除各分区下的autorun病毒,删除灰鸽子变种及磁碟机病毒。
- 智能分辨率设置:安装过程可选择几种常见的分辨率,如不选择将只能识别最优分辨率,第一次进入桌面分辨率已设置好。
- 智能分区判断:电脑城装机如未划分D盘,QQ压缩包将被移动到桌面,可装好系统后自行解压。
- 自动清除启动项:显卡启动项,声卡启动项只运行一次,第二次重启即可清除。
二、深度ghostxp快速装机版安装说明 1、光盘安装: 用刻录软件,选择 映像刻录 方式来刻录ISO文件,刻录前请先校验一下文件的准确性,刻录速度推荐24X! 在BIOS中设置光驱启动,选择第一项即可自动安装到硬盘第一分区。
有隐藏分区的品牌机建议手动安装。
2、硬盘安装: 如已刻录光盘,在WINDOWS下双击光盘自动播放程序,选择 安装WINDOWS 即可。
如未刻录光盘,在WINDOWS下使用虚拟光驱加载ISO光盘镜像,双击光盘自动播放程序,选择 安装WINDOWS 。
提示:安装前请务必备份好原系统的重要数据。
建议提前转移个人资料并备份硬件驱动。
三、深度ghostxp快速装机版系统优化 1、默认Administrator账号无密码,建议设置密码。
2、使用 深度系统优化工具 对系统进行优化。
3、宽带ADSL拨号用户,为本地连接设置固定IP地址。
4、如不使用打印机,关闭后台打印服务可有效节省内存占用。
5、在 设备管理器 - IDE ATA/ATAPI 控制器 中,将主要和次要 IDE 通道高级设置里的设备类型里可以选择无的都设置成无,启动时将不检测未使用的IDE通道。
四、深度技术xp装机版常见问题 1、GHOST安装过程中断,出现以下提示 output error file to the following location: A:\ghosterr.txt 原因一般是读取或写入数据出错,可能是光盘质量问题或光驱读盘能力不佳,或写入硬盘出现错误。
2、Realteck HD Audio声卡的前置耳麦和耳机接口无法使用 这是由于最新的官方Realteck声卡驱动程序自身新特性导致的,而并非系统原因。
如果遇到这种情况,可以到 控制面板 中的 声音,语音和音频设备 找到 Realtek HD音频管理器-- 音频I/O--〉接头设置--〉选上 禁用前面板插孔检测 。
3、装完系统提示没有通过正版验证,右下角出现五角星提示 这种情况大部分是由于系统时间不对造成的,请将计算机时间校正准确以后重启计算机即可,千万不要使用一些所谓的破解工具,那样并不能解决问题。
4、安装过程中蓝屏或者系统不断重启应该怎么办? 遇到这样的情况,一般是由于windows在安装驱动的过程中识别错误造成的,可以重新GHOST恢复系统,在出现驱动选择画面的时候按[ESC]键,取消所有驱动的集成即可解决问题。
5、GHOST后整个硬盘变为了一个分区 一般是手动操作GHOST错误,将分区镜像恢复到整个硬盘导致。
请立即关闭计算机,不要再向硬盘内写入数据。
建议将硬盘接到其他电脑做为从盘,使用相关软件进行分区表恢复。
如数据重要,请到专业的数据恢复公司求助。
深度技术ghostxp下载内容详情讲解到此就讲解完毕了,也就是说介绍深度技术xp快速装机版系统下载的环节就结束了,一个操作系统好不好的话,首先是从系统的详情开始了解的,如果你觉得深度技术合乎你的心意的话,就赶紧下载吧,免费提供,不要钱的哦! 菜科网系统致力于解决 Windows 系统重装解决方案,提供高效、安全、免费的系统重装服务。
win10如何快速锁屏
软件支持 在线重装、U盘制作、自定义重装 等多种模式。
简介:想象一下,你正在忙碌地工作着,突然有事情要处理,又不想关机,这时候如果能快速锁屏就太方便了吧?本文将教你如何在win10系统中快速锁屏,让你的工作更加便捷。
工具原料:系统版本:Windows 10品牌型号:任意品牌软件版本:最新版本一、通过快捷键在Windows 10系统中,你可以使用快捷键Win+L来快速锁屏,这样你就能在离开电脑时快速保护自己的隐私。
二、使用开始菜单点击开始按钮,然后点击用户图标,选择锁屏即可快速锁定屏幕。
三、使用命令行如果你习惯使用命令行,可以在命令行中输入“Rundll32.exe user32.dll,LockWorkStation”来快速锁定屏幕。
四、使用第三方工具还有一些第三方工具可以帮助你快速锁定屏幕,比如AutoHotkey等,通过设置快捷键来实现锁屏功能。
总结:通过本文的介绍,你已经学会了在win10系统中如何快速锁屏,无论是使用快捷键还是开始菜单,都可以让你的工作更加便捷,不用担心工作隐私的泄露,赶紧去试试吧。
标签: 注意:本站所刊载的文章均为学习交流之用,请勿用于商业用途。
对于商业使用,请联系各自版权所有者,否则法律问题自行承担。
Win7系统升级指南:全面解析升级步骤与要点 Win7系统损坏修复教程:详细步骤助你快速解决问题 简介:想象一下,你正在忙碌地工作着,突然有事情要处理,又不想关机,这时候如果能快速锁屏就太方便了吧?本文将教你如何在win10系统中快速锁屏,让你的工作更加便捷。
工具原料:系统版本:Windows 10品牌型号:任意品牌软件版本:最新版本一、通过快捷键在Windows 10系统中,你可以使用快捷键Win+L来快速锁屏,这样你就能在离开电脑时快速保护自己的隐私。
二、使用开始菜单点击开始按钮,然后点击用户图标,选择锁屏即可快速锁定屏幕。
三、使用命令行如果你习惯使用命令行,可以在命令行中输入“Rundll32.exe user32.dll,LockWorkStation”来快速锁定屏幕。
四、使用第三方工具还有一些第三方工具可以帮助你快速锁定屏幕,比如AutoHotkey等,通过设置快捷键来实现锁屏功能。
总结:通过本文的介绍,你已经学会了在win10系统中如何快速锁屏,无论是使用快捷键还是开始菜单,都可以让你的工作更加便捷,不用担心工作隐私的泄露,赶紧去试试吧。
菜科网系统致力于解决 Windows 系统重装解决方案,提供高效、安全、免费的系统重装服务。