mex和cuda混合编程之向量加法

本文参照:《GPU与MATLAB混合编程》一书


环境配置

软件:VS2019+CUDA v11.1+Matlab r2022a
本文是在Matlab中实现,未使用VS
环境配置及cuda安装参照网上他人教程


mex接口

Matlab提供mex函数,可以将C/C++的代码转换为.mexw64格式的文件供调用。

  • 如何编写C格式下的mex文件参见这个官方链接: 创建C源MEX文件
  • mexcuda命令可以编译 MEX 函数以进行 GPU 计算,如何使用mexcuda参见官方链接 :mexcuda

使用Mex函数需要引入头文件:#include "mex.h"
mexfunction相当于C语言中的主函数main( ),当作matlab与其他交互的桥梁,进行读取和写入输入/输出的参数。

/* The gateway function */
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
   
/* variable declarations here */

/* code here */
}

nlhs : 输出参数的个数
plhs : 输出参数的指针数组,指向输出参数
nrhs : 输入参数的个数
prhs : 输入参数的指针数组,指向输入参数

这一步最重要的是不能漏掉 const,否则编译时会报错。

函数文件

1.AddVectors.h

#ifndef __ADDVECTORS_H__
#define __ADDVECTORS_H__

extern void addVectors(float* A, float* B, float* C, int size);//函数在其他文件中执行,在此先进行声明

#endif // __ADDVECTORS_H__

2.AddVectors.cu

#include "AddVectors.h"
#include "mex.h"

__global__ void addVectorsMask(float*A, float*B, float*C, int size)
{
   
    int i=blockIdx.x;
    if(i>=size)
        return;
    
    C[i]=A[i]+B[i
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

独忘机

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值