python和matlab矩阵运算效率_如何写出比 MATLAB 更快的矩阵运算程序?
偏个题。
说到这个想起之前朋友和我说到他最近在上一个课。
那个课上,教授要求他们写Cache friendly code。
尤其像矩阵这种很大块的东西,在运算时,会导致cache根本无法完全装下需要使用的数据。
此刻,如果程序没有设计得很有技巧,不断地刷新cache,会需要浪费大量的时间。
所以,他们教了好几种方法去计算矩阵,让整个计算过程中尽量减少cache的重新载入:
以下是引用朋友给我的邮件,作者是@Tian Tan :
先给你说个好玩的。这是我上的一门课的内容,叫high performance computing
这周在超级计算机上做了一个实验,
实验内容是想尽办法优化很小一段代码,比如矩阵乘法。
先说说cache的特点。
当访问内存中一个element的时候,
cpu会把那个element放到cache里面,
同时还会把它临近的elements放进cache。
衡量CPU快慢的一个标准是MFLOPS, 全称为millions of floating point operations per second. 实验的宗旨是写cache friendly code. 直接上例子吧。
A, B, C都是浮点数矩阵
for (i=0; i
for (j=0; j
for (k=0; k
C[i][j] += A[i][k]*B[k][j];
这是个很简单的矩阵乘法算法。但是这么写效率是不高的,
原因在于当N很大的时候,比如2048, 4096,会产生cache conflict。要解释这个术语比较麻烦,
想知道的话去看computer system: a programmer's perspective那本书的第六章。
但是矩阵乘法有别的写法。比如
for (i=0; i
for (k=0; k
for (j=0; j
C[i][j] += A[i][k]*B[k][j];
这种写法交换了k和j的位置,效率应该会比前面那个高些。(
术语是loop permutation)
还有的写法叫loop tiling,
tiling的实质是将大矩阵的乘法变成小的分块矩阵的乘法。
就用上一个例子吧。
for(it=0; it
for(jt=0; jt
for(kt=0; kt
for(i=it; i
for(j=jt; j
for(k=kt; k
C[i][j] += A[i][k]*B[k][j];
其中的T叫tiling size,能整除N。
这样先算小矩阵的话,cache 就能装下参与运算的elements, 对速度提升很大。
在实验中有一道题,
经过优化之后把运行时间从49秒降到13秒了。
矩阵乘法只是最简单例子,不同的code优化方式各异,
但是基本思想一样。
另外,正如上面说的。
使用针对你自己的CPU的编译器,编译器有可能能够识别到你的功能,做出相应的优化。
python和matlab矩阵运算效率_如何写出比 MATLAB 更快的矩阵运算程序?相关推荐
- python注销一段代码_请写出一段Python代码实现删除一个list里面的重复元素?
方法1:使用set函数 s=set(list),然后再list(s) 方法2:append 1 defdelList(L):2 L1 =[]3 for i inL:4 if i not inL1:5 ...
- python代码怎么写出色_如何写出更具有Python风格的代码,五分钟教会你!
我们都喜欢 Python,因为它让编程和理解变的更为简单.但是一不小心,我们就会忽略规则,以非 Pythonic 方式编写一堆垃圾代码,从而浪费 Python 这个出色的语言赋予我们的优雅.Pytho ...
- python怎么写出来的_如何写出优雅又地道的Python代码?【转载】
在Python社区文化的浇灌下,演化出了一种独特的代码风格,去指导如何正确地使用Python,这就是常说的pythonic.一般说地道(idiomatic)的python代码,就是指这份代码很pyth ...
- python如何写代码_如何写出优雅的Python代码?
有时候你会看到很Cool的Python代码,你惊讶于它的简洁,它的优雅,你不由自主地赞叹:竟然还能这样写.其实,这些优雅的代码都要归功于Python的特性,只要你能掌握这些Pythonic的技巧,你一 ...
- python中如何调用函数_我写了一个函数,如何在python中调用
匿名用户 1级 2015-03-06 回答 Python的特色简单 Python是一种代表简单主义思想的语言.阅读一个良好的Python程序就感觉像是在读英语一样,尽管这个英语的要求非常严格!Pyth ...
- matlab模拟三体运动_如何写出三体的MATLAB程序-理论分析篇
如何写出三体的MATLAB程序-理论分析篇 写在前面 之所以写这个程序,是因为某天晚上无聊,室友正在学习MATLAB,于是提议写一个三体运动的物理模拟程序来练练手.就此,我也写一份该程序来为室友做一个 ...
- matlab模拟三体运动_如何写出三体的MATLAB程序-代码篇
如何写出三体的MATLAB程序-代码篇 写在前面 在上文当中我们已经对三个物体之间的受力进行了分析,也说明了在时间 下的加速度.速度和位移的计算方式. 本篇中将根据上一篇的公式来写出对应的代码,并且详 ...
- Python拾珍:用这些功能写出更简洁、更可读或更高效的代码
本章我会带领大家回顾那些遗漏的地方.Python提供了不少并不是完全必需的功能(不用它们也能写出好代码),但有时候,使用这些功能可以写出更简洁.更可读或者更高效的代码,甚至有时候三者兼得. 19.1 ...
- 几十万的词如何用每页500词分页展示_如何写出一份优秀的应届生简历?
可以确定的是,一份好的简历应当是HR喜欢和认可的简历,因为决定你的简历通过与不通过的是HR. 那么,什么样的简历才是HR喜欢和认可的呢? 一.简历内容符合岗位要求 首先,我们需要知道的是,公司招聘人才 ...
- matlab 图案 柱状图_值得收藏 | 如何用matlab做出酷炫的图像
1.基础知识 1.1 二维图形绘制 plot函数是Matlab绘制二维图形的常用函数,该函数将数组中的数据点绘连起来构成一条连续的曲线. plot(x,y,'PropertyName',Propert ...
最新文章
- 面试官问我什么是扩展自适应机制
- 打印swift 变量的类型
- springboot-devtools idea或eclipse 热加载
- vue computed 中操作DOM和给对象添加属性遇到的问题
- 用实体类来做数据绑定(不用数据表数据字段的绑定方法)
- 计算机分盘介质受写入保护,“介质受写入保护”的解决(适用于U盘或移动硬盘)...
- ubuntu 16:使用系统自带的中文输入法
- 2012蓝桥杯C++本科 取球游戏
- Zookeeper重要概念
- 机器学习中类别变量的编码方法总结
- 【Unity Shader】学习顶点/片元着色器
- 特征工程与自动特征工程
- 物联网之STM32开发四(中断系统)
- 从零开始前端学习[14]:选择器的优先级
- 靴子落地,火山引擎官宣进军云市场
- 【历史上的今天】2 月 16 日:世界上第一个 BBS 诞生;中国计算机教育开端;IBM 机器人赢得智能竞赛
- 关于Linux系统学习心得总结(基础篇)
- carthage文件与配置
- windows应用程序-音乐播放器【一】
- Deep Leaning (深度学习)学习笔记二
热门文章
- MFC中的问题记录 2012-2-20
- 在moss上自己总结了点小经验。。高手可以飘过
- BZOJ4241历史研究题解
- 【bzoj5173】[Jsoi2014]矩形并 扫描线+二维树状数组区间修改区间查询
- PE详解之IMAGE_NT_HEADERS结构定义即各个属性的作用(PE详解02)
- Win7配置SVN详细步骤(服务器和客户端)
- 《WF编程》系列之15 - 顺序工作流与SequenceActivity 3 顺序工作流
- AURIX Development Studio 使用指北(不定时更新)
- WWW2022 | 知识提示的预训练微调
- 什么是迁移学习 (Transfer Learning)?这个领域历史发展前景如何?【文末彩蛋】...