s*******n 发帖数: 101 | 1 rt.用VC调试时,好像只能看到地址,能不能查看mxArray里面的具体内容?谢谢 |
|
j******t 发帖数: 788 | 2 可以, 不过你要做TYPE MAPPING, 还要把C++的矩转化成MATLAB,
我的经验是慢, 还有MATLAB6以后都不支持不能在后台运行, C启动matlab以后
,ml的主菜单会打开,你可以关掉它.但是仍然能够看出来.
具体一点, 比如解线性方程,
1, 用engOpen建立matlab engine ,engSetVisible(ep, 0)可以MATLAB主界面藏起来.
2, 用mxCreateDoubleMatrix 你可以建立一个mxArray, 这个相当于C的double*,
3, 然后用memcpy把你C的double* array, 复制到你建立的mxArray
4, 用engPutVariable, 把你建立的mxArray对应到你在MATLAB里面的使用的变量名
5, 用engEvalString,调用你在MATLAB里面的命令.
6, 用engGetVariable把你在MATLAB计算的结果重新设回到C side的 mxArray.
7, 再用memcpy,把结果从mxArray, 改成double*
详细阐述太麻烦了. google我给的KEYWORD... 阅读全帖 |
|
s******e 发帖数: 2181 | 3 谢谢解惑,我的问题是这样的,这是一个被我简化后的在matlab环境下运行的C程序。
我想测试我输入的数据是否被正确读入。一个途径是通过把输入参数赋给输出的地址,
来得到结果,看来是正确的。另一个是通过printf把输入数据直接打出来,可是这个打
出来的数字始终为0,无论采用printf("input=%dn", data2[0]); 还是printf("input=
%dn", *data2);都一样。真是见鬼了,那data2这个地址上存的数据到底是什么
#include "mex.h"
#include "gpu/mxGPUArray.h"
#include "cuda.h"
void mexFunction(int nlhs, mxArray *plhs[],
int nrhs, mxArray const *prhs[])
{
double *data1; *data2;
int m,n;
m=mxGetM(prhs[0]);
n=mxGetN(prhs[0]);
plhs[0]=mxCreateDoubl... 阅读全帖 |
|
s******e 发帖数: 2181 | 4 首先我有一些基本的问题想请教大拿,Nvidia的手册里找不到答案,sample code太简
单也太少。
1,多GPU并行的情况下,我要从GPU0拷贝数据到GPU1,使用cudaMemcpy()必须要在当
前选中的GPU1下执行么?还是0和1都可以?
2,我使用了SPMD并行模式,每一个计算机核下挂了一个GPU,照理来说数据都是独立的
,各个GPU内的同名变量其实数据不同且相互不可见,但如果是在unified address
space下呢,这些相同变量名的变量相互冲突吗?
我在matlab环境下用mexfunction编写的cuda,主程序是一个matlab program是一个
SPMD结构,SPMD结构里面调用mexfunction来实现GPU0内的数据传给GPU1,GPU1内的数
据传给GPU2。请高手指点哪里出了问题。MathWorks的技术客服远程登陆到我电脑上
debug两个小时没能解决问题。
spmd(3)
if labindex==1
A=gpuArray(zeros*(1));
elseif labindex==2
... 阅读全帖 |
|
W*W 发帖数: 293 | 5 #include
#include
void func(double y, double x)
{
y = 2.0*x;
return;
}
void mexFunction(
int nlhs, mxArray *plhs[],
int nrhs, const mxArray *prhs[])
{
double y;
double x;
x=mxGetScalar(prhs[0]);
plhs[0]=mxCreateDoubleMatrix(1,1,mxREAL);
y=mxGetScalar(plhs[0]);
func(y,x);
return;
}
程序可以编译,但在matlab里运行 y=f(x)总是得到y=0。
如果把mxGetScalar改成mxGetPr,所有都用指针程序是对的。
请教这是什么原因? |
|
t*****g 发帖数: 12 | 6 go to mathworks.com and look for matlab API and matlab compiler
you can get some information.
Generally, .mex file is generated from C/Fortran code, which uses matlab
API to communicate with matlab. .mex file is considered as a kind of
matlab function, just like .m file started with "function" command.
I don't know about Fortran, but C code should begin with following
declarations:
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
If you want to generate code directly |
|
h****d 发帖数: 1305 | 7 for small array, u may use
mexPrintf to print out some number in the matlab workspace
for large one, u may save it to a matrix in .mat file which can be viewed in
matlab.
maybe there are better ways out there |
|
h***o 发帖数: 539 | 8 BBS水木清华站∶精华区
发信人: FangQ (木头虫子), 信区: MathTools
标 题: Matlab与C++接口与混合编程讨论小结(六)
发信站: BBS 水木清华站 (Tue Nov 2 22:27:44 1999)
第二章、
第四节、用c编写mex程序[四]
发信人: fasiondog (乱了), 信区: MathTools
标 题: 用c编写mex程序 [part 4] (转信)
发信站: BBS 水木清华站 (Mon Apr 5 12:50:30 1999)
发信人: dodoo (虚怀), 信区: Programming
标 题: 用C编写mex程序 [PART 4]
输入数据是在函数调用之前已经在Matlab里申请了内存的,由于mex函数与Matlab共用同
一个地址空间,因而在prhs[]里传递指针就可以达到参数传递的目的。但是,输出参数
却需要在mex函数内申请到内存空间,才能将指针放在plhs[]中传递出去。由于返回指针
类型必须是mxArray,所以Matlab专门提供了一个函数:mxCreateDoubleMatrix来 |
|
h***o 发帖数: 539 | 9 BBS水木清华站∶精华区
发信人: FangQ (木头虫子), 信区: MathTools
标 题: Matlab与C++接口与混合编程讨论小结(七)
发信站: BBS 水木清华站 (Tue Nov 2 22:28:22 1999)
第二章、
第五节、用c编写mex程序[五]
发信人: fasiondog (乱了), 信区: MathTools
标 题: 用c编写mex程序 (part 5)
发信站: BBS 水木清华站 (Mon Apr 5 12:52:13 1999)
发信人: dodoo (虚怀), 信区: Programming
标 题: 用C编写mex程序 [PART 5]
通过前面两部分的介绍,大家对参数的输入和输出方法应该有了基本的了解。具备了这
些知识,就能够满足一般的编程需要了。但这些程序还有些小的缺陷,以前面介绍的re
由于前面的例程中没有对输入、输出参数的数目及类型进行检查,导致程序的容错性很
#include "mex.h"
void mexFunction(int nlhs, mxArray *plhs[],
int nr |
|