我有一个简单的问题,需要排序的数字长度会影响排序时间吗? 示例:假设我们需要对1000万个6位数字(如:204134)和1000万个2/3位数字(如:24,143)进行排序,并对这两个数字进行单独排序。具有6位数字的数字是否会比具有2/3数字的数字花费更多时间?
我知道硬件使用每个逻辑门用于单个数字,因此6个逻辑门用于6个数字,而2/3门用于其他数字,但我不知道这是否会影响排序时间。有人可以解释我这个。 帮助将不胜感激。 感谢
答案 0 :(得分:1)
硬件使用位,而不是十进制数字。此外,硬件始终使用相同的固定位数(对于给定的操作);填充较小的值。例如,一个32位CPU通常具有32位比较器单元,其具有32位比较所需的完全相同的电路,并且无论当前所比较的值是否适合更少的位,都使用这些。
您的另一个问题是逻辑门的确切数量与性能无关。单个门的传播时间远小于时钟周期,只有相当复杂的具有长依赖链的电路实际上需要比单个周期更长的时间(即使这样,它也可以通过流水线操作,每个周期仍然可以获得1个操作的吞吐量)。令人惊讶的大量逻辑门按顺序(以及几乎无限数量的逻辑门并联)可以在一个时钟周期内轻松完成其工作。因此,智能64位比较不需要比8位更多的时钟周期。
答案 1 :(得分:1)
简短回答:这取决于,但可能不是
答案越长: 很难知道,因为你没有多说硬件或排序算法。您稍后提到您正在使用Quicksort的一些MPI变体。因此,您要问的是,由于硬件原因,6位数和3位数之间是否存在性能差异。那么,如果将这些数字打包在一起,那么在将数据集从内存传输到处理器时,您将获得更好的带宽。既然你没有提到有关压缩数组的任何内容,我会假设你没有这样做。一旦值在寄存器中,它将具有相同的延迟和吞吐量,无论是6位还是3位。
像基数排序这样的算法会根据您的数字范围所需的位数执行不同的操作。由于您没有使用它,因此不适用。