- 浏览: 680945 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (181)
- Matlab (16)
- Java (26)
- autoHotkey (4)
- openCV (1)
- C++ (50)
- PDF-XChange Viewer (2)
- 学术 (11)
- javascript (4)
- linux (11)
- SWT (9)
- latex (7)
- GAE (2)
- windows (6)
- C# (3)
- PS (20)
- JNI (4)
- latex,批处理 (0)
- 批处理 (4)
- Android (5)
- 矩阵论 (1)
- SVM (1)
- 概率图模型 (0)
- Python (12)
- Eigen (5)
- 编程题 (1)
- MKL (1)
- 神经网络 (9)
- 最优化 (2)
- 摄影 (1)
- PPT (0)
- After Effects (3)
- CUDA (3)
- caffe (0)
- MXNet (2)
- svn (1)
- R (0)
- 虚拟机 (0)
- tensorflow (7)
- theano (1)
- Keras (1)
- vim (1)
- xgboost (1)
- spark (6)
- eclipse (2)
- word2vec (0)
- hadoop (1)
- dmlc (1)
- git (0)
最新评论
-
jeffersonz:
请问大神,这个插件记录下来的脚本为什么不能再Extendscr ...
PhotoShop - 记录PS的所有操作为JavaScript代码 -
cherishLC:
Andy__Zou 写道cherishLC 写道Andy__Z ...
Eigen的编译选项;MKL的使用 -
Andy__Zou:
cherishLC 写道Andy__Zou 写道cherish ...
Eigen的编译选项;MKL的使用 -
cherishLC:
Andy__Zou 写道cherishLC 写道Andy__Z ...
Eigen的编译选项;MKL的使用 -
Andy__Zou:
cherishLC 写道Andy__Zou 写道 您好,您的工 ...
Eigen的编译选项;MKL的使用
在微博中看到有人分享了篇文章“为什么转置512×512矩阵,会比513×513矩阵慢很多?”http://note.sdo.com/u/1557869253/n/sSPb5~k5HYUMLX0mU000QX
没仔细看原理,但与缓存的命中率有关。
今天写矩阵翻转的代码,突然想到这个问题。测了一下速度:
结论:新建一片内存,顺序访问其中的元素,速度比较快!!!在翻转中能快个两倍左右!!!(注:我的矩阵是行优先存储的)
有关代码如下(代码不完全):
测试用的代码如下(代码不完全):
测试用结果如下:
没仔细看原理,但与缓存的命中率有关。
今天写矩阵翻转的代码,突然想到这个问题。测了一下速度:
结论:新建一片内存,顺序访问其中的元素,速度比较快!!!在翻转中能快个两倍左右!!!(注:我的矩阵是行优先存储的)
有关代码如下(代码不完全):
//水平翻转矩阵中的元素 void flipHorizontally(){ T tmp; //int halfHeight=height_row/2; int halfWidth=width_col/2; for (int r=0; r<height_row; r++) { for (int c=0; c<halfWidth; c++) { int c2=width_col-1-c; tmp=getValue(r,c); this->operator()(r,c)=this->operator()(r,c2); this->operator()(r,c2)=tmp; } } } //水平翻转矩阵中的元素 Matrix flipHorizontallyNewMatrix(){ Matrix flipped(height_row,width_col); int halfWidth=width_col/2; for (int r=0; r<height_row; r++) { for (int c=0; c<=halfWidth; c++) { int c2=width_col-1-c; flipped(r,c)=this->operator()(r,c2); flipped(r,c2)=this->operator()(r,c); } } return flipped; } //水平翻转矩阵中的元素 Matrix flipHorizontallyNewMatrix2(){ Matrix flipped(height_row,width_col); for (int r=0; r<height_row; r++) { for (int c=0; c<width_col; c++) { int c2=width_col-1-c; flipped(r,c)=this->operator()(r,c2); } } return flipped; } //垂直翻转矩阵中的元素 Matrix flipVerticallyNewMatrix(){ Matrix flipped(height_row,width_col); int halfHeight=height_row/2; for (int r=0; r<=halfHeight; r++) { for (int c=0; c<width_col; c++) { int r2=height_row-1-r; flipped(r,c)=this->operator()(r2,c); flipped(r2,c)=this->operator()(r,c); } } return flipped; } //垂直翻转矩阵中的元素 Matrix flipVerticallyNewMatrix2(){ Matrix flipped(height_row,width_col); for (int r=0; r<height_row; r++) { for (int c=0; c<width_col; c++) { int r2=height_row-1-r; flipped(r,c)=this->operator()(r2,c); //flipped(r2,c)=this->operator()(r,c); } } return flipped; } //垂直翻转矩阵中的元素 void flipVertically(){ T tmp; int halfHeight=height_row/2; for (int r=0; r<halfHeight; r++) { for (int c=0; c<width_col; c++) { int r2=height_row-1-r; tmp=getValue(r,c); this->operator()(r,c)=this->operator()(r2,c); this->operator()(r2,c)=tmp; } } }
测试用的代码如下(代码不完全):
for (int n=10; n<1000; n+=33) { MatrixInt m(n,n); for (int i=0; i<m.getNumEl(); i++) { m(i)=i; } int testNum=10000/n*10000/n; Timer timer; for(int i=0; i<testNum; i++) m.flipVerticallyNewMatrix(); long tv1=timer.getElapsedTimeAndRestart(); for(int i=0; i<testNum; i++) m.flipVerticallyNewMatrix2(); long tv2=timer.getElapsedTimeAndRestart(); for(int i=0; i<testNum; i++) m.flipVertically(); long tvInplace=timer.getElapsedTimeAndRestart(); for(int i=0; i<testNum; i++) m.flipHorizontallyNewMatrix(); long th1=timer.getElapsedTimeAndRestart(); for(int i=0; i<testNum; i++) m.flipHorizontallyNewMatrix2(); long th2=timer.getElapsedTimeAndRestart(); for(int i=0; i<testNum; i++) m.flipHorizontally(); long thInplace=timer.getElapsedTimeAndRestart(); cout<<"矩阵大小: "<<m.height_row<<"行*"<<m.width_col<<"列"<<endl; cout<<"水平翻转耗时:方法1: "<<th1<<";\t\t方法2: "<<th2<<";\t\t原位翻转: "<<thInplace<<endl; cout<<"垂直翻转耗时:方法1: "<<tv1<<";\t\t方法2: "<<tv2<<";\t\t原位翻转: "<<tvInplace<<endl; cout<<endl; }
测试用结果如下:
矩阵大小: 10行*10列 水平翻转耗时:方法1: 566; 方法2: 340; 原位翻转: 410 垂直翻转耗时:方法1: 652; 方法2: 342; 原位翻转: 450 矩阵大小: 43行*43列 水平翻转耗时:方法1: 364; 方法2: 180; 原位翻转: 390 垂直翻转耗时:方法1: 425; 方法2: 178; 原位翻转: 434 矩阵大小: 76行*76列 水平翻转耗时:方法1: 361; 方法2: 188; 原位翻转: 402 垂直翻转耗时:方法1: 433; 方法2: 183; 原位翻转: 445 矩阵大小: 109行*109列 水平翻转耗时:方法1: 360; 方法2: 180; 原位翻转: 397 垂直翻转耗时:方法1: 411; 方法2: 174; 原位翻转: 440 矩阵大小: 142行*142列 水平翻转耗时:方法1: 357; 方法2: 176; 原位翻转: 406 垂直翻转耗时:方法1: 413; 方法2: 173; 原位翻转: 456 矩阵大小: 175行*175列 水平翻转耗时:方法1: 353; 方法2: 173; 原位翻转: 403 垂直翻转耗时:方法1: 412; 方法2: 171; 原位翻转: 452 矩阵大小: 208行*208列 水平翻转耗时:方法1: 359; 方法2: 176; 原位翻转: 408 垂直翻转耗时:方法1: 417; 方法2: 173; 原位翻转: 455 矩阵大小: 241行*241列 水平翻转耗时:方法1: 349; 方法2: 171; 原位翻转: 400 垂直翻转耗时:方法1: 411; 方法2: 170; 原位翻转: 449 矩阵大小: 274行*274列 水平翻转耗时:方法1: 346; 方法2: 173; 原位翻转: 400 垂直翻转耗时:方法1: 406; 方法2: 167; 原位翻转: 448 矩阵大小: 307行*307列 水平翻转耗时:方法1: 343; 方法2: 170; 原位翻转: 400 垂直翻转耗时:方法1: 402; 方法2: 168; 原位翻转: 443 矩阵大小: 340行*340列 水平翻转耗时:方法1: 360; 方法2: 174; 原位翻转: 420 垂直翻转耗时:方法1: 410; 方法2: 169; 原位翻转: 447 矩阵大小: 373行*373列 水平翻转耗时:方法1: 460; 方法2: 259; 原位翻转: 398 垂直翻转耗时:方法1: 512; 方法2: 261; 原位翻转: 443 矩阵大小: 406行*406列 水平翻转耗时:方法1: 456; 方法2: 262; 原位翻转: 403 垂直翻转耗时:方法1: 516; 方法2: 255; 原位翻转: 452 矩阵大小: 439行*439列 水平翻转耗时:方法1: 450; 方法2: 248; 原位翻转: 401 垂直翻转耗时:方法1: 500; 方法2: 249; 原位翻转: 445 矩阵大小: 472行*472列 水平翻转耗时:方法1: 453; 方法2: 269; 原位翻转: 402 垂直翻转耗时:方法1: 513; 方法2: 265; 原位翻转: 450 矩阵大小: 505行*505列 水平翻转耗时:方法1: 433; 方法2: 252; 原位翻转: 390 垂直翻转耗时:方法1: 489; 方法2: 249; 原位翻转: 436 矩阵大小: 538行*538列 水平翻转耗时:方法1: 440; 方法2: 247; 原位翻转: 398 垂直翻转耗时:方法1: 497; 方法2: 247; 原位翻转: 444 矩阵大小: 571行*571列 水平翻转耗时:方法1: 443; 方法2: 256; 原位翻转: 397 垂直翻转耗时:方法1: 496; 方法2: 248; 原位翻转: 440 矩阵大小: 604行*604列 水平翻转耗时:方法1: 439; 方法2: 252; 原位翻转: 402 垂直翻转耗时:方法1: 494; 方法2: 248; 原位翻转: 438 矩阵大小: 637行*637列 水平翻转耗时:方法1: 436; 方法2: 244; 原位翻转: 397 垂直翻转耗时:方法1: 488; 方法2: 242; 原位翻转: 432 矩阵大小: 670行*670列 水平翻转耗时:方法1: 427; 方法2: 243; 原位翻转: 384 垂直翻转耗时:方法1: 483; 方法2: 238; 原位翻转: 427 矩阵大小: 703行*703列 水平翻转耗时:方法1: 449; 方法2: 257; 原位翻转: 403 垂直翻转耗时:方法1: 527; 方法2: 260; 原位翻转: 459 矩阵大小: 736行*736列 水平翻转耗时:方法1: 432; 方法2: 246; 原位翻转: 395 垂直翻转耗时:方法1: 493; 方法2: 245; 原位翻转: 440 矩阵大小: 769行*769列 水平翻转耗时:方法1: 452; 方法2: 258; 原位翻转: 409 垂直翻转耗时:方法1: 518; 方法2: 256; 原位翻转: 458 矩阵大小: 802行*802列 水平翻转耗时:方法1: 434; 方法2: 248; 原位翻转: 392 垂直翻转耗时:方法1: 492; 方法2: 248; 原位翻转: 433 矩阵大小: 835行*835列 水平翻转耗时:方法1: 415; 方法2: 240; 原位翻转: 372 垂直翻转耗时:方法1: 466; 方法2: 234; 原位翻转: 416 矩阵大小: 868行*868列 水平翻转耗时:方法1: 427; 方法2: 247; 原位翻转: 388 垂直翻转耗时:方法1: 478; 方法2: 239; 原位翻转: 433 矩阵大小: 901行*901列 水平翻转耗时:方法1: 448; 方法2: 262; 原位翻转: 400 垂直翻转耗时:方法1: 499; 方法2: 251; 原位翻转: 449 矩阵大小: 934行*934列 水平翻转耗时:方法1: 422; 方法2: 248; 原位翻转: 380 垂直翻转耗时:方法1: 477; 方法2: 237; 原位翻转: 426 矩阵大小: 967行*967列 水平翻转耗时:方法1: 436; 方法2: 257; 原位翻转: 388 垂直翻转耗时:方法1: 493; 方法2: 248; 原位翻转: 438
发表评论
-
C++函数中的静态变量
2019-07-19 11:22 770在C++中,可以在成员函数中使用静态变量,从而间接达到在hpp ... -
tensorflow 静态编译笔记 -- linux系统
2018-11-05 14:26 0注: 1、编译tensorflow静态库 很简单,参见: h ... -
gperftools笔记
2018-06-27 14:30 0export LD_LIBRARY_PATH=LD_LIBR ... -
dmlc分布式线性模型编译笔记
2018-06-06 10:37 21131、使用第三方修改后的wormhole工程 原始工程wor ... -
C++中读取控制台输出,并将文件指针FILE*转换为istream
2017-11-27 15:03 1720解决的问题: 1、通过执行系统的bash命令后,获取其输出( ... -
c++中使用boost库在共享内存中存储map
2017-11-09 11:37 5143boost库中的interprocess包可以在共享内存中创建 ... -
近似最近邻算法库FLANN
2017-04-25 18:45 0FLANN库是计算近似最近邻的库, 问题定义如下: 给定距离函 ... -
C++杂记-- 重定向std::cout等
2017-04-18 17:28 18991、屏蔽std::cout 参见:http://stackov ... -
CMake指定目标代码的平台(win32,x64)
2016-06-03 20:54 11550主要参考自:http://blog.c ... -
windows 10下安装GPU版MXNet
2016-06-03 21:28 8535上回说到编译CPU版的MXNet: http://cheris ... -
windows下安装CPU版mxnet
2016-05-23 23:14 17500MXnet (mix net)类似Caffe,Tensorfl ... -
Linux C++编译及 静态/动态 链接库 笔记
2015-12-20 19:49 59971、C++文件的编译 g++参 ... -
Linux (Ubuntu) 下 Eclipse C++ 环境配置
2015-12-08 21:49 19241、安装JDK 参见http://blog.csdn.net/ ... -
Photoshop插件开发-filter
2015-10-11 22:53 3322初学,,感觉PS插件的文档很烂,,教程也很少,,也就这么简单学 ... -
使Visual Assist X支持CUDA的.cu文件的代码提示
2015-07-17 00:05 2244现在安装CUDA很方便了,直接支持Visual Studio。 ... -
CUDA程序block和thread超出硬件允许值时的异常
2015-07-13 11:32 3697调用CUDA的核函数时指定block 和 thread大小,该 ... -
创建及使用DLL
2014-09-29 15:22 1203此篇仅作简要的记录,作为备忘。 更为详细的可以参考:http: ... -
matlab的mexFunction中使用std::cout(部分转载)
2014-09-27 15:37 2129在matlab、C++混合编程的时候,可能会用到之前的代码。代 ... -
Eigen库:那些年我们一起经历的bug
2014-09-24 18:39 17811、使用auto声明新变量 ... -
C++:无虚函数的类作为有虚函数类的父类时产生Expression:_BLOCK_TYPE_IS_VALID(pHead->nBlockUse)
2014-09-24 09:48 1907调程序时忘了为啥,写了一小段测试程序,再简单不过,结果跑出了E ...
相关推荐
测速工具测速工具测速工具测速工具测速工具测速工具测速工具测速工具测速工具测速工具
1.二维动态数组,编程实现N*N矩阵乘法,我用的随机数赋值,为的是测速方便,你也可以稍微改改手动赋值。 2.测试6种循环嵌套方式:yix,iyx,yxi,xyi,xiy,ixy.体现“运算时间vs矩阵阶数N”的变化趋势
eNetTest 网管内网单机测速工具eNetTest 网管内网单机测速工具eNetTest 网管内网单机测速工具eNetTest 网管内网单机测速工具eNetTest 网管内网单机测速工具eNetTest 网管内网单机测速工具eNetTest 网管内网单机测速...
测速 程序 测速码表 测速是工农业生产中经常遇到的问题,学会使用单片机技术设计测速仪表具有很重要的意义。要测速,首先要解决是采样的问题。在使用模拟技术制作测速表时,常用测速发电机的方法,即将测速发电机的...
一个关于雷达测速的MATLAB仿真程序,FIR带通滤波器matlab 测速仪。
自动化专业课程实验报告 电机系统仿真设计 使用MT法测速 在M法测速中,随着电动机的转速的降低,计数值M1减少,测速装置的分辨能力变差,测速误差增大。如果速度过低,M1将小于1,测速装置便不能正常工作。T法测速...
自行车测速仿真,使用protues进行仿真验证
ROS测速.rar ROS测速.rar ROS测速.rar ROS测速.rar ROS测速.rar ROS测速.rar ROS测速.rar ROS测速.rar
支持多线程的CPU测速软件,pi运算。wPrime(多线程测试,win10要超级管理员执行)
STIV(时空图像测速)的Python河面测速
视频测速 车辆测速 目标跟踪 参考参考 。。。。。。。。。。。。。。。。。。。。
运用霍尔原件进行测速进而传回单片机的程序。
脉冲多普勒测距测速,能实现测速以及测距,亲测好用
测速工具,就是说可以测速,从局端到电脑的速度
单片机实例直流电机测速单片机实例直流电机测速单片机实例直流电机测速单片机实例直流电机测速单片机实例直流电机测速
360网络测速单文件版,只有几个文件,小巧玲珑.
车载激光雷达测距测速原理,陈雷,岳迎春,本文在分析了激光雷达测距、测速原理的基础上,推导了连续激光脉冲数字测距、多普勒频移测速的方法,给出车载激光雷达基本原理图
网页打字测速。网页打字测速。网页打字测速。网页打字测速。网页打字测速。网页打字测速。JAVA JAVA JAVA JAVA JAVA JAVA JAVA
Throughput_Test(测速软件).zip局域网测速工具
电信官方出的宽带测速绿色软件304kb,非常好用。当你报装宽带说什么2m,4m,10m都是口头说说,实际宽带是多少请用这个软件来试试。绿色软件无需安装! 新增12个测速点,覆盖我省21个地区,请选择您所在地区进行本地...