作者回复: 回复。我这个地方确实写得不准确,要再补充点内容。我引用的是Intel的官网的内容。它的意思不是只用一个寄存器处理。而是因为使用了两个 512 位融合乘加 (FMA) 单元,每次可以同时处理32 次双精度和 64 次单精度浮点运算,以及八个 64 位和十六个 32 位整数。FMA单元的指令比较特殊,它可以完成乘法运算的时候同时完成加法运算。
我把正文调一下。参考:
https://www.intel.cn/content/www/cn/zh/architecture-and-technology/avx-512-overview.html
作者回复: 这个地方我确实没有细讲。
假设,我们做8个32位整数的计算。让nums2 = nums1 + 1。但是,nums2[0]的地址跟nums1[4]的地址相同,也就是nums2是从nums1的一半开始的。nums1和nums2一共占了12个整数位置。
假设nums1中各个元素的值都是1。然后做矢量计算。做完以后,结果是怎样的呢?从nums1开始,是4个1,8个2,一共12个数字。对吧。
但如果你用标量的循环去做,是怎样的呢?
for(int i = 1; i < 8; i++)
nums2[i] = nums1[i] + 1;
会是4个1,4个2,4个3。
它等价于nums1[i+4] = nums1[i] + 1。