VS2010 VS2012 AMD OpenCL 开发环境配置, 32位+64位

首先你要装好催化剂显卡驱动。

下载AMP APP SDK安装包,比如64的就叫AMD-APP-SDK-v2.4-Windows-64.exe,安装AMD APP SDK,如图0。

安装完之后重新启动。

首先知道一下安装的位置,我这里按默认装在了 C:\Program Files (x86)\AMD APP\ ,如图1。

图1

系统安装的时候系统已经设置了一个环境变量AMDAPPSDKROOT来指示安装的位置,可以在cmd里查看,如图2。

图2

系统也已经把可执行路径加到了PATH里,这样就可以找到OpenCL的运行库。如图3。

图3

打开一个已有的OpenCL项目,或者新建一个项目。
如果新建项目,点击文件->新建,建立一个空项目。加入一个自己写的HellowCL之类的源码,如果没有,我这里写了一个初始化的小源码,诸位可以自行下载添加,结果如图6。OpenclConfig.cpp

图6

因为安装包已经在系统的PATH路径里加入了动态链接库的路径,所以就没有必要再在VS里添加了,我们需要做的就是添加需要的包含

目录和库目录,为了同时兼容32位和64位系统,需要对32位系统和64位系统差异对待。如果你只考虑单个平台下的配置,那么只需要

以下内容中相应平台的配置即可。

由于默认的环境是Win32,我们在这里添加一个x64的平台支持,前提是你安装了64位的编译器,如果你不需要64位,那么往下看即可


1. 左侧项目名右键->属性
2. 看到属性页窗口之后,点击右上方的配置管理器,
3. 在配置管理器中下拉,选择<新建>
4. 在键入或选择新平台中下拉,选择x64,确定
以上过程如图7。

图7

一、通用配置,32位和64位都得有的,打开项目属性页:
(1)左上角配置选所有配置,平台选所有平台
(2)C/C++->常规->附加包含目录 添加$(AMDAPPSDKROOT)include,如图8。
图8
(3)链接器->输入,附加依赖项里加入OpenCL.lib

二、32位独有的配置,项目属性页中:
(1)左上角配置选所有配置,平台选Win32
(2)链接器->常规 附加库目录,加入$(AMDAPPSDKROOT)lib\x86,如图9。
图9

三、64位独有的配置,项目属性页中:
(1)左上角配置选所有配置,平台选x64
(2)链接器->常规 附加库目录,加入$(AMDAPPSDKROOT)lib\x86_64,如图10。
图10

以上配置完成之后即可编译运行,在上面给出的代码中,如果看到图11,说明编译运行成功。
图11

如果32位和64位的都配置好了,可以在工具栏里选择Debug/Release,Win32/x64的任意组合进行编译。

望大家Coding愉快!

此条目由 intijk 发表在 HPC 分类目录,并贴了 64位AMDopenclvs2010x64配置 标签。将固定链接加入收藏夹。

VS2010 AMD OPENCL 开发环境配置, 32位+64位》上有 2 条评

vs2010 代码
#include <CL/cl.h>
#include <stdio.h>
#include <stdlib.h>

#define CL_VERBOSE
void openclRetTackle(cl_int retValue, char* processInfo){
	if(retValue!=CL_SUCCESS){
#if (defined CL_DEBUG) || (defined CL_VERBOSE)
		printf("%s Error!\n",processInfo);
#endif
		exit(-1);
	}else{
#ifdef CL_VERBOSE
		printf("%s Success!\n",processInfo);
#endif
	}
}

cl_platform_id cpPlatform;
cl_device_id cdDevice;
cl_context cxGPUContext;
cl_command_queue cqCommandQueue;


int openclInit()
{
	cl_int ret;
	//�õ�ƽ̨ID
	openclRetTackle( clGetPlatformIDs(1, &cpPlatform, NULL), "clGetPlatFormIDs");
	//�õ�GPU�豸ID
	openclRetTackle( clGetDeviceIDs(cpPlatform, CL_DEVICE_TYPE_GPU,1,&cdDevice,NULL), "clGetDeviceIDs");
	//��ȡGPU�豸������
	cxGPUContext = clCreateContext(0, 1, &cdDevice, NULL, NULL, &ret);
	openclRetTackle( ret , "clCreateContext" );
	//������������
	cqCommandQueue = clCreateCommandQueue(cxGPUContext, cdDevice, 0, &ret);
	openclRetTackle( ret , "clCreateCommandQueue");
	return CL_SUCCESS;
}
int main()
{
	openclInit();
	
	system("pause");
	return 0;
}
vs2012代码

HelloWorld

