main函数会实现或调用一组函数,完成以下操作:

可以和OpenCL入门二:OpenCL基础概念中的代码进行对比

OpenCL内核

__kernel void vector_add(global const float *a, global const float *b, global float *result)
{ int gid = get_global_id(0);result[gid] = a[gid] + b[gid];
}
————————————————
版权声明:本文为CSDN博主「肥叔菌」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/asmartkiller/article/details/86611145

主函数





选择OpenCL平台并创建一个上下文


选择设备并创建命令队列


创建和构建程序对象


执行内核


cl_context context = 0;
cl_command_queue commandQueue = 0;
cl_program program = 0;
cl_device_id device = 0;
cl_kernel kernel = 0;
cl_mem memObjects[3] = { 0, 0, 0};
cl_int errNum;// 创建OpenCL上下文
context = CreateContext(&device);
//获得OpenCL设备,并创建命令队列
commandQueue = CreateCommandQueue(context, device);
// 创建OpenCL程序
program = CreateProgram(context, device, "device.cl");
// 创建OpenCL内核
kernel = clCreateKernel(program, "vector_add", NULL);
// 创建OpenCL内存对象
float result[ARRAY_SIZE];
float a[ARRAY_SIZE];
float b[ARRAY_SIZE];
for (int i = 0; i < ARRAY_SIZE; i++)
{a[i] = (float)i;b[i] = (float)(i * 2);
}
if (!CreateMemObjects(context, memObjects, a, b))
{return 1;
}
// 设置内核参数
errNum = clSetKernelArg(kernel, 0, sizeof(cl_mem), &memObjects[0]);
errNum |= clSetKernelArg(kernel, 1, sizeof(cl_mem), &memObjects[1]);
errNum |= clSetKernelArg(kernel, 2, sizeof(cl_mem), &memObjects[2]);
if (errNum != CL_SUCCESS)
{return 1;
}
// 执行内核
size_t gloabalWorkSize = ARRAY_SIZE;size_t localWorkSize = 1;std::cout << "GPU 运行开始:" << time_stamp() << std::endl;errNum = clEnqueueNDRangeKernel(commandQueue, kernel, 1, NULL, &gloabalWorkSize, &localWorkSize, 0, NULL, NULL);std::cout << "GPU 运行结束:" << time_stamp() << std::endl;
//计算结果拷贝回主机
errNum = clEnqueueReadBuffer(commandQueue, memObjects[2], CL_TRUE, 0, sizeof(float) * ARRAY_SIZE, result, 0, NULL, NULL);
for (int i = 0; i < ARRAY_SIZE; i++){printf("i = %d:%f\n",i,result[i]);}
————————————————
版权声明:本文为CSDN博主「肥叔菌」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/asmartkiller/article/details/86611145

检查OpenCL中的错误




读书笔记-OpenCL编程指南 HelloWorld相关推荐

  1. 读书笔记-OpenCL编程指南 简介

    OpenCL是Open Computing Language(开放语言的缩写).设立OpenCL的目的就是为日益庞大的并行计算市场提供一个开放的.免费的行业标准.它让开发人员能够利用CPU.GPU等计 ...

  2. 剑指offer(第二版)读书笔记以及编程题目python版答案(二)

    剑指offer(第二版)读书笔记以及编程题目python版答案(二) 题目五:青蛙跳台阶 github地址: https://github.com/ciecus/leetcode_answers/tr ...

  3. OpenCL Programming Guide - OpenCL 编程指南 - 书中源代码

    OpenCL Programming Guide - OpenCL 编程指南 - 书中源代码 1. Heterogeneous Compute http://www.heterogeneouscomp ...

  4. Core Java 8 读书笔记-Networking编程

    Core Java 8 读书笔记-Networking编程 作者:老九-技术大黍 原文:Core Java 8th Edition 社交:知乎 公众号:老九学堂(新人有惊喜) 特别声明:原创不易,未经 ...

  5. 读书笔记————Python编程快速上手

    学习笔记 文章目录 基础 整型.浮点型和字符串数据类型 字符串连接和复制 变量命名规则 `print()`函数 `input()`函数 `len()`函数 `str() float() int()`函 ...

  6. 小白的第一本python书_读书笔记:编程小白的第一本python入门书

    书名:编程小白的第一本python入门书 作者:侯爵 出版社/出处:图灵社区 年份:2016年 封面: 感想: 本书短小精悍,精华部分在于给编程小白打了鸡血的同时输出了一种"高效学习法的思想 ...

  7. OpenCL编程指南-1.1OpenCL简介

    什么是OpenCL OpenCL是面向由CPU.GPU和其他处理器组合构成的计算机进行编程的行业标准框架.这些所谓的 "异构系统" 已经成为一类重要的平台,OpenCL是直接满足这 ...

  8. OpenCL编程指南-1.2OpenCL图形API

    OpenCL与图形 OpenCL的出现是对GPCPU编程的一个响应.人们用GPU处理图形,并且开始使用GPU完成工作中的非图形部分.基于这种趋势,异构计算(已经存在很长时间)与图形发生冲突,因此迫切需 ...

  9. 读书笔记:编程小白的第一本python入门书

    书名:编程小白的第一本python入门书 作者:侯爵 出版社/出处:图灵社区 年份:2016年 封面: 感想: 本书短小精悍,精华部分在于给编程小白打了鸡血的同时输出了一种"高效学习法的思想 ...

  10. opencl编程指南

    第一章 Opencl介绍 1.什么是opencl OpenCL是面向由CPU.GPU和其他处理器组合构成的计算机进行编程的行业标准框架. 2.多核的未来,异构平台 cpu中门切换消耗的能量为电容©乘以 ...

最新文章

  1. java实现截取6个汉字字母数字
  2. 基于mysql数据库的应用_MySQL数据库应用
  3. 五层验证系统,带你预防区块链业务漏洞
  4. android studio moudel,Android Studio将module变为library
  5. php ipa 版本定制,class.php
  6. memcached—Memcache安全性
  7. Go 语言高性能编程
  8. 爬虫小程序 - 翻译君
  9. 什么是内存碎片?如何避免?
  10. 省市县乡村五级行政区域数据2021(国家统计局)
  11. pdf如何转换成word文档格式
  12. 单片机程序配置成开漏输出_单片机的GPIO配置
  13. 性能测试——性能监控工具——nmon文件的打开与分析
  14. TortoiseSVN文件及文件夹图标不显示解决方法
  15. 详解EC11编码器示波器波形图
  16. C#中WinFrom保存文件SaveFileDialog类的使用方法
  17. torch.cuda.is_available()显示false的原因
  18. AI技术再升级:2022年最流行的10大人工智能技术
  19. win2003下搭建IIS serve
  20. [ZZ] GTX 280 GPU architecture

热门文章

  1. wpsoffice安卓历史版本_wps office移动版_wps office手机版下载-太平洋下载中心
  2. ExtJs教程 3.0
  3. GoldenGate Director安装
  4. angularjs源码笔记(1.3)--directive ctrl attrs
  5. 超简单!利用查看源代码+正则表达式复制百度文库无法复制内容
  6. ubuntu dos转linux命令行,Ubuntu下代替dos2unix命令
  7. 使用PageOffice---如何在模板中添加数据区域
  8. 《HTTP权威指南》学习总结1——HTTP协议概述
  9. CCF推荐国际学术会议和期刊目录2019年
  10. Linux网络服务-LAMP之Php基于Apache的模块实现