有人可以建议我如何计算出我可以通过SSE / AVX使用SIMD在Ivy Bridge CPU上同时执行的最大32位无符号整数乘法吗?

我了解AVX确实具有用于乘法的256位寄存器,但这是针对浮点的(AVX2引入了256位整数寄存器)。 因此,我不太确定使用浮点寄存器进行整数乘法是否更好(如果可能的话)?

另外,我不确定这是否仅取决于寄存器的数量,还是我需要查看CPU的端口。 看起来端口0和端口5可以处理SSE整数ALU?

===============>>#1 票数:1

您可以每个时钟执行一次pmulld = 4乘法。

因此,我不太确定使用浮点寄存器进行整数乘法是否更好(如果可能的话)?

这样的事是不可能的。 您当然可以在ymm寄存器中放入8个整数,但是您会陷入困境。 您需要对它们进行一些操作的说明在AVX2中。

===============>>#2 票数:0

如您所见:

当前没有解决方案可以改善长整数与SSE或AVX的乘法。

  ask by user997112 translate from so

未解决问题?本站智能推荐:

1回复

使用SSE / AVX的整数点积?

我正在看英特尔内在指南: https://software.intel.com/sites/landingpage/IntrinsicsGuide/ 虽然他们有_mm_dp_ps和_mm_dp_pd用于计算浮点数和双精度的点积,但我看不出任何用于计算整数点积的东西。 我有两个u
2回复

我可以将AVX / SSE用作AoS布局而不是SoA吗?

我想加速一个简单的积分器,该积分器通过其位置和速度描述一组无质量的粒子。 我不是SSE / AVX专家,但我发现SIMD扩展可以在这里产生什么很有趣。 许多论文建议使用数组结构: 但是,对于许多应用程序,相反的方法将是有益的: 尽管我模糊地理解了要对数组结构版本进行矢量化
2回复

256位AVX向量中32位浮点数的水平和

这个问题已经在这里有了答案: 如何将__m256水平求和? 2个答案 我有两个浮点数组,我想使用SSE和AVX以最小的延迟来计算点积。 我知道浮点数有一个256位固有的乘积,但是我读过SO,它比以下技术慢:( https://stackoverflow.com/
2回复

使用单个AVX内在函数反转包含双精度的AVX寄存器

如果我有一个AVX寄存器,其中有4个双打,并且我想将其反转存储在另一个寄存器中,是否可以使用单个内部命令执行此操作? 例如:如果我在SSE寄存器中有4个浮点数,我可以使用: 我可以使用,也许是_mm256_permute2f128_pd()吗? 我不认为你可以用上面的内在来解决每
1回复

将SSE矩阵向量乘法代码转换为AVX

我正在尝试将SSE函数转换为AVX。 该函数执行矢量矩阵乘法,这是我正在使用的SSE代码: 这就是我对AVX提出的建议: 但是,AVX代码崩溃( Access violation reading location 0xFFFFFFFFFFFFFFFF )。 有人可以帮助
1回复

AVX2 SIMD添加无效

我正在尝试使用AVX2 SIMD指令添加这两个向量。 代码编译时没有错误和警告,但是在运行时崩溃。 为什么? 无论在main方法中初始化的数组有多大,它都应打印使用AVX2添加SIMD的结果。
2回复

使用SIMD AVX计算两个排序数组的对称差异大小

我正在寻找一种方法来优化我正在研究的算法。 它是最重复的,因此计算密集型部分是两个任意大小的排序数组的比较,包含唯一的无符号整数( uint32_t )值,以获得它们的对称差异的大小(仅存在于其中一个向量中的元素数量) )。 将部署算法的目标机器使用支持AVX2的Intel处理器,因此我正在
2回复

如何使用SSE / AVX有效执行double / int64转换?

SSE2具有在单精度浮点数和32位整数之间转换向量的指令。 _mm_cvtps_epi32() _mm_cvtepi32_ps() 但是,双精度和64位整数没有等效项。 换句话说,它们丢失了: _mm_cvtpd_epi64() _mm_cvtepi6
1回复

使用AVX从结构中提取整数和短路?

我有一个结构,其中包含各种数据成员之间的联合和AVX类型,以加载一个加载中的所有字节。 我的代码看起来像: 我想使用AVX寄存器将所有数据一起加载,然后分别将四个成员提取到int32_t和int16_t局部变量中。 我该怎么做呢? 我不确定在从AVX寄存器中提取时如何将数据成员
2回复

SSE和AVX内在混合物

除了SSE-copy,AVX-copy和std :: copy性能 。 假设我们需要以下列方式对一些循环进行矢量化:1)通过AVX向量化第一个循环批次(多次乘8)。 2)将循环的剩余部分分成两批。 通过SSE矢量化批次为4的倍数。 3)通过串行程序处理整个循环的剩余批次。 让我们考虑复