/中文/
/中文/
/中文/
/中文/
/中文/
/中文/
/中文/
/中文/
/中文/
/中文/
软件Tags: amdappsdk编程工具
AMD APP SDK是一组高级的软硬件技术。这款软件能够使图形处理器(AMDGPU)和系统的x86内核(CPU)共同协作。帮助用户快而高效的完成任务。欢迎选哦的用户来下载使用。
AMD APP,是AMD Accelerated Parallel Processing的缩写。中文译作AMD加速并行处理技术。是AMD针对旗下图形处理器(GPU)所推出的通用并行计算技术。利用这种技术可以充分发挥AMD GPU的并行运算能力,用于对软件进行加速运算或进行大型的科学运算。AMD APP技术的前身称作ATI Stream。2010年10月,随着AMD Radeon HD6800系列显卡的发布,ATI品牌正式被AMD取代。ATI Stream技术也随着技术升级并更名为AMD APP技术。AMD APP的竞争对手是nVIDIA CUDA。(来自百度百科)
AMD最近发布了支持最新的OpenCL 2.0标准的最新通用计算开发包AMD APP SDK 3.0。这标志着异构计算发展道路上的一个新的里程碑。OpenCL 2.0实施了很多AMD所倡导的新的异构系统架构。值得注意的是,GPU和CPU设备之间的数据结构指针内存共享的概念可以大大地简化GPU参与加速计算的步骤。比起利用OpenCL 1.2,GPU设备利用了OpenCL 2.0排队功能进行计算任务,为计算内核提供了一种更加强悍的编程模型。OpenCL 1.2的通用地址空间是一个强大的编程优势,但是OpenCL 2.0 引用了一种新的内存对象,叫Pipe,这个在采用FIFO机制进行数据采集时起到重要的作用。OpenCL的这些还有其他优势将会帮助你利用现代异构系统性能的巨大潜力。
安装过程,我们一般选择默认路径就行,直接点下一步完成安装。如果选择默认自动安装,那么会自动生成变量
AMDAPPSDKROOT=C:\Program Files\AMD APP SDK\3.0-0-Beta\(32位机)
AMDAPPSDKROOT=C:\Program Files(x86)\AMD APP SDK\3.0-0-Beta\(64位机)。
如果不是选择默认安装路径,那么就需要人为修改。
系统环境变量PATH需要作如下修改,32位机和64位机分别添加
$(AMDAPPSDKROOT)\bin\x86,对应的就是C:\Program Files\AMD APP SDK\3.0-0-Beta\bin\x86
$(AMDAPPSDKROOT)\bin\x86_64,对应的就是C:\Program Files(x86)\AMD APP SDK\3.0-0-Beta\bin\x86_64
安装好AMDAPPSDK之后,在命令行下运行clinfo命令,将显示出你支持OpenCL的硬件信息。
我们先新建一个简单的工程,不妨取名为Simpleproject,然后编译连接运行。代码的内容我们先不探讨,在下文中会有详细介绍。
#include <Cl/cl.h>
#include <stdio.h>
#define NWITEMS 512
//A simple memset kernel
const char *source =
"__kernel void memset( __global uint *dst ) \n"
"{ \n"
" dst[get_global_id(0)] = get_global_id(0); \n"
"} \n";
int main(int argc, char ** argv)
{
// 1. Get a platform.
cl_platform_id platform;
clGetPlatformIDs( 1, &platform, NULL );
// 2. Find a gpu device.
cl_device_id device;
clGetDeviceIDs( platform, CL_DEVICE_TYPE_GPU,1,&device,NULL);
// 3. Create a context and command queue on that device.
cl_context context = clCreateContext( NULL, 1, &device, NULL, NULL, NULL);
cl_command_queue queue = clCreateCommandQueue( context, device, 0, NULL );
// 4. Perform runtime source compilation, and obtain kernel entry point.
cl_program program = clCreateProgramWithSource( context, 1, &source, NULL, NULL );
clBuildProgram( program, 1, &device, NULL, NULL, NULL );
cl_kernel kernel = clCreateKernel( program, "memset", NULL );
// 5. Create a data buffer.
cl_mem buffer = clCreateBuffer( context, CL_MEM_WRITE_ONLY, NWITEMS*sizeof(cl_float), NULL, NULL);
// 6. Launch the kernel. Let OpenCL pick the local work size.
size_t global_work_size = NWITEMS;
clSetKernelArg(kernel, 0, sizeof(buffer), (void*) &buffer);
clEnqueueNDRangeKernel( queue, kernel, 1, NULL, &global_work_size, NULL, 0, NULL, NULL);
clFinish( queue );
// 7. Look at the results via synchronous buffer map.
cl_uint *ptr;
ptr = (cl_uint *) clEnqueueMapBuffer( queue, buffer, CL_TRUE, CL_MAP_READ, 0, NWITEMS * sizeof(cl_uint), 0, NULL, NULL, NULL );
int i;
for(i=0; i < NWITEMS; i++)
printf("%d %d\n", i, ptr[i]);
return 0;
}
不出意外的话,编译过不了,有下面的提示。
fatal error C1083: Cannot open include file: 'Cl/cl.h': No such file or directory
显然,这是因为工程需要的头文件我们的环境并没有把它包含进来,所以,要做如下配置:
打开项目的Property Pages,在C/C++ -> General ->Additional Include Directories 中添加
$(AMDAPPSDKROOT)/include;
点击Build工程之后,出现了下面错误。这是由于我们并没有把工程需要的连接库文件添加进来的问题。需要作如下配置。
1>SimpleProject.obj : error LNK2019: unresolved external symbol _clGetPlatformIDs@12 referenced in function _main
1>SimpleProject.obj : error LNK2019: unresolved external symbol _clGetDeviceIDs@24 referenced in function _main
1>SimpleProject.obj : error LNK2019: unresolved external symbol _clCreateContext@24 referenced in function _main
1>SimpleProject.obj : error LNK2019: unresolved external symbol _clCreateBuffer@24 referenced in function _main
1>SimpleProject.obj : error LNK2019: unresolved external symbol _clCreateProgramWithSource@20 referenced in function _main
1>SimpleProject.obj : error LNK2019: unresolved external symbol _clBuildProgram@24 referenced in function _main
1>SimpleProject.obj : error LNK2019: unresolved external symbol _clCreateKernel@12 referenced in function _main
1>SimpleProject.obj : error LNK2019: unresolved external symbol _clSetKernelArg@16 referenced in function _main
1>SimpleProject.obj : error LNK2019: unresolved external symbol _clFinish@4 referenced in function _main
1>SimpleProject.obj : error LNK2019: unresolved external symbol _clEnqueueMapBuffer@44 referenced in function _main
1>SimpleProject.obj : error LNK2019: unresolved external symbol _clEnqueueNDRangeKernel@36 referenced in function _main
1>SimpleProject.obj : error LNK2019: unresolved external symbol _clCreateCommandQueue@20 referenced in function _main
打开项目的Property Pages,在Linker -> General ->Additional Library Directories 中添加
$(AMDAPPSDKROOT)\lib\x86\;
在Linker -> Input ->Additional Dependencies中选择Edit,然后添加
OpenCL.lib
Inherited values中默认的值应该为:
kernel32.lib
user32.lib
gdi32.lib
winspool.lib
comdlg32.lib
advapi32.lib
shell32.lib
ole32.lib
oleaut32.lib
uuid.lib
odbc32.lib
odbccp32.lib
程序运行成功。至此,AMD APP SDK 3.0的下载安装和配置都已经完成了,不明白之处请参阅手册。