MatCL是MathWorks Matlab的OpenCL接口。这个基于mex的工具箱旨在提供一个简单易用的解决方案来传输内存和启动OpenCL内核从Matlab使用一个单一的命令。
与其他Matlab OpenCL解决方案相比,MatCL不仅是一个Open金宝搏官方网站CL API包装器,而且封装了初始化设备所需的底层主机API调用,从Matlab工作空间变量创建OpenCL缓冲区,并构建和启动内核。
MATCL主要旨在通过允许透明地传递来自MATLAB的数据来帮助开发和测试OpenCL内核。
因为MatCL处理整个底层进程,所以这个工具箱可以在不深入了解支持OpenCL内核执行所需的宿主实现的情况下执行内核。金宝app
MATCL也被优化,以便在MATLAB中有效地执行OpenCL内核,以加速计算密集的任务,而无需依赖NVIDIA CUDA。除了单命令内核执行外,MATCL还允许独立的两步内核编译和启动工作流以保存内核编译时间并允许有效的重复内核执行。
测试使用Nvidia (Tesla, GTX), AMD (Ryzen, Radeon R9, FirePro)和Intel (Xeon, Core, HD Graphics)设备Matlab R2016b及以上。
用法:
列举OpenCL设备:
(名称、dev_class max_mem) = cl_get_devices;
名称:所有可用设备的名称
dev_class:设备类(其他或未知加速器的CPU,GPU或其他)
max_mem:可用的设备内存以字节为单位
构建内核:
[comp_time,内核]= cl_run_kernel (ocl_dev_id‘kernel_url.cl’,‘定义’);
OCL_DEV_ID:要使用的OPENCL设备的ID
kernel_url。cl:内核文件的URL
定义:OpenCL编译器定义列表
kernel:列出所有可用内核的名称
运行内核:
[run_time, copy_time] = cl_run_kernel (ocl_dev_id”、“kernel_function”,local_range global_range in1,着干活,[rw_flags]);
OCL_DEV_ID:要使用的OPENCL设备的ID
kernel_function:执行核心函数的名称
global_range:global OpenCl Range(见ndrange)
local_range:本地OpenCL范围(参见NDRange)
in1, out1:从内核传递到内核的变量列表
rw_flags:内核变量的读/写标志,它可以是标量(所有变量都是读写),也可以是每个变量都有一个条目的向量:0 -读写/ 1 -内核只读/ 2 -内核只读
构建和运行内核:
[run_time] = cl_run_kernel(ocl_dev_id,'kernel_url.cl','defines','kernel_function',global_range,local_range,In1,Out1,[Rw_Flags]);
OCL_DEV_ID:要使用的OPENCL设备的ID
kernel_url。cl:内核文件的URL
定义:OpenCL编译器定义列表
kernel_function:执行核心函数的名称
global_range:global OpenCl Range(见ndrange)
local_range:本地OpenCL范围(参见NDRange)
in1, out1:从内核传递到内核的变量列表
rw_flags:内核变量的读/写标志,它可以是标量(所有变量都是读写),也可以是每个变量都有一个条目的向量:0 -读写/ 1 -内核只读/ 2 -内核只读
构建和运行内核(使用内核printf重定向):
[run_time] = cl_dbg_kernel(ocl_dev_id,'kernel_url.cl','defines','kernel_function',global_range,local_range,In1,Out1,[Rw_Flags]);
OCL_DEV_ID:要使用的OPENCL设备的ID
kernel_url。cl:内核文件的URL
定义:OpenCL编译器定义列表
kernel_function:执行核心函数的名称
global_range:global OpenCl Range(见ndrange)
local_range:本地OpenCL范围(参见NDRange)
in1, out1:从内核传递到内核的变量列表
rw_flags:内核变量的读/写标志,它可以是标量(所有变量都是读写),也可以是每个变量都有一个条目的向量:0 -读写/ 1 -内核只读/ 2 -内核只读
菲利普Heinisch(2021)。OpenCL封装器(https://github.com/philipheinisch/matcl),github。检索到.
用Matlab 2017b在Windows上安装这个有点棘手。
问题#1:
在compile_windows.m的代码:
COMPFLAGS = ' COMPFLAGS美元- 02 '
需要替换的
CXXFLAGS = ' CXXFLAGS美元- 02 '
使用标准编译器时
问题#2:
唯一现成的OpenCL SDK可以在以下网址找到:
https://github.com/GPUOpen-LibrariesAndSDKs/OCL-SDK/releases
但是,这不包含所有必要的文件,特别是来自\ Include \ Cl \ \ icill中缺少文件cl2.hpp。它可以在此处下载:
https://github.com/ARM-software/ComputeLibrary/blob/master/include/CL/cl2.hpp
如何获取cl_get _device和cl_run_kernel + mex-compile脚本的源文件mac os x版本?
谢谢
如何获取cl_get _device和cl_run_kernel + mex-compile脚本的源文件?
test_mul基准:
运行时间是0.129309秒。
运行时间是0.717135秒。数据从GPU传输到GPU的完成时间
经过时间为0.002120秒。%GPU内核时间
设备:GeForce GTX TITAN
构建内核只…
设备:GeForce GTX TITAN
找到旧实例,仅运行内核......
经过时间为0.779391秒。
OpenCL内核时间为0.033940秒。
设备:GeForce GTX TITAN
运行时间是1.206082秒。
OpenCL内核时间为0.033942秒。
%Matlab CUDA代码:
%发送数据到GPU
AC = GPUARRAY(A);
BC = GPUARRAY(B);
% CUDA内核调用
公元前mCc = Ac *;
%从GPU获取数据
mC =收集(mCc);
如此Findy,本地和非常用户友好的Matlab CUDA功能仍然明显更快,然后是OpenCL版本。绝对更好地使用CUDA GPU而不是通过内核函数与非CUDA GPU一起使用。
cl_get _device和cl_run_kernel + mex-compile脚本的源文件也仍然缺失!!
仍然没有用户指南或任何其他类型的详细描述…? ? ! !
MEX仅适用于Windows !?
添加内核函数的源文件。
添加任何描述。