



全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
利用MEX文件在Matlab中创建并行应用# include mex.h# include math.h# include # define _MAX_THREAD 100/*判断线程是否执行完毕*/static volatile int WaitForThread_MAX_THREAD;/*判断各线程执行情况*/static volatile double percentage_MAX_THREAD;/*保存程序执行信息*/static int nThreadNum=0;static int isOpen=0;HANDLE * ThreadLIST=NULL;double * pOut=NULL;static int MM=0;static int NN=0;/*线程参数结构体*/typedef struct _ThreadArg int N;/输入阵列元素个数 double * pr1;/输入阵列1 double * pr2;/输入阵列2 double * pOut;/计算结果 int threadld;/线程编号threadArg;unsigned _stdcall threadFunc(threadArg * pArg) int id; int kk-0; int N=0; double * pr1; double * pr2; double * pOut; /分配数据 N=(int)(pArg-N/nThreadNum)+; nb=id*N; ne=(id+1)*N-; if(ne=pArg-N) ne=pArg-N-; for(kk=nb;kk=ne;kk+ + ) pOutkk=pr1kk+pr2kk;/完成计算 percentageid=(kk-nb)*/(ne-nb); WaitForThreadid=0; return 0 void mexFunction(int nlhs,mxArray * plhs) if(nrhs= =1)/关闭线程、查询状态和返回结果 int flag; flag=mxGetScalar(prhs0); if(flag=1)/关闭 int kk; int isOK; for(kk=0;kknThreadNum;kk+ +) isOK=TerminateThread(ThreadListkk,0); CloseHandle(Threadkk); if(isOK) mexPrintf(线程 %d 成功结束n,kk); else mexPrint(线程 %d 成功失败n,kk); if(pOut) free(pOut); pOut=NULL; isOpen=0;else if(flag= =2)/查询状态 int kk=0; for(kk=0;kknThreadNum;kk+ +) mexPrintf(线程 %d,是否等候:%s,状态%d%n, WaitForThreadkk?(是):(否), (int)(precentagekk*100); else/获取结果 int flag=1; int kk; for(kk=0;kknThreadNum;kk+ +) flag=flag&WaitForThreadkk; if(!flag) plhs0=mxCreateDoubleMatrix(MM,NN,mxREAL); memcpy(mxGetPr(plhs0),pOut,MM*NN*sizeof(double); else plhs0=mxCreateDoubleMatrix(0,0,mxREAL); else/启动 threadArg * pArg; int kk; if(nrhs= =2) nThreadNum=4 nThreadNum=mxGetScalar(prhsnrhs-1); if(nThreadNum=0) return; ThreadList=(HANDLE* )malloc(nThreadNum* sizeof(HANDLE); pARG=(ThreadArg*)malloc(nTreadNum*sizeof(threadArg); if(pOut! =NULL) Free(pOut); pOut=NULL; /*初始化参数*/ pOut=(double*)malloc( sizeof(double)*mxGetM(prh0)*mxGetN(prhs0); for(kk=0;kknThreadNum;kk+ +) pArgkk.N=mxGetM(prhs0*mxGetN(prhs0); pArgkk.pr1=mxGetPr(prhs0); pArgkk.pr2=mxGetPr(prhs1); pArgkk.pOut=pOut; pArgkk.threadld=kk; WaitForThreadkk=1; percentagekk=0; /*保存输入数值列阵大小。假定输入前两个参数维数和各维大小相同*/ MM=mxGetM(prhs0); NN=mxGetN(prhs0); /*启动多线程*/ for(kk=0;kknThr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 工业环保技术的发展及影响
- 工业节能减排的技术路径
- 工作技能精进高效办公、文件管理等具体实 用技能培训
- 工业节能技术创新与应用
- 工业风老房装修的设计思路与实践
- 工作场所改善与企业生产力提升
- 工作场所的多元化与包容性培养
- 工程图纸解析中的逻辑与数学知识
- 工作安全与劳动保护培训
- 工程机械的设计与维护技巧
- 2025年江苏省高考化学试卷真题
- 室内妇科诊室管理制度
- 2025年现代图书馆管理与信息服务考试试题及答案
- 2025年高等教育心理学考试试卷及答案
- 2025年河北省中考二模道德与法治试题(启光卷含答案)
- 材料力学知到智慧树期末考试答案题库2025年辽宁工程技术大学
- 敦煌文化介绍课件
- 2025贵州中考:历史必考知识点
- 肝硬化门静脉高压症食管、胃底静脉曲张破裂出血诊治专家共识2025解读
- 2025年重症医学科ICU护理标准化建设计划
- 公司挂名法人免责协议书
评论
0/150
提交评论