双GPU-c++MATLAB混合编程

本文介绍了在MATLAB中进行双GPU编程时遇到的编译和链接错误,以及如何解决这些问题。在编译阶段,由于缺少windows.h头文件,通过在CUDA编译中添加-I路径解决了问题。然而,链接阶段出现了'IUnknown'未定义的错误,通过引入特定的头文件得以修复。此外,还讨论了在MATLAB mex函数中传递参数的技巧和使用mexErrMsgTxt()时的注意事项。最后,提供了一个双GPU代码框架,涉及线程管理和数据处理流程。
摘要由CSDN通过智能技术生成

使用gpu编程双gpu编程例程,其中有头文件book.h

编译错误windows.h找不到


在MATLAB中混合vs2013编程,mex时出现windows.h无法识别,但是单独在vs2013下运行双GPU测试程序可以运行成功,路径定位准确。


第一步,首先在MATLAB中添加Windows kits所有路径,mex失败


第二步,使用绝对路径可行但是需要添加的路径太多,添加环境变量也会很多


第三步,添加环境变量,无法解决


第四步,在cuda编程指南中搜索include,在nvcc中可以同过-I path的方式添加所需要的包含文件的路径,此方法解决windows.h文件无法找到的问题,mex编译通过,但是在链接是出现新问题,”identifier “IUnknown” is undefined” error .


链接错误

第五步,通过搜索该问题在这里
找到解决方法,即在文件开头添加

#ifdef _WIN32

#define WIN32_LEAN_AND_MEAN

#endif

即可解决。


mexfunction函数可以通过传入参数和传出参数进行交互,在MATLAB中采用

[a b c ...] = fun(A,B,C,...)

调用,在cpp端

mexFunctionnrhsnrhs[],nlhs,hlhs[]

其中nrhs是输入参数数量,nlhs是输出参数数量。


在mexFunction中使用mexPrintf()方法对数据进行打印,用法同printf()方法。


犯二错误

  1. 使用mexErrMsgTxt()方法,作为打印函数,此函数会终止程序运行。
  2. 在MATLAB端采用
[a,b] = double(func(c,d,e));

调用函数,当输出参数为一个时,用法可以,但是当输出参数为两个或更多少,就会导致在cpp函数中的输出参数nlhs总为1,运行错误提示输出参数过多。


双GPU实例代码框架

/*
 * Copyright 1993-2010 NVIDIA Cor
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值