相关疑难解决方法(0)

在x86上独占访问L1缓存行?

如果一个64字节的缓冲区被大量读/写,那么它很可能会被保存在L1中; 但有没有办法强迫这种行为?

同样,给一个核心独占访问这64个字节,并告诉它不要将数据与其他核心和内存控制器同步,这样这些64个字节总是存在于一个核心的L1中,无论CPU是否认为它经常被使用.

performance x86 assembly low-level cpu-cache

4
推荐指数
1
解决办法
178
查看次数

从GP regs加载xmm

假设你有值rax,rdx你想加载到xmm寄存器中.

一种方法是:

movq     xmm0, rax
pinsrq   xmm0, rdx, 1
Run Code Online (Sandbox Code Playgroud)

虽然这很慢!有没有更好的办法?

x86 assembly sse simd micro-optimization

3
推荐指数
1
解决办法
224
查看次数

如何使用 AVX-512 实现 16 位和 32 位整数插入和提取操作?

AVX 具有将 16 位和 32 位整数插入和提取到__m256i向量中的指令:_mm256_insert_epi16, _mm256_insert_epi32, _mm256_extract_epi16, _mm256_extract_epi32

但是,AVX-512 似乎没有等效的说明。为__m512i向量实现这些方法的适当方法是什么?IE

  • __m512i _mm512_insert_epi16(__m512i a, __int16 i, int index)
  • __m512i _mm512_insert_epi32(__m512i a, __int32 i, int index)
  • int _mm512_extract_epi16(__m512i a, int index)
  • int _mm512_extract_epi32(__m512i a, int index)

intrinsics avx avx512

3
推荐指数
1
解决办法
720
查看次数

MMX寄存器速度与堆栈的无符号整数存储

我正在考虑在纯装配中实现SHA3.SHA3​​的内部状态为17个64位无符号整数,但由于它使用了转换,如果寄存器中有44个这样的整数,则可以实现最佳情况.另外还有一个临时寄存器.在这种情况下,我将能够在寄存器中进行整个转换.

但这是不现实的,优化可能一直到甚至只有几个寄存器.不过,根据这个问题的答案,更多可能更好.

我想至少使用MMX寄存器进行快速存储,即使我需要交换到其他寄存器进行计算.但我担心这是古建筑.

在MMX寄存器和RAX之间的数据传输是否比在堆栈上索引u64并从可能是L1缓存中访问它们更快?或者即便如此,除了我应该注意的速度考虑之外,还有隐藏的陷阱吗?我对一般情况感兴趣,所以即使我的计算机上的一个比另一个更快,它仍然可能是不确定的.

x86 assembly cpu-registers micro-optimization mmx

1
推荐指数
1
解决办法
118
查看次数

如何将 %rax 中的 double 移动到 %ymm 或 %zmm 上的特定 qword 位置?(卡比湖或更高版本)

这个想法是,我想收集的返回的值double成一个矢量寄存器,用于机加工imm width在一个时间而不第一存储回到存储器。

特定的处理vfma与其他两个操作数都是constexpr,因此它们可以简单地由_mm256_setr_pd调用或从 中对齐/未对齐的内存加载constexpr array

有没有办法%ymm直接从 value in 中将double 存储在特定位置以%rax进行收集?

目标机器是 Kaby Lake。更有效的未来向量指令也是受欢迎的。

c++ x86-64 inline-assembly intrinsics avx

0
推荐指数
1
解决办法
442
查看次数