Jan 312014
 
This entry is part 10 of 13 in the series Matlab基础班附加材料

备忘性质,我也是尝试。而且当前还没有什么需要应用opencl的工作,纯粹作为春节假期的一种休闲活动。此外,安装了opencl-toolbox后,要在显卡上执行的任务都要写成opencl的程序才行,整个的学习成本有些高了,我还没有想好是否有必要认真学习。哈哈。

前言:

理论上来说,这个工具箱的安装是很简单的,在toolbox的下载网站上有详细的安装说明,只要照样做就行。但是,就我个人的操作来看,其实是比较折腾的。最后,终于成功。在这里,我可能走了很多弯路,其中很多动作可能不需要做,而且有些在网络上查询的问题也可能本来不是问题。但是,这里写下来,以我最后成功的那个设置为准,依据这个设置做,应该不会有任何问题;当然,这里也会将其中部分可能不必要的甚至提示出来,但是如果安装那样设置,是否能够成功这个就不清楚了。

环境:

硬件:nVidia的610M,笔记本的一个很弱的显卡,但是CUDA和OPENCL都支持,因此用于实验性质不错
系统:Windows7 x64 SP1, Matlab2012A x64
OpenCL工具箱: https://code.google.com/p/opencl-toolbox/  可惜已经不更新了。不过能用。
驱动程序:我的是nVidia的显卡,所以就下载驱动,理论上里面有opencl的驱动,但是依据我的测试,这个是不够的,里面似乎没有找到相应的库文件。最后,我是下载了“NVIDIA GPU Computing Toolkit” (在google中搜索就能下载到)。安装时,记得勾选 CUDA Tool Kit。

编译环境:

Mathworks将编译环境的要求写的很明白, http://www.mathworks.cn/support/compilers/R2012a/win64.html
里面可以有多种选择,例如选择VC++ 2010专业版,或者VC++2008+SDK。这里有两个要注意的点:
1. 按照我最初遇到的问题,以及网络上有些网友写下的Bug Report,似乎是在Matlab 2012A下不能用VC 2010版本,只能用VC 2008+SDK的解决办法。最终我是安装了VC2008+SDK后成功搞定,但是搞定后,再转而用VC 2010也可以成功编译。这里建议,如果不想折腾,那么直接VC2008+SDK吧。
2. 安装Visual Studio时,记得要勾选X64 Compilers and Tools这个选项(在VC++的分项下面),否则无法在64位的Matlab下编译成功64位的工具箱。

Matlab编译环境选择:

打开Matlab,运行mex --setup,Matlab会列出当前Windows系统中已经有的编译环境,从其中选择你需要的环境(如果32位Matlab,它还自带一个LCC,那个不要用)。这里,我们选择前面安装好的VC 2008。

Make.m 修改:

从Matlab中进入到工具箱目录,目录下有Make.M,我们就要修改其中的两个目录设置参数。在OpenCL工具箱下面的Readme.Txt中,有详细说明两个参数的来由。其中“opencl_include_dir”,是CL/cl.h 这个文件所在的目录,“opencl_lib_dir”这个是“OpenCL.lib”所在的目录。这个设置要略注意一些,以我的情况为例,两个文件的含路径全名是:

"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\CL\cl.h"
"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\lib\x64\OpenCL.lib"

因为是64位,所以OpenCL.lib选择的是x64目录下的版本,如果32位,估计要选择的就是\Win32目录下的(我还没有编译32位,因此只是估计)。最后,我的Make.M文件中的设置如下:

opencl_include_dir = 'C:\Progra~1\NVIDIA~2\CUDA\v5.5\include';
opencl_lib_dir = 'C:\Progra~1\NVIDIA~2\CUDA\v5.5\lib\x64';

为什么要这么设置?这里有两个注意事项:

1. cl.h 文件的目录,里面不需要写 CL\
2. 在目录设置中,不要有空格,例如"Program Files”,里面就有空格。我选择的解决办法是用带 ~ 符号的短目录名。如果有空格,那么会出什么样的问题呢?出错显示如下:

openclcmd.cpp
include\ray/opencl/opencl.h(4) : fatal error C1083: 无法打开包括文件:“CL/cl.h”: No such file or directory

C:\STUDY\MATLAB~1\BIN\MEX.PL: Error: Compile of 'src\openclcmd.cpp' failed.

编译与测试:

万事俱备,使得工具箱目录为当前目录,运行make.m。很快就会出现一个 openclcmd.mexw64 。应该就是OK了。

最后可以运行 test_openclcmd.m test_openclmatlab.m 两个文件测试。用 ocl.platforms.devices 可以显示出当前OpenCL设备的属性。例如我的610M的显示结果是:

profile: 'FULL_PROFILE'
name: 'GeForce 610M'
vendor: 'NVIDIA Corporation'
version: 'OpenCL 1.1 CUDA'
driver: '320.57'
extensions: [1x362 char]
max_compute_units: 1
max_work_item_dimensions: 3
max_work_group_size: 1024
max_work_item_sizes: [1024 1024 64]
preferred_vector_width_char: 1
preferred_vector_width_short: 1
preferred_vector_width_int: 1
preferred_vector_width_long: 1
preferred_vector_width_float: 1
preferred_Vector_width_double: 1
max_clock_frequency: 1800
address_bits: 32
max_read_image_args: 128
max_write_image_args: 8
max_mem_alloc_size: 536870912
image2d_max_width: 32768
image2d_max_height: 32768
image3d_max_width: 2048
image3d_max_height: 2048
image3d_max_depth: 2048
image_support: 1
max_parameter_size: 4352
max_samplers: 16
mem_base_addr_align: 4096
min_data_type_align_size: 128
global_mem_cacheline_size: 128
global_mem_cache_size: 16384
global_mem_size: 2147483648
max_constant_buffer_size: 65536
max_constant_args: 9
local_mem_size: 49152
error_correction_support: 0
profiling_timer_resolution: 1000
endian_little: 1
available: 1
compiler_available: 1

 

No related posts.

Series Navigation<< 生成“真正随机”的随机数Matlab-R连接的最新版及问题 >>
Bookmark/FavoritesSina WeiboGoogle+FacebookQQTwitterYahoo BookmarksBaiduDiggEmailGoogle GmailOutlook.comEvernotePrintAIMLinkedInBlogger PostKindle ItShare

Related Posts:

 Leave a Reply

(required)

(required)


*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>