【发布时间】:2015-10-09 05:16:35
【问题描述】:
我正在处理 long int 数据,并试图确定数组中的最小元素。我知道循环遍历数组以找到最小值的传统方式。这个问题是要检查是否有其他方法可以加快速度。
这个数组的一些属性可能会帮助我们加快速度,但我不确定如何。
该数组正好有 8 个 long int 整数。每次调用该函数时,我们都会从数组中找到一个最小值,并将该数字替换为另一个数字,然后重复此步骤。 (至少 80 亿次)
我正在考虑以某种方式为下一次迭代记住第二大数字(因为我们将在当前迭代中比较它们)。与遍历数组的线性实现相比,这是否有用?
也允许排序,但我们必须使用临时数组以某种方式记住原始位置。这样会更有效吗?
还有可能使用 SIMD 来确定长整数的最小值吗?即使是毫秒级的加速也很有用,因为我正在执行此操作数十亿次。
【问题讨论】:
-
long int是32位整数对吗?
-
@stgatilov 这在很大程度上取决于所使用的系统。可以是 32、64 甚至 128 位
-
8 个元素太少了。重要的是要完全了解您的最内层循环,以便了解如何对其进行矢量化。否则,矢量化版本将一直花费在外部代码的各种开销上。
-
整个过程的目的是什么?这个八元素数组最终期望包含什么?可能在更高级别上提供更积极的优化,可能使用不同的数据结构。
-
我闻到过早的优化!因此,让我直截了当地说,您将通过网络传输约 64GB(8000000000 * 8 字节),并且您担心运行此算法的 CPU 跟不上?咕咕咕!
标签: c++ c arrays algorithm performance