MATLAB下使用CUDA。

#@author:       gr
#@date: 2014-04-08
#@email: forgerui@gmail.com

一、 Matlab & C

1. 概念

MatlabC 混编可以提高程序运行效率。

2. C文件

C文件需要在引入头文件mex.h,我的mex.h位置在/opt/MATLAB/R2013a/extern/include/mex.h

#include <mex.h>

Matlab与C文件的接口函数是mexFunction

mexFunction(int nlhs, mxArray* plhs[], int nrhs, const mxArray* prhs[]){
// entry
}

mexFunciton就像main函数一样,是Matlab调用的入口。其中,nlhs是输出参数个数,plhs是输出参数;nrhs是输入参数个数,prhs是输入参数,它是一个只读的变量。

3. 常用函数

4. 编译

需要将C语言源文件编译成可执行文件才能被Matlab调用,并且编译出来的文件比同名的.m文件执行优先级更高,即如果两个同名先执行编译出来的文件。

编译分两个步骤,先编译生成.o中间文件(windows下是.obj),再链接生成.mexa64文件(linux32位是.mexglx,windows是.mexw64),这个.mexa64文件可以直接被Matlab使用。

具体操作是打开Matlab,进入要编译文件的文件夹,要先配置一下编译器。

# configure the compiler

mex -setup

# compile

mex -c hello.c -o hello.o

# link

mex -O hello.o

之后在Matlab中直接敲hello便可以调用hello程序。

二、Matlab & CUDA

1. Cuda的kernel函数

代码分为两部分,一部分代码在主机(host)上执行,另一部分则在设备(device)上执行,kernel函数是在GPU上执行的函数。

进行Cuda编译的一般步骤:

  1. 在主机上申请device内存
  2. 将主机数据拷贝到设备上
  3. 在设备上进行运算
  4. 主机将设备上的运算结果拷贝回主机内存
  5. 释放设备内存

如下定义kernel函数:

__global__ static void kernel_function(int* a, int* b, int* c){
// realted code
}

2. Cuda的启动

在主机上通过调用kernel函数名进行启动。

# 启动
kernel_function<<<block, thread>>>(a, b, c);

其中thread是一个block中启动的线程数,而block是需要划分为多少个block.块内的thread可以时行数据同步和共享内存,不同的block之间无法进行同步。a, b, c是相关的参数。

具体CUDA相关知识请看博客

3. 编译

因为Cuda有自己的编译器nvcc,所以需要调用这个编译器去编译C文件。我们可以在Matlab中利用一个脚本进行编译。

    nvmex('hello.c');
    function [ path, filename, zaet, fd ] = nvmex( cuFileName )
