- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
是否有显示/写入大型寄存器的约定,例如英特尔 AVX 指令集中可用的那些?
例如,如果最低有效字节为 1,最高有效字节为 20,xmm
中的其他位置为 0。寄存器,对于按字节显示是以下首选(小端):
[1, 0, 0, 0, ..., 0, 20]
[20, 0, 0, 0, ..., 0, 1]
[0x1, 0x0, ..., 0x14]
[0x14, 0x0, ..., 0x1]
long
或
int
或 C 中的任何内容的操作都独立于字节序)。字节序出现在寄存器 <-> 内存接口(interface)中,这里我询问的是寄存器中已经存在的数据。
[0x4, 0x3, 0x2, 0x1]
,字节元素、字和双字元素的输出将是:
最佳答案
保持一致是最重要的;如果我正在处理已经具有 LSE 优先注释或变量名称的现有代码,我会匹配它。
如果可以选择,我更喜欢评论中的 MSE 优先表示法 ,尤其是在设计带有混洗或特别是打包/解包到不同元素大小的东西时。
英特尔不仅在手册中的图表中使用 MSE 优先,而且在内部函数/指令的命名中,如 pslldq
(字节移位)和psrlw
(位移):向 MSB 左移位/字节.伦敦政治经济学院优先的思维并不能让你在心理上扭转事情,这意味着你必须在考虑轮类而不是加载/存储时这样做。由于 x86 是 little-endian,因此您有时不得不考虑这一点。
在 MSE 优先考虑向量时,只需记住内存顺序是从右到左。当您需要考虑从一 block 内存中重叠未对齐的负载时,您可以按从右到左的顺序绘制内存内容 ,因此您可以查看它的矢量长度窗口。
在文本编辑器中,在某些内容的左侧添加新文本并将现有文本移到右侧是没有问题的,因此向评论添加更多元素不是问题。
MSE-first 表示法的两个主要缺点是:
h g f e | d c b a
用于 32 位元素的 AVX 向量),所以我有时只是从右侧开始并键入 a
,左箭头,b
, 空格, ctrl-左箭头, c
,空间,...或类似的东西。 _mm_set_epi*
使用 MSE 优先顺序。 (使用 _mm_setr_epi*
匹配 LSE 优先评论)。 vpalignr
的车道交叉版本时。 : 看我对那个问题的回答
pshufb
的表格控制向量,但这将是对缓存占用的巨大浪费。从内存中加载滑动窗口要好得多:
/* Example of using MSE notation for memory as well as vectors
// 4-element vectors to keep the design notes compact
// I started by just writing down a couple rows of this, then noticing which way they lined up
<< 3: 00 FF FF FF
<< 1: 02 01 00 FF
0: 03 02 01 00
>> 2: FF FF 03 02
>> 3: FF FF FF 03
>> 4: FF FF FF FF
FF FF FF FF 03 02 01 00 FF FF FF FF
highest address lowest address
*/
#include <immintrin.h>
#include <stdint.h>
// positive counts are right shifts, negative counts are left
// a left-only or right-only implementation would only have one side of the table,
// and only need 32B alignment for the constant in memory to prevent cache-line splits.
__m128i vshift(__m128i v, intptr_t bytes_right)
{ // intptr_t means the caller has to sign-extend it to the width of a pointer, saving a movsx in the non-inline version
// C11 uses _Alignas, C++11 uses alignas
_Alignas(64) static const int32_t shuffles[] = {
-1, -1, -1, -1,
0x03020100, 0x07060504, 0x0b0a0908, 0x0f0e0d0c,
-1, -1, -1, -1
}; // compact but messy with a mix of ordering :/
const char *identity_shuffle = 16 + (const char*)shuffles; // points to the middle 16B
// count &= 0xf; tricky to efficiently limit the count while still allowing >>16 to zero the vector, and to allow negative.
__m128i control = _mm_load_si128((const __m128i*) (identity_shuffle + bytes_right));
return _mm_shuffle_epi8(v, control);
}
uint8_t shuffles[] = { 0xff, 0xff, ..., 0, 1, 2, ..., 0xff };
,我可以在转换为 C 数组时稍微简单一些。 .
vpshufb xmm0, xmm0, xmmword ptr [rdi + vshift.shuffles+16]
ret
psllq xmm, 16
/
_mm_slli_epi64(v,16)
将字元素左移一位(在 qword 边界处归零)。或者当您需要移位字节元素,但唯一可用的移位是 16 位或更宽时。最窄的每元素可变移位是 32 位元素 (
vpsllvd
)。
pshufd
当您可以将成对的单词元素放在一起时,或
pshufb
在整个向量中打乱单词(因为
pshuflw/hw
是有限的)。
_MM_SHUFFLE(d,c,b,a)
也按 MSE 顺序排列。将它写成单个整数的任何其他方式也是如此,例如 C++14
0b11'10'01'00
或
0xE4
(身份洗牌)。使用 LSE 优先表示法将使您的 shuffle 常量相对于您的评论看起来“向后”。 (除了
pshufb
常量,你可以用
_mm_setr
编写)
关于x86 - 显示向量寄存器的约定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41351087/
问题故障解决记录 -- Java RMI Connection refused to host: x.x.x.x .... 在学习JavaRMI时,我遇到了以下情况 问题原因:可
我正在玩 Rank-N-type 并尝试输入 x x .但我发现这两个函数可以以相同的方式输入,这很不直观。 f :: (forall a b. a -> b) -> c f x = x x g ::
这个问题已经有答案了: How do you compare two version Strings in Java? (31 个回答) 已关闭 8 年前。 有谁知道如何在Java中比较两个版本字符串
这个问题已经有答案了: How do the post increment (i++) and pre increment (++i) operators work in Java? (14 个回答)
下面是带有 -n 和 -r 选项的 netstat 命令的输出,其中目标字段显示压缩地址 (127.1/16)。我想知道 netstat 命令是否有任何方法或选项可以显示整个目标 IP (127.1.
我知道要证明 : (¬ ∀ x, p x) → (∃ x, ¬ p x) 证明是: theorem : (¬ ∀ x, p x) → (∃ x, ¬ p x) := begin intro n
x * x 如何通过将其存储在“auto 变量”中来更改?我认为它应该仍然是相同的,并且我的测试表明类型、大小和值显然都是相同的。 但即使 x * x == (xx = x * x) 也是错误的。什么
假设,我们这样表达: someIQueryable.Where(x => x.SomeBoolProperty) someIQueryable.Where(x => !x.SomeBoolProper
我有一个字符串 1234X5678 我使用这个正则表达式来匹配模式 .X|..X|X. 我得到了 34X 问题是为什么我没有得到 4X 或 X5? 为什么正则表达式选择执行第二种模式? 最佳答案 这里
我的一个 friend 在面试时遇到了这个问题 找到使该函数返回真值的 x 值 function f(x) { return (x++ !== x) && (x++ === x); } 面试官
这个问题在这里已经有了答案: 10年前关闭。 Possible Duplicate: Isn't it easier to work with foo when it is represented b
我是 android 的新手,我一直在练习开发一个针对 2.2 版本的应用程序,我需要帮助了解如何将我的应用程序扩展到其他版本,即 1.x、2.3.x、3 .x 和 4.x.x,以及一些针对屏幕分辨率
为什么案例 1 给我们 :error: TypeError: x is undefined on line... //case 1 var x; x.push(x); console.log(x);
代码优先: # CASE 01 def test1(x): x += x print x l = [100] test1(l) print l CASE01 输出: [100, 100
我正在努力温习我的大计算。如果我有将所有项目移至 'i' 2 个空格右侧的函数,我有一个如下所示的公式: (n -1) + (n - 2) + (n - 3) ... (n - n) 第一次迭代我必须
给定 IP 字符串(如 x.x.x.x/x),我如何或将如何计算 IP 的范围最常见的情况可能是 198.162.1.1/24但可以是任何东西,因为法律允许的任何东西。 我要带198.162.1.1/
在我作为初学者努力编写干净的 Javascript 代码时,我最近阅读了 this article当我偶然发现这一段时,关于 JavaScript 中的命名空间: The code at the ve
我正在编写一个脚本,我希望避免污染 DOM 的其余部分,它将是一个用于收集一些基本访问者分析数据的第 3 方脚本。 我通常使用以下内容创建一个伪“命名空间”: var x = x || {}; 我正在
我尝试运行我的test_container_services.py套件,但遇到了以下问题: docker.errors.APIError:500服务器错误:内部服务器错误(“ b'{” message
是否存在这两个 if 语句会产生不同结果的情况? if(x as X != null) { // Do something } if(x is X) { // Do something } 编
我是一名优秀的程序员,十分优秀!