测试矩阵连续运算的速度问题的代码
2016-09-22 11:15
671 查看
float r = 0.0f; RNG rng(1); double t1 = (double)getTickCount(); for (size_t i = 0; i < 10000; i++) { Mat a, b, c; a = Mat::ones(512, 512, CV_32FC1); a = a * rng.uniform(0.0f, 100.0f); b = Mat::ones(512, 512, CV_32FC1); b = b * rng.uniform(0.0f, 100.0f); c = Mat::ones(512, 512, CV_32FC1); c = c * rng.uniform(0.0f, 100.0f); Mat d = (a.mul(b) + c)*1000.f; int x = 511 * rng.uniform(0.0f, 1.0f); int y = 511 * rng.uniform(0.0f, 1.0f); r = r + d.at<float>(x, y); } t1 = (double)getTickCount() - t1; std::cout << "compute time :" << t1*1000.0 / cv::getTickFrequency() << " ms \n"; cout << r << endl; r = 0.0f; double t2 = (double)getTickCount(); for (size_t i = 0; i < 10000; i++) { cv::Mat a, b, c; a = Mat::ones(512, 512, CV_32FC1); a = a * rng.uniform(0.0f, 100.0f); b = Mat::ones(512, 512, CV_32FC1); b = b * rng.uniform(0.0f, 100.0f); c = Mat::ones(512, 512, CV_32FC1); c = c * rng.uniform(0.0f, 100.0f); Mat d = a.mul(b); d = d + c; d = d*1000.f; int x = 511 * rng.uniform(0.0f, 1.0f); int y = 511 * rng.uniform(0.0f, 1.0f); r = r + d.at<float>(x, y); } t2 = (double)getTickCount() - t2; std::cout << "compute time :" << t2*1000.0 / cv::getTickFrequency() << " ms \n"; cout << r << endl; r = 0.0f; double t3 = (double)getTickCount(); for (size_t i = 0; i < 10000; i++) { cv::Mat a, b, c; a = Mat::ones(512, 512, CV_32FC1); a = a * rng.uniform(0.0f, 100.0f); b = Mat::ones(512, 512, CV_32FC1); b = b * rng.uniform(0.0f, 100.0f); c = Mat::ones(512, 512, CV_32FC1); c = c * rng.uniform(0.0f, 100.0f); Mat d = a.mul(b); d += c; d *= 1000.f; int x = 511 * rng.uniform(0.0f, 1.0f); int y = 511 * rng.uniform(0.0f, 1.0f); r = r + d.at<float>(x, y); } t3 = (double)getTickCount() - t3; std::cout << "compute time :" << t3*1000.0 / cv::getTickFrequency() << " ms \n"; cout << r << endl;
上面的计算复杂度是一样的。
实验证明,第二种方式最快,矩阵表达式计算要尽量展开,并且不要使用*=或+=等简化编程。
相关文章推荐
- 通过反射机制获取类集合的所有属性值
- 纳秒级延时实例。
- Java IO之File类
- ASP.NET MVC 4 RC的JS/CSS打包压缩功能 (转载)
- 【读书笔记】Java核心技术-基础知识-反射
- Java对象内存存储,引用传递,值传递详细图解
- PHP 源码加密 (zendGuard和ionCube)
- 第四周 项目3 -2
- Php5.5新特性 Generators详解
- python挑战之level 12
- PHP使用星号隐藏用户名,手机和邮箱的实现方法
- shiro简单理解及整合springMVC
- C++ 删除文件或目录
- C++类与static
- c#去除图像噪音
- C++ 拷贝文件
- PyQt QCombobox设置行高
- ASP.NET的运行原理与运行机制
- Java main方法
- VBA 操作 Excel 数据筛查