在 nm 数组上按列迭代比按行迭代更快吗?
Is it faster iterating columnwise than linewise over an n-m-Array?
我将拥有这个 LABVIEW 程序,我必须在其中迭代大型数组(而不是队列),因此我有兴趣尽可能加快它们的速度。
我想我听说过OpenCV,当读取一个元素时,提取这个元素的页面包含以下列元素。这意味着如果我为每个元素逐行迭代,我将不得不重新加载一个新页面,这显然会减慢整个过程。
这也适用于 LABVIEW 程序吗?
感谢您的支持和亲切的问候
LabVIEW 是行优先的。如果您获取一个二维数组并将其连接到 For 循环的边界以进行自动索引,则您得到的一维数组就是行。将其连接到嵌套的 For 循环中以处理各个元素。
我对此进行了基准测试。
我有 100000x5 二维数组。通过首先迭代行,我的 i7 处理器需要大约 9 毫秒才能完成。首先按列迭代需要大约 35 毫秒才能完成。
除了先行后列的迭代之外,您还可以应用两种技术来最大化数组处理:
- Pipelining - 这有助于最大化顺序任务的核心利用率
- Parallel For loops - 提供数据并行性
在那之后,还有其他更复杂的设计,如结构化网格。 NI 白皮书更详细地描述了 multi-core programming in LabVIEW,包括这些和其他方法。
我将拥有这个 LABVIEW 程序,我必须在其中迭代大型数组(而不是队列),因此我有兴趣尽可能加快它们的速度。
我想我听说过OpenCV,当读取一个元素时,提取这个元素的页面包含以下列元素。这意味着如果我为每个元素逐行迭代,我将不得不重新加载一个新页面,这显然会减慢整个过程。
这也适用于 LABVIEW 程序吗?
感谢您的支持和亲切的问候
LabVIEW 是行优先的。如果您获取一个二维数组并将其连接到 For 循环的边界以进行自动索引,则您得到的一维数组就是行。将其连接到嵌套的 For 循环中以处理各个元素。
我对此进行了基准测试。 我有 100000x5 二维数组。通过首先迭代行,我的 i7 处理器需要大约 9 毫秒才能完成。首先按列迭代需要大约 35 毫秒才能完成。
除了先行后列的迭代之外,您还可以应用两种技术来最大化数组处理:
- Pipelining - 这有助于最大化顺序任务的核心利用率
- Parallel For loops - 提供数据并行性
在那之后,还有其他更复杂的设计,如结构化网格。 NI 白皮书更详细地描述了 multi-core programming in LabVIEW,包括这些和其他方法。