Jarod 的学习笔记

统计

留言簿(1)

阅读排行榜

评论排行榜

又是未完成的东西

原本打算给实验室的朋友们介绍一下我最新的研究结果,如何高效地实现矩阵运算。结果今晚的学长打击了我,他们编程不多。我说的这些,他们能听懂我已经做好的PPT的一半就不错了。还没完成的部分由于有范型的东西,估计他们就完全不明白了。编程语言也讲个基础的,C++非一日两日就能熟悉的。唉。叹惜我研究半天的东西没有人懂啊~还好,放在我的blog里,与更多的朋友共享吧。

以下PPT讲述了一般情况下,编写矩阵运算遇到的问题,特别是性能问题。主要举例说明了实现加法运算会产生的问题,如以下的代码,实际上是非常影响性能的。详细的请看PPT。

Matrix operator  +  ( const  Matrix  &  a,  const  Matrix  &  b)  {
   
int  M  =  a.getM(), N  =  a.getN();
   Matrix result(M,N);
   
for  ( int  i = 0 ;i < M;i ++ {
      
for  ( int  j = 0 ;j < N;j ++ {
          result(i,j) 
=  A(i,j)  +  B(i,j);
      }

   }

   
return  result;
}



矩阵运算PPT

posted on 2007-03-27 00:14 Jarod-Yin 阅读(932) 评论(13)  编辑 收藏 引用

评论

# re: 又是未完成的东西 2007-03-27 08:45 万连文

你不介绍一下功能 解决问题,谁知道是那方面。  回复  更多评论   

# re: 又是未完成的东西 2007-03-27 09:47 Rocky

如果要讲究效率的话,还是用你所说的原始的方法,然后把整个算法封装起来的好。如果打算用C++,从出发点上就是要放弃一定的效率的,还是用运算符重载增加可读性比较好一点。建议去读一读STL、boost等类库源代码,学习一下如何既照顾效率,又照顾封装之后的可用性。  回复  更多评论   

# re: 又是未完成的东西[未登录] 2007-03-27 09:58 炙热的太阳

太过于古板,你给他们讲个故事,做个例子,生动一点,肯定有人会听得  回复  更多评论   

# re: 又是未完成的东西 2007-03-27 10:34 王一伟

hehe 不错,可以做一些测试  回复  更多评论   

# re: 又是未完成的东西 2007-03-27 10:35 沐枫_

怎么只有个开头。  回复  更多评论   

# re: 又是未完成的东西 2007-03-27 10:37 沐枫_

再说了,上面的代码未必很影响性能,如果编译器好的话。  回复  更多评论   

# re: 又是未完成的东西 2007-03-27 12:15 chenger

还是原始的办法好
搞科学计算的,就不要太讲究什么封装,用类都显得多余
其实更重要的问题可能是比较底层的,比如缓存命中等等。至于用模板技术,已经有bliz++(是不是叫这个名?)等库在先,不如去研究研究。其实如果用模板,可读性更差,除非对template了解很深入,否则几乎看不懂  回复  更多评论   

# re: 又是未完成的东西 2007-03-27 12:59 Jarod-Yin

谢谢各位的关注。
万连文:根据你的建议,我多写了一些说明
rockey:解决方法当然也是用了重载。
王一伟 :我确实做过反汇编了
沐枫_ :我不知道什么编译器会做这些优化,你能否介绍一下?
chenger:就是bliz,我就是学习bliz得到的结果  回复  更多评论   

# re: 又是未完成的东西[未登录] 2007-03-27 13:46 cc

[url=http://guises.eguo.com/user1/uutv8806/archives/2007/26.html]Jewelry Wholesale[/url]  回复  更多评论   

# re: 又是未完成的东西[未登录] 2007-03-27 13:46 cc

<a href=http://www.chengan.cn/my/vip/422/archives/2007/743.html>Jewelry Wholesale</a>  回复  更多评论   

# re: 又是未完成的东西[未登录] 2007-03-27 13:46 cc

wholesale jewelry jewelry jewelry Making Handcrafted jewelry
wholesale silver jewelry
Jewelry Wholesa, China Jewelry Wholesale, pearl jewelry wholesale, wholesale pearl jewelry,
pearl jewelry
  回复  更多评论   

# re: 又是未完成的东西 2007-03-29 14:01 skipper

more effective c++里已经提出了lazy evaluation的思想。作者没有解决怎么实现的问题。

而且看到作者ppt里的代码,效率好像并不是很高啊。  回复  更多评论   

# re: 又是未完成的东西 2007-09-15 22:49 蚂蚁终结者

看了一下ppt的代码,如skipper所说,效率并不高,先不说lazy evaluation。看看Metrix本身的设计:

copy construct 其实没必要2层循环,也没必要用operator()来存取元素:
这样写效率肯定不一样
Metrix::Metrix(const Metrix& a) {
M = a.M;
N = a.N;
int size = M * N;
element = new double[size];
for (int i = 0; i < size ; ++i)
element[i] = a.element[i];
}
当然了,上面的还可以再优化,用memcpy会更快:
Metrix::Metrix(const Metrix& a) {
//...
memcpy(element, a.element, size * sizeof(double));
}
copy assignment operator以及operator+也一样可以优化...
不多说了呵呵  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理