抓取网站后台,阿里巴巴国际站开店流程及费用,简单网站建设视频教程,网站数据库连接错误话说软件开发从来没有速成一说#xff0c;一门语言你学的越快#xff0c;说明你在别的语言上下个功夫越多#xff0c;所以这次加了引号#xff0c;只不过几周之后可能会有一个公司内部OpenCL的考核#xff0c;虽然本人不需要考核#xff0c;不过也正好借机整理下之前Open…话说软件开发从来没有速成一说一门语言你学的越快说明你在别的语言上下个功夫越多所以这次加了引号只不过几周之后可能会有一个公司内部OpenCL的考核虽然本人不需要考核不过也正好借机整理下之前OpenCL的经验一方面帮着下别的同事一方面也给自己留点干活。这个教程针对有一点C/C开发经验的童鞋如果没有太多经验我建议还是先去学学C语言。 这个是wiki上OpenCL的定义我感觉想学OpenCL的人应该都已经知道了。
OpenCL (Open Computing Language开放计算语言) 是一个为异构平台编写程序的框架此异构平台可由CPUGPU或其他类型的处理器组成。OpenCL由一门用于编写kernels 在OpenCL设备上运行的函数的语言基于C99和一组用于定义并控制平台的API组成。OpenCL提供了基于任务分割和数据分割的并行计算机制。 第一天环境项目HelloWorld 硬件环境
你需要一台支持OpenCL的设备AMDNvidia的显卡Intel的CPU最好带核显型号不能太老了3年内的基本没问题。
本次教程将以Intel的CPU配合AMD的显卡为例。 软件环境
操作系统是windows的下载安装AMDAPPSDK for windowsVS2012老版本也行我推荐用新的。
操作系统是linux的下载安装AMDAPPSDK for linuxCode::blocks喜欢VIM的也行或者说更好。
下载自己常用的版本控制软件和C/C辅助开发软件。
PSOpenCL也就是库和头文件各个厂商的SDK也就是OpenCLToolsSamples别的厂商也有相应的SDK百度“厂商 OpenCL SDK的关键字组合都能找到。 检测开发环境
安装好AMDAPPSDK之后在命令行下运行clinfo命令将显示出你支持OpenCL的硬件信息。
PS不是AMD的设备可以用CPUzGPUz等软件查询是否支持OpenCL。 配置项目
个人认为既然你已经知道了OpenCL就是库那么应该知道怎么配置项目否则可能就是不满足有一点C/C开发经验这个前提了。不过为了方便还是贴出来。
自己去安装软件的目录下找到OpenCL库文件的位置一般是C:\Program Files (x86)\AMD APPlinux直接find -name ”opencl“ 命令就行一般在/opt/AMDAPP下。
Visual Studio系列别用VC6不解释
项目属性-C-常规-附加包含目录把SDK下边的include目录加进去。
项目属性-链接器-常规-附加库目录把SDK下边的lib/x86_64(x64)目录加进去。
项目属性-链接器-输入-附加依赖项输入opencl.lib
PS: 安装完SDK一般会在系统中加入环境变量的用环境变量配置上边的路径更方便比如$(AMDAPPSDKROOT)include就解决了这样换了电脑的话只要是相同厂商就能通用。
Codeblocks
右键项目-Properties...-Projects build options,输入下边内容
-I/opt/AMDAPP/include -L/opt/AMDAPP/lib/x86_64 -lOpenCL
PS: 其实OpenCL就是配置好头文件和库文件直接粘贴到项目中也行但是不推荐换个电脑可能就不好使了。 HelloWorld
本人偷懒就用fixstar的代码了建立项目新建c或者cpp文件粘贴下列代码进去 [cpp] view plaincopyprint? #include stdio.h #include stdlib.h #include CL/cl.h #define MEM_SIZE (128) #define MAX_SOURCE_SIZE (0x100000) int main() { cl_device_id device_id NULL; cl_context context NULL; cl_command_queue command_queue NULL; cl_mem memobj NULL; cl_program program NULL; cl_kernel kernel NULL; cl_platform_id platform_id NULL; cl_uint ret_num_devices; cl_uint ret_num_platforms; cl_int ret; char string[MEM_SIZE]; FILE *fp; char fileName[] ./main.cl; char *source_str; size_t source_size; /* Load the source code containing the kernel*/ fp fopen(fileName, r); if (!fp) { fprintf(stderr, Failed to load kernel.\n); exit(1); } source_str (char*)malloc(MAX_SOURCE_SIZE); source_size fread(source_str, 1, MAX_SOURCE_SIZE, fp); fclose(fp); /* Get Platform and Device Info */ ret clGetPlatformIDs(1, platform_id, ret_num_platforms); ret clGetDeviceIDs(platform_id, CL_DEVICE_TYPE_DEFAULT, 1, device_id, ret_num_devices); /* Create OpenCL context */ context clCreateContext(NULL, 1, device_id, NULL, NULL, ret); /* Create Command Queue */ command_queue clCreateCommandQueue(context, device_id, 0, ret); /* Create Memory Buffer */ memobj clCreateBuffer(context, CL_MEM_READ_WRITE,MEM_SIZE * sizeof(char), NULL, ret); /* Create Kernel Program from the source */ program clCreateProgramWithSource(context, 1, (const char **)source_str,(const size_t *)source_size, ret); /* Build Kernel Program */ ret clBuildProgram(program, 1, device_id, NULL, NULL, NULL); /* Create OpenCL Kernel */ kernel clCreateKernel(program, hello, ret); /* Set OpenCL Kernel Parameters */ ret clSetKernelArg(kernel, 0, sizeof(cl_mem), (void *)memobj); /* Execute OpenCL Kernel */ ret clEnqueueTask(command_queue, kernel, 0, NULL,NULL); /* Copy results from the memory buffer */ ret clEnqueueReadBuffer(command_queue, memobj, CL_TRUE, 0, MEM_SIZE * sizeof(char),string, 0, NULL, NULL); /* Display Result */ puts(string); /* Finalization */ ret clFlush(command_queue); ret clFinish(command_queue); ret clReleaseKernel(kernel); ret clReleaseProgram(program); ret clReleaseMemObject(memobj); ret clReleaseCommandQueue(command_queue); ret clReleaseContext(context); free(source_str); getchar(); return 0; } 新建文件后缀改成.cl粘贴下列代码进去 [cpp] view plaincopyprint? __kernel void hello(__global char* string) { string[0] H; string[1] e; string[2] l; string[3] l; string[4] o; string[5] ,; string[6] ; string[7] W; string[8] o; string[9] r; string[10] l; string[11] d; string[12] !; string[13] \0; } 编译执行文件。 第一天的内容就是这些明天将讲解上边的代码和OpenCL的组织结构。 作业阅读上边的代码解释各个API的含义写上中文注释最好别直接翻译将代码上传到自己的版本管理工具上。