【问题标题】:Accelerating 2D matrix reading加速二维矩阵读取
【发布时间】:2015-02-20 23:04:42
【问题描述】:

我有一个大小为 4*n 的矩阵,例如 (4*3000) 那么从矩阵中存储和读取元素的最快方法是什么

我尝试了两种解决方案,它们的时间大致相同。

  1. 由 (i+ width*j) 读取的大小为 12000 个元素(2D --> 1D)的数组

  2. 4 个大小为 1*3000 的数组,然后使用(IF ELSE 或 Switch case)语句来决定我应该读取哪个数组

因此,是否可以使用另一种解决方案。 此外,如果适用于这种情况,如何使用移位技术>>解决问题

【问题讨论】:

  • 你不是说,他们给的执行时间是一样的吗?那么,如果您已经告诉我们答案,您的问题是什么?
  • 我在问是否有其他解决方案可以使用
  • 最快的方法是在一次分配中为矩阵分配空间,然后按顺序将值读入其中。这里的所有都是它的。关于所有其余的小细节(以及“转变技术”):不要费心去想这些事情。

标签: c arrays performance matrix


【解决方案1】:

第一种技术应该更快。

此外,您可以通过连续访问循环内的元素来提高性能 (...arr[11] = ...; arr[12] = ...; arr[13] = ...;...)。

【讨论】:

  • 您的意思是手动读取它们而不是使用 (i+width*j) 或插入元素的值时??
  • @MROF 没关系。
  • 使用移位技术怎么样>>可以吗?以及如何做到这一点?
  • 移位技术有助于计算 2 的整数幂或除以 2,但对数组元素访问几乎没有好处(如果有的话),除非您通过某种计算得出要访问的元素通过该方法优化。我没有看到直接矩阵读取操作的应用程序。
  • 在读取值时 .. 我从 3000 个元素的列中读取 8 x 8 的值 .. 这意味着:具有 0、1、2、3 索引的 4 列每列包含 3000 个元素列(4*3000 的矩阵)。我必须根据给定的列名(0 或 1 或 2 或 3)从所需的列中读取 8 乘 8 的元素,并考虑 8= 2^3 这可能是如何转换为 >> 操作的。但我不知道怎么做??我说的对吗??
猜你喜欢
  • 1970-01-01
  • 2018-03-21
  • 2012-11-20
  • 1970-01-01
  • 2010-12-30
  • 2017-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多