avx2 相关问题

AVX2(高级矢量扩展2)是x86的指令集扩展。它增加了256位版本的整数指令(其中AVX仅提供256b浮点)。

Intel AVX2中的异或指令“VPXORD”、“VXORPS”和“VXORPD”有什么区别

我看到在AVX2指令集中,Intel用不同的指令区分了整数、双精度和浮点的异或运算。对于整数,有“VPXORD”,对于双精度“VXORPD”,对于浮点数“VXO...

回答 1 投票 0

如何改进大型 uint64 数组的异或运算?

我想要对大型移位数组进行异或,以下是该函数的可移植版本,以便于解释。我如何改进这个计算?我尝试过使用 AVX2 但没有看到太大的改进。

回答 1 投票 0

从位位置整数数组设置/获取 __m256i 向量的 1 位

设置位: 给定一个数组 int inds[N],其中每个 inds[i] 是 [0, 255] 范围内的 1 位位置(并且所有 inds[i] 均已排序且唯一),我需要将 __m256i 的相应位设置为1. 有没有...

回答 1 投票 0

YMM寄存器之间的逻辑移位

我是否可以将 2048 位数字加载到 8 个 AVX ymm 寄存器中,并在所有这些寄存器之间左右移动位? 我每次只需要移动一位。 我尝试过找到准确的...

回答 1 投票 0

如何在AVX2中对齐/旋转256位向量?

我正在使用 AVX2 内在函数,并希望获得以下内容: 输入:[1,2,3,4,5,6,7,8] 输出:[8,1,2,3,4,5,6,7] 以下适用于 128 位向量: 让 vec1 = _mm_set_epi32(1,2,3,4)...

回答 1 投票 0

使用 AVX/SIMD 查找第一次出现的 16 位值的索引

我正在尝试返回 256 位内第一次出现 16 位值的索引。 我知道如何对 8 位执行此操作,使用: int _mm256_movemask_epi8 (__m256i a) 不过好像没有……

回答 1 投票 0

如何进一步优化这段关于数组操作的代码?

在下面的代码中,我对两个数组 result 和 DB 执行 XOR 运算,在下面的名为rotate1的偏移量之后访问结果。正如你所看到的,我已经在做 AVX2,...

回答 1 投票 0

x86-64 SIMD 机制“比较”8 位无符号整数,给出 +1 / 0 / -1 结果的向量?

