C语言行优先和列优先的问题深入分析

摘要

本文主要探讨的是“行优先”原则和“列优先”原则的问题。

1. 背景

首先了解“行优先”和“列优先”的知识,这两种方式在数学上的直观描述如下,给定如下矩阵:

根据行优先的原则,其排序方式为

根据列优先的原则,其排序方式为

2. 计算机领域的应用

行列优先原则在计算机领域的应用主要如下。行优先或者列优先没有好坏,但其直接涉及到对内存中数据的最佳存储访问方式。因为在内存使用上,程序访问的内存地址之间连续性越好,程序的访问效率就越高;相应地,程序访问的内存地址之间连续性越差。所以,我们应该尽量在行优先机制的编译器,比如C/C++,CUDA等等上,采用行优先的数据存储方式;在列优先机制的编译器,比如Fortune, Matlab等等上,采用列优先的数据存储方式。但这种思想渗透到编程中之后,代码的质量就会提高一个档次。

3. 以矩阵计算为例(Matlab编译器下测试)

?

4. 测试和分析

测试结果如上图所示,第一个时间为Matlab自带的乘法运算,第二个为我们原始实现的乘法计算,第三个为循环中行列变换(适应列优先编译器的处理)。

最重要的是第四个是本人原创的矩阵乘法方法,简单地说就是将A矩阵转置,然后设计相应的算法实现矩阵乘运算。在这个点上,希望在理解原理的基础上能给读者一些启发。在本例中,这样做效率最高,原因其一是本例中原始数据结构上适合我这样处理;原因其二是这样做的目的是使得任何一个子乘法的处理上,两乘数所在的内存空间上都是连续,而不仅仅是一个连续(注意:这是本文的核心,读者理解透了一定会很有收获,认真看我给出的程序实现。这是核心,不懂的可以交流思想)!

另外,本文中我给出的这个方法是矩阵乘法里面最优的方法,至少数学逻辑上是这样。之所以Matlab自带的乘法计算之所以性能还不错,是因为Matlab自带的运算都是经过优化的,包括硬件加速,系统加速等自己设计的应用很能调用加速方法。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

c语言为什么先存储行后存储列,C语言行优先和列优先的问题深入分析相关推荐

  1. c语言参数传入函数赋值后传出来,c语言第10次实验内容函数2邹显春.ppt

    c语言第10次实验内容函数2邹显春 * #include void call(int, double, double);//使用函数前需要声明 double addition(double,doubl ...

  2. c语言 打印共九行的菱形,用C语言打印图案的几种实现方法

    循环的使用 维普资讯 http://doc.xuehai.net 科技伯. 1 1 0计算机与信息技术 0 S IN E I F R TO CE C N O MA I N 20 06年第 4期 用 C ...

  3. C语言变量的定义包括变量存储类型和变量的什么?

    C语言变量的定义包括变量存储类型和变量的名称.C语言定义变量的格式:"数据类型 变量名;","数据类型"表示想要存储什么类型的数据,"变量名" ...

  4. C语言基础笔记之12:存储类别、链接和内存管理

    Tips1: 关键字:auto.extern.static.register.const.volatile.restricted. _Thread_local._Atomic 函数:rand().sr ...

  5. InnoDB 存储引擎中的表锁和行锁详解

    各位对 "锁" 这个概念应该都不是很陌生吧,Java 语言中就提供了两种锁:内置的 synchronized 锁和 Lock 接口,使用锁的目的就是管理对共享资源的并发访问,保证数 ...

  6. c++矩阵转置_C语言:数据结构-稀疏矩阵的压缩存储

    (1)稀疏矩阵的特点 在一个m×n的矩阵中,设矩阵中有i个元素不为零,并令△=i/(m×n),称△为稀疏因子.通常当△≤0.05时.认为该矩阵为稀疏矩阵. 对这类矩阵实现压缩存储的基本思路是只需要存储 ...

  7. 为什么MaxCompute采用列式存储?列式存储和行式存储的主要区别在哪

    摘要: 1 为什么要按列存储 列式存储(Columnar or column-based)是相对于传统关系型数据库的行式存储(Row-basedstorage)来说的.简单来说两者的区别就是如何组织表 ...

  8. 以串结构存储c语言版,数据结构C语言版 串的块链存储表示和实现

    <数据结构C语言版 串的块链存储表示和实现>由会员分享,可在线阅读,更多相关<数据结构C语言版 串的块链存储表示和实现(13页珍藏版)>请在人人文库网上搜索. 1.*数据结构C ...

  9. C语言利用图的邻接矩阵的存储方式实现拓扑排序

    C语言利用图的邻接矩阵的存储方式实现拓扑排序 在拓扑排序中,我们的对象是有向无环图,这种图是描述工程进行过程的有效工具.比如"课程开课顺序,施工进程,软件开发进程",我们在使用有向 ...

最新文章

  1. Go 学习笔记(68)— goroutine 并发控制神器 Context
  2. [BZOJ1103][POI2007]大都市meg
  3. Python3学习笔记(urllib模块的使用)
  4. QEMU,一个快速的和便捷的动态翻译器(论文译文)
  5. 负载策略_面试官:讲一下什么是负载均衡,什么是轮询策略随机策略哈希策略
  6. python处理数据的优势-Python的优势及应用领域
  7. 017 Android加固之APK混淆和保护方式
  8. python后端开发工程师面试题
  9. UNIX再学习 -- shell编程
  10. Shell:shell中的循环语句
  11. 《Flutter 从0到1构建大前端应用》读后感—第6章【使用网络技术与异步编程】
  12. 什么是TCP/IP协议
  13. 计算机维护费入什么会计科目,​系统维护费记入什么会计科目
  14. 1017 怪盗基德的滑翔翼(最长上升子序列扩展)
  15. PNG图片怎么转成ICO?分享两种思路
  16. CSS3 画皮卡丘
  17. python兔子生兔子
  18. C++小白如何做简单游戏
  19. oracle 转number日期,oracle number型日期转date型日期
  20. SDP(Seesion Description Protocol)协议结构

热门文章

  1. 怎么把照片做成消消乐_开心消消乐特效制作如何快速的消除过关
  2. 神经网络-1 利用年龄身高体重判断性别
  3. 计算机应用基础如何指导实践教学,高职计算机应用基础课实践教学.pdf
  4. 机械臂速成小指南(四):机械臂关键部件之减速机
  5. (Windows系统)MATLAB2021a安装MinGW -w64
  6. WebGPT: Browser-assisted question-answering with human feedback
  7. 2022年全球最具技术实力的的智能合约安全审计公司推荐
  8. 怎样才能使自己在一些大型的活动中不紧张,防止紧张的方法有哪些。
  9. 科研实习 | 清华大学NISL实验室招收网络和应用安全方向访问学生/博后/工程师...
  10. iOS开发之锚点anchorPoint