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. 看我如何下载韩寒博客文章笔记
  2. 嵌入式开发试题1-100
  3. ES5新增的方法——数组的方法
  4. oracle loder nextval,ORA-07445: 出现异常错误: 核心转储
  5. URLScan工具配置方法第1/2页
  6. 使用基于微服务的流架构更好地进行大规模的复杂事件处理(第1部分)
  7. ICCV 2019 | 微软开源跨视图融合的3D人体姿态估计算法,大幅改进SOTA精度
  8. .net里面实现javascript中的 escape 和 unescape 功能
  9. OpenShift 4 - Knative教程(2) 基于Revision/Tag/Traffic实现蓝绿部署和恢复发布
  10. IC卡插入与触点激活时序
  11. List、Set、Map比较
  12. 计算机应用基础146jpg,计算机应用基础——复习题2.pdf
  13. bex5 mysql_Bex5开发技巧之MYSQL Incorrect string value
  14. python字典类型中键可以是数字吗_python字典key不能是或可以是啥类型
  15. GAT GAX 简介
  16. 利用Photoshop对证件照换底且抠出头发丝
  17. BZOJ 2716/CH 4701 天使玩偶
  18. Python 实现Ridge Regression教程
  19. 利用python实现3种梯度下降算法
  20. 华为智慧搜索 v9.1.2.300

热门文章

  1. postman连接数据库
  2. 泰拳的快感之一——我看《拳霸》
  3. Pyside2打包成exe-用cxfreeze
  4. 伯凡时间-160218 十个能让你的无形资产增值的好习惯(转)
  5. SharePoint 2010 创建联系人列表和使用联系人列表
  6. 华展云-让展览更高效 2017年第35届中国国际体育用品博览会会刊(参展商名录)
  7. ext4 xfs mysql对比_ext4与xfs比有什么优势和劣势。
  8. 科研实习 | 清华大学NISL实验室招收网络和应用安全方向访问学生/博后/工程师...
  9. 【小程序 | 黑马优选】tabBar、首页制作
  10. 乐观锁、悲观锁、分布式锁的总结