MATLAB 板


LINE

※ 引述《mp19990920 (郝渴连)》之铭言: : 法一:去除你原本code中多余的运算 : (1)numel多余 : (2)i=i+1多余(但影响极小) : (3)没必要重设整个column : X = [1:n]'; : Y = eye(n); : for i = 2:n : Y(i:n, i) = i:n; : end : p.s. 在我的电脑中n=1000跑1000次平均时间 : 原本: 0.06610 sec : 加速: 0.02339 sec : 你的电脑可真快呢!!! : 法二:用mex来改写 : 难度高,debug麻烦,不太建议 我尝试去写了mex跟cuda (最近刚学matlab 拿来当练习) *******mat_exd.cpp******* #include "mex.h" void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { int colNum = (int) mxGetN(prhs[0]); double *X, *Y; X=mxGetPr(prhs[0]); plhs[0] = mxCreateDoubleMatrix(colNum, colNum, mxREAL); Y = mxGetPr(plhs[0]); for (int i=0; i<colNum; i++) { for (int j=0; j<colNum; j++) { if(i>=j) Y[j*colNum+i]=X[i-j]; } } } *******mat_exd.cu******** __global__ void kernel ( const double *vec, const int *N, double *mat ) { int tid = threadIdx.x + blockIdx.x * blockDim.x; while (tid % *N < *N & tid / *N < *N){ if (tid % *N - tid / *N>=0) mat[tid]=vec[tid % *N - tid / *N]; tid += blockDim.x * gridDim.x; } } ******main.m************ %% original N = 10000; X = 1:N; Y = eye(N); for i = 1:N Y(i:N, i) = X(1:(N-i+1)); end %% mex part % compile mat_exd.cpp by mex mat_exd.cpp Y2=mat_exd(X); %% CUDA part reset(gpuDevice()); N = 10000; X = 1:N; kern = parallel.gpu.CUDAKernel('mat_exd_2.ptx', 'mat_exd_2.cu'); tic kern.ThreadBlockSize = 1024; kern.GridSize = ceil(N/1024); o = feval(kern, X, N, zeros(N)); Y3 = gather(o); toc **********Result********** original part: 0.216 secs mex part: 0.610 secs CUDA part: 0.284 secs 我没有看到m大说的mex比较快QQ.... 请问我是哪里写得不好吗.... PS 1: 後来测试一下不同的N下,mex的速度有差,N<1500时,mex的速度都快很多 N超过1500以後,就越来越慢了...我觉得应该是两层回圈的关系,可是那里我不会改... PS 2: CUDA有记忆体限制。 --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.164.166.108
1F:推 sunev:i 回圈摆内侧可能会好一点。 09/08 07:04
2F:推 sunev:而且 j<colNum可以改成 j<=i ,这样连if也可以省掉 09/08 07:07
改完之後快0.03秒... ※ 编辑: celestialgod 来自: 218.164.166.108 (09/08 07:31)
3F:→ mp19990920:我说的是纯mex非加上cuda(我的笔电不能玩cuda) 09/10 21:47







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:BabyMother站内搜寻

TOP