本人偷懒就用fixstar的代码了,建立项目,新建c或者cpp文件,粘贴下列代码进去:

  1. #include <stdio.h>  
  2. #include <stdlib.h>  
  3. #include <CL/cl.h>  
  4.   
  5. #define MEM_SIZE (128)  
  6. #define MAX_SOURCE_SIZE (0x100000)  
  7.   
  8. int main()  
  9. {  
  10.     cl_device_id device_id = NULL;  
  11.     cl_context context = NULL;  
  12.     cl_command_queue command_queue = NULL;  
  13.     cl_mem memobj = NULL;  
  14.     cl_program program = NULL;  
  15.     cl_kernel kernel = NULL;  
  16.     cl_platform_id platform_id = NULL;  
  17.     cl_uint ret_num_devices;  
  18.     cl_uint ret_num_platforms;  
  19.     cl_int ret;  
  20.   
  21.     char string[MEM_SIZE];  
  22.   
  23.     FILE *fp;  
  24.     char fileName[] = "./main.cl";  
  25.     char *source_str;  
  26.     size_t source_size;  
  27.   
  28.     /* Load the source code containing the kernel*/  
  29.     fp = fopen(fileName, "r");  
  30.     if (!fp) {  
  31.         fprintf(stderr, "Failed to load kernel.\n");  
  32.         exit(1);  
  33.     }  
  34.     source_str = (char*)malloc(MAX_SOURCE_SIZE);  
  35.     source_size = fread(source_str, 1, MAX_SOURCE_SIZE, fp);  
  36.     fclose(fp);  
  37.   
  38.     /* Get Platform and Device Info */  
  39.     ret = clGetPlatformIDs(1, &platform_id, &ret_num_platforms);  
  40.     ret = clGetDeviceIDs(platform_id, CL_DEVICE_TYPE_DEFAULT, 1, &device_id, &ret_num_devices);  
  41.   
  42.     /* Create OpenCL context */  
  43.     context = clCreateContext(NULL, 1, &device_id, NULL, NULL, &ret);  
  44.   
  45.     /* Create Command Queue */  
  46.     command_queue = clCreateCommandQueue(context, device_id, 0, &ret);  
  47.   
  48.     /* Create Memory Buffer */  
  49.     memobj = clCreateBuffer(context, CL_MEM_READ_WRITE,MEM_SIZE * sizeof(char), NULL, &ret);  
  50.     /* Create Kernel Program from the source */  
  51.     program = clCreateProgramWithSource(context, 1, (const char **)&source_str,(const size_t *)&source_size, &ret);  
  52.   
  53.     /* Build Kernel Program */  
  54.     ret = clBuildProgram(program, 1, &device_id, NULL, NULL, NULL);  
  55.   
  56.     /* Create OpenCL Kernel */  
  57.     kernel = clCreateKernel(program, "hello", &ret);  
  58.   
  59.     /* Set OpenCL Kernel Parameters */  
  60.     ret = clSetKernelArg(kernel, 0, sizeof(cl_mem), (void *)&memobj);  
  61.   
  62.     /* Execute OpenCL Kernel */  
  63.     ret = clEnqueueTask(command_queue, kernel, 0, NULL,NULL);  
  64.   
  65.     /* Copy results from the memory buffer */  
  66.     ret = clEnqueueReadBuffer(command_queue, memobj, CL_TRUE, 0,  
  67.         MEM_SIZE * sizeof(char),string, 0, NULL, NULL);  
  68.   
  69.     /* Display Result */  
  70.     puts(string);  
  71.   
  72.     /* Finalization */  
  73.     ret = clFlush(command_queue);  
  74.     ret = clFinish(command_queue);  
  75.     ret = clReleaseKernel(kernel);  
  76.     ret = clReleaseProgram(program);  
  77.     ret = clReleaseMemObject(memobj);  
  78.     ret = clReleaseCommandQueue(command_queue);  
  79.     ret = clReleaseContext(context);  
  80.   
  81.     free(source_str);  
  82.   
  83.     getchar();  
  84.     return 0;  
  85.   
  86. }  

新建文件,后缀改成.cl,粘贴下列代码进去:

  1. __kernel void hello(__global char* string)  
  2. {  
  3.     string[0] = 'H';  
  4.     string[1] = 'e';  
  5.     string[2] = 'l';  
  6.     string[3] = 'l';  
  7.     string[4] = 'o';  
  8.     string[5] = ',';  
  9.     string[6] = ' ';  
  10.     string[7] = 'W';  
  11.     string[8] = 'o';  
  12.     string[9] = 'r';  
  13.     string[10] = 'l';  
  14.     string[11] = 'd';  
  15.     string[12] = '!';  
  16.     string[13] = '\0';  
  17. }  

编译执行文件。



阅读更多
个人分类: OpenCL
上一篇error C4996: 'fopen' 解决
下一篇mlpack:可伸缩C++机器学习库
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