假设我有两个无符号整数(8 位)打包寄存器 a 和 b。我想比较它们并返回 +1(a > b)、0(a=b)或 -1(a < b. Alternatively, distance also works (i.e.

回答 2 投票 0

x86-64 SIMD 机制“比较”整数?

假设我有两个无符号整数(8 位)打包寄存器 a 和 b。我想比较它们并返回 +1(a > b)、0(a=b)或 -1(a < b. Alternatively, distance also works (i.e.

回答 1 投票 0

如何有效地链接avx2内在函数来执行算术运算链?

我编写了一个大型程序来模拟分子系统。我在一台台式计算机上运行它,其处理器是 Intel(R) Core(TM) i7-6700 CPU @ 3.40GHz。大部分时间(75%)用于计算Lenn...

回答 1 投票 0

如何让Rust编译器生成AVX2指令?

我正在尝试编写一个简单的例程来使用 AVX2 指令。 例如,给出同一函数的以下两个版本: fn mul1(xs: &[i32], ys: &[i32]) -> Vec 我正在尝试编写一个简单的例程来使用 AVX2 指令。 作为示例,给出同一函数的以下两个版本: fn mul1(xs: &[i32], ys: &[i32]) -> Vec<i32> { // Assuming xs.len() == ys.len() xs.iter().zip(ys.iter()).map(|(x, y)| x * y).collect() } fn mul2(xs: &[i32], ys: &[i32]) -> Vec<i32> { const CHUNK_SIZE: usize = 8; // Assuming xs.len() == ys.len() and xs.len() % CHUNK_SIZE == 0 let chunks = xs.chunks_exact(CHUNK_SIZE).zip(ys.chunks_exact(CHUNK_SIZE)); let result_chunks = chunks.map(|(c1, c2)| c1.into_iter().zip(c2.into_iter()).map(|(x, y)| x * y)); result_chunks.flatten().collect() } 以及相关的汇编,我并没有真正看到第二个中进行了广泛的乘法。 我做错了什么? 我相信原因可以归结为flatten()。 第一个版本始终可以准确且精确地估计它将产生的物品(xs和ys的长度中较小的一个)。用技术术语来说,它意味着TrustedLen。 collect() 中的专业化会检测到这一点,并提前分配所有空间,而无需检查每个项目是否需要增长集合。因此,LLVM 可以对函数进行向量化,因为没有增长检查。 但是,flatten() 不能是 TrustedLen,因为每个项目的尺寸可能不同。从技术上讲,在这种情况下可以,因为 chunks_exact() 产生相等的块,但它没有实现。因此 collect() 需要插入增长检查,因此 LLVM 无法向量化该函数。

回答 1 投票 0

当我编译 Rust 代码时,我是否缺少 AVX512 的目标功能?

我编写了一些使用 AVX2 和 AVX512 指令来加速图像合成的 Rust 函数。我使用的是 AMD 7950x CPU。 当我运行 RUSTFLAGS="-C target-cpu=native" 货物 Benc...

回答 1 投票 0

vfmadd132pd 在 AMD Zen 3 架构上速度慢吗?

我使用 AVX-256 指令在 .NET 中创建了两个版本的点积。一种使用融合乘加,另一种则分离为乘法和加法。 公共静态不安全 Vector256<

回答 3 投票 0

SSE 矢量与 Epsilon 的比较

我正在编写需要比较两个 _mm256 向量是否相等的软件。但是,我希望误差范围为 +/- 0.00001。例如,3.00001 应被视为等于 3.00002。难道是……

回答 1 投票 0

如何将 8 个打包的 32 位整数(在 __m256i 中)的 +-1 符号打包成 64 位整数的字节?

给定 __m256i 的打包 32 位有符号整数,如果原始 __m256i 中相应的 32 位有符号整数大于或

回答 1 投票 0

我该如何使用_mm256_cos_pd? [重复]

我在我的C++项目中导入了immintrin.h头文件,并尝试使用_mm256_cos_pd函数,但遇到了错误“Use of undeclared identifier '_mm256_cos_pd'”。 根据

回答 1 投票 0

gcc c++ 协程运行 avx SIMD 代码,但会导致 SIGSEGV

c++ 协程运行 avx SIMD 代码,但会导致 AVX2 和 AVX512 出现 SIGSEGV #定义AVX512 0 #定义 AVX2 1 #定义SSE 0 HelloCoroutine hello(int& index, int id, int group_size) { 无符号 r...

回答 1 投票 0

c++ 协程运行 avx SIMD 代码,但导致 SIGSEGV

c++ 协程运行 avx SIMD 代码,但会导致 AVX2 和 AVX512 出现 SIGSEGV #定义AVX512 0 #定义 AVX2 1 #定义SSE 0 HelloCoroutine hello(int& index, int id, int group_size) { 无符号 r...

回答 1 投票 0

如何最有效地将包含 32 个无符号 8 位整数的 __m256i 向量转换为四个 32 位浮点数的 __m256 向量?

如果我有一个包含 32 个无符号 8 位整数的 __m256i 向量,我怎样才能最有效地解包和转换它以便我得到四个 __m256 向量,每个向量包含八个 32 位浮点数? 我想...

回答 0 投票 0

对于 32 位精度的 fp,Zen 4 内核每个周期有 48 个触发器吗?

由于 amd zen 4 对矢量数据只有 256 位宽的操作,下图来自 chipsandcheese 的 Zen 4 文章,显示了 6 个 FP 流水线(4 个 ALU 和 2 个内存): 每个 FMA 做 1 次乘法 ...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.