%NVMEX Summary of this function goes here
% Detailed explanation goes here file_split = regexp(cuFileName, '\.', 'split');
filename = file_split{1}; if ispc % Windows
CUDA_LIB_LOCATION = 'C:\CUDA\lib';
Host_Compiler_Location = '-ccbin "D:\Program Files\Microsoft Visual Studio 9.0\VC\bin"';
PIC_Option = '';
else % Mac and Linux
CUDA_LIB_Location = '/usr/local/cuda/lib64';
Host_Compiler_Location = '';
PIC_Option = '--compiler-options -fPIC';
end % compile .o file
nvccCommandLine = [ ...
'nvcc --compile ' cuFileName ' ' Host_Compiler_Location ' ' ...
' -o ' filename '.o ' ...
PIC_Option ...
' -I' matlabroot '/extern/include ' ...
];
disp(nvccCommandLine);
status = system(nvccCommandLine);
if status < 0
error 'Error invoking nvcc';
end % link .mexa64 file
mexCommandLine = ['mex (''' filename '.o'', ''-L' CUDA_LIB_Location ''', ''-lcudart'')'];
disp(mexCommandLine);
eval(mexCommandLine); end

### MATLAB - CUDA的更多相关文章

  1. Matconvnet笔记(一)

    参考网址:http://www.vlfeat.org/matconvnet/ 内容参考博客:http://blog.sina.com.cn/s/blog_92cd3a1c0102x1ch.html M ...

  2. rcnn caffe matlab 配置完成 14.04 cuda 7.0

    http://blog.csdn.net/real_myth/article/details/42672381 各种痛苦.实验室网速还是龟速. 莫名其妙的错误. gcc还降级到4.7,opencv 3 ...

  3. 手把手教你搭建深度学习平台——避坑安装theano+CUDA

    python有多混乱我就不多说了.这个混论不仅是指整个python市场混乱,更混乱的还有python的各种附加依赖包.为了一劳永逸解决python的各种依赖包对深度学习造成的影响,本文中采用pytho ...

  4. ubuntu14.04下安装cudnn5.1.3,opencv3.0,编译caffe及配置matlab和python接口过程记录

    已有条件: ubuntu14.04+cuda7.5+anaconda2(即python2.7)+matlabR2014a 上述已经装好了,开始搭建caffe环境. 1. 装cudnn5.1.3,参照: ...

  5. Caffe + Ubuntu 14.04 64bit + CUDA 6.5 配置说明

    本文安装显卡驱动的方式已经过时, 最新安装说明请参考发布在Gist上的这篇文章,如有任何疑问,仍然欢迎在本文下留言 :P (本文档使用同一块NVIDIA显卡进行显示与计算, 如分别使用不同的显卡进行显 ...

  6. Caffe配置简明教程 ( Ubuntu 14.04 / CUDA 7.5 / cuDNN 5.1 )

    1. 前言 本教程使用的系统是Ubuntu 14.04 LTS 64-bit,使用的CUDA版本为7.5,使用的NVIDIA驱动版本为352. 如果您使用的Pascal架构显卡,如GTX1080或者新 ...

  7. win7 64 旗舰版虚拟GPU-VMware下+vs2013安装caffe+matlab+python

    转发请说明来处 Win7配置caffe(无GPU) 配置环境: 必须:win7 64 + vs2013 Win7 64位旗舰版要升级到service spack(因为是在vs2013下,想安装vs20 ...

  8. UBUNTU 14.04 + CUDA 7.5 + CAFFE

    这个也是困扰我很久的问题,之前用 http://www.cnblogs.com/platero/p/3993877.html 的安装方法,装了五六七八九十次,总是出问题. 后来找到了一种新的方法,一个 ...

  9. [转]caffe+Ubuntu14.0.4 64bit 环境配置说明(无CUDA,caffe在CPU下运行) --for --Amd

    caffe是一个简洁高效的深度学习框架,具体介绍可以看这里,caffe环境配置过程可以参考这里,我在搭建环境时搜集了许多资料,这里整理了一下,介绍一下caffe在无CUDA的环境下如何配置. 1. 安 ...

随机推荐

  1. Java SAX DefaultHandler

    The org.xml.sax.helpers.DefaultHandler class is the base class for "listeners" in SAX 2.0. ...

  2. CP2102模块介绍(USB转uart)

    1.主芯片为CP2102,安装驱动后生成虚拟串口2.USB取电,引出接口包括3.3V(<40mA),5V,GND,TX,RX,信号脚电平为3.3V,正逻辑3.板载状态指示灯.收发指示灯,正确安装 ...

  3. 转载 ASP.NET MVC中使用ASP.NET Identity

    转载原地址: http://blog.jobbole.com/90695/ 在之前的文章中,我为大家介绍了OWIN和Katana,有了对它们的基本了解后,才能更好的去学习ASP.NET Identit ...

  4. zabbix 3.0 安装

    zabbix3.0安装注意: 1.PHP要5.4版本以上 2.防火墙关闭 3.selinux关闭 注:本操作系统为centos 6.5 X86   操作步骤 一.安装PHP 添加 epel 源 # r ...

  5. Css基础-id选择器

    id 选择器以#来定义 <p id="pid">Hello css</p> #pid { color:red; } <div id="div ...

  6. CentOS 下SSH无密码登录的配置

    CentOS 下SSH无密码登录的配置 最近学习Hadoop.它要求各节点之间通过SSH无密码登录,配置SSH的时候费了一番功夫,记录下来,以备忘. 配置SSH无密码登录需要3步: 1.生成公钥和私钥 ...

  7. 安装Intel HAXM为Android 模拟器加速,30秒内启动完成

    要求 必备知识 windows 7 基本操作. 运行环境 windows 7(64位); Android Studio 1.1.0;JDK 1.7.0_75(64位);android-sdk_r24 ...

  8. ListOrderedMap

    要有序能够用List,要便于查找能够用Map,那既要有序又便于查找呢? 近期我就遇到了这样一个问题.Java没有给我们提供现成的类.我们全然能够自己开发个类继承List和Map(Java原来就有不能够 ...

  9. Aizu 2450 Do use segment tree 树链剖分+线段树

    Do use segment tree Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.bnuoj.com/v3/problem_show ...

  10. 在Linux下安装C/C++开发工具包的最佳方式

    假设你使用的是Fedora, Red Hat, CentOS, 或者 ScientificLinux 系统,使用以下的命令安装GNU的C/C++开发包和编译器. # yum groupinstall ...