在 Intel x86 架构上使用非 AVX 指令移动 xmm 整数寄存器值

2024-05-23

我有以下问题,需要使用 AVX2 以外的任何工具来解决。

我有 3 个值存储在 m128i 变量中(不需要第四个值),需要将这些值移动 4、3、5。我需要两个功能。一个用于按这些值进行右逻辑移位,另一个用于左逻辑移位。

有谁知道使用 SSE/AVX 问题的解决方案?我唯一能找到的是_mm_srlv_epi32()这是AVX2。

添加更多信息。这是我尝试使用 SSE/AVX 优化的代码。它是我的跳棋/跳棋引擎的一部分。

uint32_t Board::getMoversBlack(){
    const uint32_t nocc=~(BP|WP);
    const uint32_t BK = BP & K;
    uint32_t movers = (nocc >> 4) & BP;
    movers |= ((nocc & MASK_R3) >>3) & BP;
    movers |= ((nocc & MASK_R5) >>5) & BP;
    if (BK != 0) {
        movers |= (nocc << 4) & BK;
        movers |= ((nocc & MASK_L3) << 3) & BK;
        movers |= ((nocc & MASK_L5) <<5) & BK;
    }
    return movers;
}

将不胜感激任何帮助。


如果您确实需要这个(并且无法通过重新排列数据来避免它),您可以完全/安全地模拟_mm_srlv_epi32不会破坏任何高位或低位。

对于编译时常量计数,您可以将左移和右移与其中的大多数混合使用。

可能是不好的选择:

  • 解压为标量:恶心。对于编译时常量计数来说有点糟糕,但对于运行时变量计数来说更糟糕,特别是如果您必须解压计数向量的话。没有 BMI2 的 x86 可变计数班次shrx具有笨拙的语义并在 Intel SnB 系列上解码为多个微指令。他们还额外收取mov输入班次计数的说明cl如果它还不在那儿的话。

  • 进行单独的移位,然后混合以从移位了该量的向量中获取元素。这不太好,但是您可以通过在复制不需要的元素时将其归零来降低混合成本。 (例如,如果已知高位元素为零,则复制pshufd得到一个向量{0,22,0,0}从起始向量{11,22,33, 0},并重复{0,0,33,0}.)

    因此,将您未使用的高位元素归零,2x pshufd 复制+将零打乱到位,3x psrld 具有不同的计数,并取出您未复制的向量中的其他元素,然后将 3 个向量重新组合在一起。 (如果您不保留向量的一个元素未使用,这需要更多工作。)

    根据代码的其余部分和微架构,使用 shuffle 代替 MOVDQA+PAND 可能不值得。如果任何元素使用相同的班次计数,则此选项变得更有吸引力。

    此外,您可以将低元素混合到向量中movss,并将低半部分与movsd。它们使用随机播放端口,因此随机播放吞吐量可能是一个问题。这实际上可能非常可靠。


希望有更好的选择。

  • Marc 建议的 SSE2 版本(见下文)也适用于完全一般的情况。

  • 当最小和最大移位计数之差 使用@Marc的SSE4.1建议使用乘法作为变量左移来解释右移计数的差异。或者单独作为左移。对于大多数情况来说,这可能是最好的,尽管向量整型乘法很慢,但需要的指令要少得多。

__m128i srlv435_sse4(__m128i v)
{
    __m128i rshift = _mm_srli_epi32(v, 3);   // v >> 3
    // differences in shift count by multiplying by powers of 2
    __m128i vshift = _mm_mullo_epi32(rshift, _mm_setr_epi32(2,4,1,0)); // [ x >> 2,  y >> 1, z >> 3, 0 ]  Except with low bits truncated.
    __m128i shift2 = _mm_srli_epi32(vshift, 2);                        // [ x >> 4,  y >> 3, z >> 5, 0 ]
     return shift2;
}

这很好,因为它可以就地运行,编译器不需要任何 MOVDQA 指令来复制寄存器,即使没有 AVX1。

注意SSE4.1 _mm_mullo_epi32速度不快:Haswell 上的 p0 为 2 uops:10c 延迟,每 2c 吞吐量 1 个。 Skylake 上的吞吐量更好,其中 2 个 uops 中的每一个都可以在 p0 或 p1 上运行,但仍然依赖于 10c 延迟。 (http://agner.org/optimize/ http://agner.org/optimize/以及其他链接x86 /questions/tagged/x86标记维基百科。)

这在 Haswell 之前有更好的延迟pmulld是单 uop 指令(~5 个周期,1c 吞吐量),而不是 10 个周期的 2 个相关 uop。

在 AMD Bulldozer 系列和 Ryzen 上,对于 pmulld,延迟 = 4 或 5,吞吐量 = 每 2c 1。

我没有检查端口与矢量移位的冲突。


没有SSE4.1,您可以使用2x SSE2_mm_mul_epu32一次进行 2 次乘法。为了排列奇数元素(1 和 3),pshufd将它们复制+洗牌到位置 0 和 2,其中pmuludq寻找他们。

这会从偶数 2 个 32 位元素产生 2 个 64 位结果,因此您不需要预移位来避免溢出。这也意味着当移位计数之间的差值大于最小移位时可以安全使用,因此SSE4.1方式无法将所有需要的位保留在保留位最多的元素中。

// general case: substitute in *any* shift counts and it still works.
__m128i srlv_sse2(__m128i v)  // [x  y  z  w]
{
    __m128i vs_even = _mm_mul_epu32(v, _mm_setr_epi32(1U<<1, 1U<<2, 1U<<0, 0));    // [ x<<1    z<<0 ]  (64-bit elements)
    // The 4 (1U<<2) is unused, but this lets us share a constant with the SSE4 version, saving rodata size.  (Compilers optimize duplicate constants for you; check the disassembly for same address)
    vs_even = _mm_srli_epi64(vs_even, 5);  // [ x>>4  0   x>>5  0 ]  (32-bit elements ready for blending with just an OR)

    __m128i odd = _mm_shuffle_epi32(v, _MM_SHUFFLE(3, 3, 1, 1));
    __m128i vs_odd =  _mm_mul_epu32(v, _mm_setr_epi32(1U<<(32-3),0,0,0));    // [ (y<<32) >> 3    0 ]  (64-bit elements)

    // If any elements need left shifts, you can't get them all the way out the top of the high half with a 32-bit power of 2.
    //vs_odd = _mm_slli_epi64(vs_odd, 32 - (3+2));       // [ garbage,  y>>3,  0, 0 ]

    // SSE2 doesn't have blend instructions, do it manually.
    __m128i vs_oddhi = _mm_and_si128(vs_odd, _mm_setr_epi32(0, -1, 0, -1));
    __m128i shifted = _mm_or_si128(vs_even, vs_oddhi);

     return shifted;
}

这里有一些明显的优化:

您的情况没有使用第四个元素,因此第二个乘法是没有意义的:只需移位并使用 AND 掩码来清除高位元素。vs_odd = _mm_srli_epi32v, 3);并使用0,-1,0,0作为您的 AND 掩码。

不要左移 1 和 0,而是将 x 添加到自身并保持 z 不变。通过将高 64 位清零来复制向量非常便宜(movq),但不如movdqa(在带有 mov-elimination 的 CPU 上)。

    __m128i rshift = _mm_srli_epi32(v, 3);         // v >> 3
    __m128i xy00   = _mm_move_epi64(rshift);
    __m128i vshift = _mm_add_epi32(rshift, xy00);       // [ x >> 2,  y >> 2, z >> 3, 0 ]

但这不能处理y。我们可以隔离y>>2 from vshift并再次添加以产生y>>1。 (但记住不要使用旧的y>>3 from xy00).

我们也可以考虑使用_mm_mul_epu32 (pmuludq)一次,然后复制+shift+AND 进行其他步骤(从原始复制v代替rshift缩短 dep 链)。这对于您的情况很有用,因为您没有使用顶部元素,因此只有一个有效的奇数元素,因此您不需要变量移位。

结合movq, movss, and movsd,从基本上分别移动这 3 个元素可能会获得更多的东西。端口压力、延迟、uop 计数(前端吞吐量)等之间需要权衡。例如我在想

movdqa  xmm1, xmm0
psrld   xmm0, 3        #  [ x>>3  y>>3    garbage ]
psrld   xmm1, 4        #  [ x>>4  y>>4    garbage ] 
movss   xmm1, xmm0     #  [ x>>3  y>>4    garbage ]   # FP shuffle

psrld   xmm0, 2        #  [ garbage        z>>5 ]
movsd   xmm0, xmm1     #  [ x>>3  y>>4     z>>5 ]     # FP shuffle

例如,Haswell 每个时钟吞吐量只有 1 个移位,因此这并不好。与乘法选项相比,它具有相当好的延迟。这在 Skylake 上很好,其中 2 个端口可以运行矢量立即移位。

FP 在整数指令之间进行洗牌在除 Nehalem 之外的 Intel CPU 上表现良好(每种方式都有 2 个周期的旁路延迟延迟损失,但吞吐量仍然可以)。我认为AMD也很好。

当然,所有这些 CPU 都有 SSE4.1,因此如果您使用动态运行时调度,SSE2 版本只需在 Core2 / K10 上工作。 (我猜是较旧的 Atom,或者其他什么)。

Godbolt 上的代码 + asm 输出 https://gcc.godbolt.org/#z:OYLghAFBqd5QCxAYwPYBMCmBRdBLAF1QCcAaPECAKxAEZSBnVAV2OUxAHIBSAJgGY8AO2QAbZlgDU3fgGE8AWwXCCxYQDoEM7NwAMAQT36A%2BsYW1eADjySGxUQDcALPwCsxhg0xOIp81ZsHAEojbgB2ACEjSRjJPwtrSWIGBDwAMwJpfgAROKUPezxjTAAHPH5eCAdSSX4Q/gjYgHomyQcsnX5sWujm1vw0tMxiTBFMBklhW1SMyTRmIUyAIwBPSQVmUQI8EtEV4WBJVckS1AB3YYnUNMleXpj4gLaU9MyZXLMFM03RVGKyioQZIzAg1T4eTCqf7lSq8UhOUj0XRBeqNFrSVyNAAeHW0txqkjW2jx9EkAC9cV1ajVdBjcpJsFj2CVMmdCAhJL8zkdCBNVAtkABDAiYdDqe5xMwJGwvDK8LIffJ2URFUowqqy0G3VGxXV6/X69HcTGSHHEqkImJErp4/g1Cnm7quGl0iVJSGsITTV53BqhMLZUIGdHAUbDQWiOaCrwgWzMJYMbYEZgiyZegBUgqEK3T3tm80WEyz6EmmUTeFEkbOJAA1gxxQZHollQ4PF5Kk3AkEYkbMTjCTEKZIzsbAwZwlEDLrO89ig5Rgq8l8NqJ/sxAdUlxCoWrAbQAKoyWRH0kHo9HuGSM9yI%2B6GkomSNPoY7HnuS0XVkt%2ByWmjmIQAA2JwAFolkISRMFETAFFGAgGBCKdnwAFQQTBJCcSQIGvY85F4bs8AmBZmC8dAaiWFNJAIVIJiguDJGI6ZBRGSRBTmVAhETLNWXZSjUMkABlfjsAw%2BdkjwdiagYQUHAOJIMGFViGDwMlMHUf9ZFQBQyig5JJFQFlFGUtD0GYXY8CFVM0A4gguImNISEJFhHzmVDkBrXjjII6MvAUJY9kkeziFsQUYJY9B0BGTwEP0XUHAYOcF3eLdlVVMogI1BKhBqVwdUkXtXxtLoMMkWkYixR1XBiX9XHpCAKlA8DIOg2CJhGQV0DWQKjigoR8CEQ42SoyQqGIzIs0kAB5AAlaKJRnDASyS8EUmYQYoOhDcwQAWS24x%2BIACX3AAxI6ABlsDqmo7SvGpaAfP1EIeKUnji4wFsXLcVzXTbkshYgNsqbCjzq3hgLqUg70h%2B6nx7VpjUaCAVm/Cpu0dWpdWq2qgIazImpgwtZsevLWgASRuLM1jxlrJCETBRU5TBZk1BgahWFgoyEMBOEyUNMio6CWMrDzh0FNYWD5viiBKPSbn5yRUmADkEAjG5Bo5Vj6rAzJTguILrluBsYr6V73qWpVK1SvB0pN8KrvlYDMP4PgIjw3K9XyyRgCYpZBVDAkkcK7BrpKl1RyDI3YYEoT5XQVBxk57n5ektC/NGEthETYhmGQbZ2JZyRY9LdYs2YCM9kN6dnsSG30FSRdwWLDw8ASDKFrBJU/oBiA70kYDSR7vvobmquZRBemza%2BEgm5b17MHnLLZwW1JUXDvURmTYgvU1UVH39MdDHHAR0hK8P0QWNJhAI1D06waMjBnFsXHcTxMA7Ee2m7YmX37NZyRiEcar%2BknBHSU/hEhkk1PXJUhQu6bhys5A0z54ae29r7TANQvbEB9n7P%2BaNnQoKwWg1044iYzmBK8KBXwUqwKum7RBHtyqB2ugHToQcagyCOhwjhxCD4gPREdEmAANLa2BYxUQIpMCYPs3JnCYugfOFwRaLAHNvEsUFPCSVQNIUh78sTtRLDECeZhUDzmhOlchGQV46LATYLEKxIFGP0V3CxWo9HhTdgwx0l4WHaGulw/gnCAk8LdAaOxDicjJRgbuSoYSQS3ToZ4phrNHR%2BICf4o6PDibLSICMDw6BV6xHXp6U09iQS72DOmYeNiSm6FKpQ4xrY1TWysSAmccUQT1KcdEqoNQ7G1LoUgk0ZpA74itJSbol4HQjOupjKp0oBx6kcb1aeVgIB9J7stTu3SB793vC0xBsVwmKi%2BF0gElR2mvFZgMhh4zRkDjRqSKZrDqQlWCdY%2BZmp5RGOod0i5GQah4QQZHZBwznmWnudM%2B0tz8GzKJu6DeW8QS%2BmAXqdMTQ97hz4PwNO6ROBBFIKILgrhOCkCEFwXQJLUBcGPLwKItLbAsDYGhLFtASUEHJXi/FNYQD8EsOofguh%2BAAVoAATgAgBVwugnCuBFXaQlnAnAkrJZwClpAqWcBJQwEAd52UqrxaQOAsAkBoC0hWYY5BKAmu0sMEAwAwhwgvlsS4lAlgctIGBIQTEVhcFZaQE1%2BMCATSEHsN1WAFBZmAFBUNeARg5zwPOLVerSCYCxJgZAKYOCcF9SoSCPq2VqAUHm/FKoEzwHxfpXOHEuDASZL3RM%2BScjACEMwEVIre4AHUy69wmvwXuChky03eAwGsKxRCChrGhYCCgX4YSnZ4Lw/BNWMvYHQYtRKlVuvVViSwAFgJAU9sgZAkgwjqHlBAXAhAHIspqBpU1OlpACDumyjlKJSDcqsPygCAqnBhFqbQACvBdBhFcGEAlXBFWks3VwTV2rSC6opfiw1iAUCaWtWQCgEArVmuICgMd/VJV3kdSKZILq3Ueq9Xmv1mkA1BpDUmsNEao30ZjWm7YCa3UprTRmyjOb5W%2BtUIoItBK8ClsgOWgyedq21uAvW94TaW1tuAp2oWwEe19oHZgIdI6x0TpiHOrwEGmCsBXXdMDnBiWQaTVunde6MJiAjZIVw6hdDOcwhenJD7%2BCklvWhzzeFn16tfdy/g/B%2BUhfCxFiLZmIPKtVeqmDOqX1rs4LwDdVnoNwaS6QUSSl2IgCcEAA%3D%3D%3D

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Intel x86 架构上使用非 AVX 指令移动 xmm 整数寄存器值 的相关文章

  • 结构化绑定中缺少类型信息

    我刚刚了解了 C 中的结构化绑定 但有一件事我不喜欢 auto x y some func is that auto正在隐藏类型x and y 我得抬头看看some func的声明来了解类型x and y 或者 我可以写 T1 x T2 y
  • 如何将 std::string& 转换为 C# 引用字符串

    我正在尝试将 C 函数转换为std string参考C 我的 API 如下所示 void GetStringDemo std string str 理想情况下 我希望在 C 中看到类似的东西 void GetStringDemoWrap r
  • 在 xaml 中编写嵌套类型时出现设计时错误

    我创建了一个用户控件 它接受枚举类型并将该枚举的值分配给该用户控件中的 ComboBox 控件 很简单 我在数据模板中使用此用户控件 当出现嵌套类型时 问题就来了 我使用这个符号来指定 EnumType x Type myNamespace
  • 类型中的属性名称必须是唯一的

    我正在使用 Entity Framework 5 并且有以下实体 public class User public Int32 Id get set public String Username get set public virtual
  • 汇编程序中的过程调用如何工作?

    我刚刚开始摆弄 ASM 我不确定我对过程调用的理解是否正确 假设代码中的某个时刻有一个过程调用 call dword ptr 123 该过程仅包含一个命令 ret ret 0004 该过程调用的效果是什么 返回值将存储在哪里 我在某处读到
  • 如何在 C# 中打开 Internet Explorer 属性窗口

    我正在开发一个 Windows 应用程序 我必须向用户提供一种通过打开 IE 设置窗口来更改代理设置的方法 Google Chrome 使用相同的方法 当您尝试更改 Chrome 中的代理设置时 它将打开 Internet Explorer
  • 如何从本机 C(++) DLL 调用 .NET (C#) 代码?

    我有一个 C app exe 和一个 C my dll my dll NET 项目链接到本机 C DLL mynat dll 外部 C DLL 接口 并且从 C 调用 C DLL 可以正常工作 通过使用 DllImport mynat dl
  • -webkit-box-shadow 与 QtWebKit 模糊?

    当时有什么方法可以实现 webkit box shadow 的工作模糊吗 看完这篇评论错误报告 https bugs webkit org show bug cgi id 23291 我认识到这仍然是一个问题 尽管错误报告被标记为RESOL
  • 如何连接重叠的圆圈?

    我想在视觉上连接两个重叠的圆圈 以便 becomes 我已经有部分圆的方法 但现在我需要知道每个圆的重叠角度有多大 但我不知道该怎么做 有人有主意吗 Phi ArcTan Sqrt 4 R 2 d 2 d HTH Edit 对于两个不同的半
  • 需要帮助优化算法 - 两百万以下所有素数的总和

    我正在尝试做一个欧拉计划 http projecteuler net问题 我正在寻找 2 000 000 以下所有素数的总和 这就是我所拥有的 int main int argc char argv unsigned long int su
  • C# 列表通用扩展方法与非通用扩展方法

    这是一个简单的问题 我希望 集合类中有通用和非通用方法 例如List
  • 为什么 C# 2.0 之后没有 ISO 或 ECMA 标准化?

    我已经开始学习 C 并正在寻找标准规范 但发现大于 2 0 的 C 版本并未由 ISO 或 ECMA 标准化 或者是我从 Wikipedia 收集到的 这有什么原因吗 因为编写 审查 验证 发布 处理反馈 修订 重新发布等复杂的规范文档需要
  • 两个类可以使用 C++ 互相查看吗?

    所以我有一个 A 类 我想在其中调用一些 B 类函数 所以我包括 b h 但是 在 B 类中 我想调用 A 类函数 如果我包含 a h 它最终会陷入无限循环 对吗 我能做什么呢 仅将成员函数声明放在头文件 h 中 并将成员函数定义放在实现文
  • 如何在 Android 中使用 C# 生成的 RSA 公钥?

    我想在无法假定 HTTPS 可用的情况下确保 Android 应用程序和 C ASP NET 服务器之间的消息隐私 我想使用 RSA 来加密 Android 设备首次联系服务器时传输的对称密钥 RSA密钥对已在服务器上生成 私钥保存在服务器
  • 有没有办法让 doxygen 自动处理未记录的 C 代码?

    通常它会忽略未记录的 C 文件 但我想测试 Callgraph 功能 例如 您知道在不更改 C 文件的情况下解决此问题的方法吗 设置变量EXTRACT ALL YES在你的 Doxyfile 中
  • 为什么C++代码执行速度比java慢?

    我最近用 Java 编写了一个计算密集型算法 然后将其翻译为 C 令我惊讶的是 C 的执行速度要慢得多 我现在已经编写了一个更短的 Java 测试程序和一个相应的 C 程序 见下文 我的原始代码具有大量数组访问功能 测试代码也是如此 C 的
  • C++ 中的 include 和 using 命名空间

    用于使用cout 我需要指定两者 include
  • 在OpenGL中,我可以在坐标(5, 5)处精确地绘制一个像素吗?

    我所说的 5 5 正是指第五行第五列 我发现使用屏幕坐标来绘制东西非常困难 OpenGL 中的所有坐标都是相对的 通常范围从 1 0 到 1 0 为什么阻止程序员使用屏幕坐标 窗口坐标如此严重 最简单的方法可能是通过以下方式设置投影以匹配渲
  • Mono 应用程序在非阻塞套接字发送时冻结

    我在 debian 9 上的 mono 下运行一个服务器应用程序 大约有 1000 2000 个客户端连接 并且应用程序经常冻结 CPU 使用率达到 100 我执行 kill QUIT pid 来获取线程堆栈转储 但它总是卡在这个位置
  • 现代编译器是否优化乘以 1 和 -1

    如果我写 template

随机推荐

  • 在Python中从大文件中搜索单词列表

    我是新蟒蛇 我有一个单词列表和一个非常大的文件 我想删除文件中包含单词列表中的单词的行 单词列表按排序给出 并且可以在初始化期间输入 我正在努力寻找解决这个问题的最佳方法 我现在正在进行线性搜索 这花费了太多时间 有什么建议么 您可以使用i
  • 使用什么来移动 UIView self.frame 或 self.transform 属性?

    这个问题我有点困惑 我知道我可以改变观点self frame origin 但我发现有一个名为 变换 的属性 我认为这是用于在屏幕上移动我的视图等 也许我有点不明白 所以我想知道 我必须使用哪个房产来搬家UIView 或者它的子类 另一个类
  • 如何从 PROC 获取有关子进程的信息

    我正在尝试编写一个以几个进程作为参数的程序 然后父进程执行每个子进程并打印出一些相关的统计信息 示例 generate ls l 将生成一个程序 打印出有关 ls l 的一些统计信息 特别是其系统时间 用户时间和上下文切换次数 我不想使用
  • 存储网站的多种语言版本的最佳方式是什么?

    我的网站 在 Linux 服务器上 需要支持多种语言 拥有 存储同一网站的多种语言版本的最佳实践是什么 我能想到的一些 存储在数据库中 每种语言都有不同的视图文件 gettex PHP 文件中的硬编码字 如 phpBB 中 对于网站 您确实
  • 从 Azure ML 实验中访问 Azure Blob 存储

    Azure ML 实验提供了通过以下方式读取 CSV 文件并将其写入 Azure Blob 存储的方法 Reader and Writer模块 但是 我需要将 JSON 文件写入 blob 存储 由于没有模块可以执行此操作 因此我尝试在Ex
  • 为什么Iterator接口没有add方法

    In IteratorSun 添加了remove 方法来删 除集合中最后访问的元素 为什么没有add方法来向集合中添加新元素 它可能对集合或迭代器产生什么样的副作用 好的 我们开始吧 设计常见问题解答中明确给出了答案 为什么不提供 Iter
  • IndexError:索引 10 超出尺寸为 10 的轴 0 的范围

    我正在以数字方式为 x 网格和 x 向量以及时间网格设置网格 但我再次设置了一个数组x 位置 只能在 0 到 20 之间并且t 时间 将从 0 到 1000 以便求解热方程 但每次我想要 例如 我将步数设置为 10 时 都会收到错误 Tra
  • 使用 Django 将文件异步上传到 Amazon S3

    我使用此文件存储引擎在上传文件时将文件存储到 Amazon S3 http code welldev org django storages wiki Home http code welldev org django storages w
  • localhost/live - 通过 HTTP_HOST 检测

    假设我在本地开发并在实时服务器上调试小东西 在我的代码中添加这样的内容是个好主意吗 is local strpos SERVER HTTP HOST localhost false define DEBUG is local 然后在设置内容
  • 无法理解 .vimrc 中的一行

    我不明白以下行在 vimrc 中的作用 nmap
  • 如何检测图像是否像素化

    之前有人在 SO 上提出过这样的问题 在Python中检测像素化图像 https stackoverflow com questions 12942365 detecting a pixelated image in python还有关于q
  • Spring Boot在jar文件中找不到urlrewrite.xml

    我将 Spring Boot 与嵌入式 Tomcat 一起使用 类 UrlRewriteFilter 找不到配置文件 urlrewrite xml 该类使用 servletcontext getResourceAsStream this c
  • fork() 是如何工作的?

    我对fork真的很陌生 这段代码中的pid在做什么 有人可以解释一下 X 行和 Y 行的结果吗 include
  • Zend RegEx Validator 的自定义有意义的错误消息

    我正在验证表单中的文本字段 如下所示 name new Zend Form Element Text name name gt setLabel First Name gt setRequired true gt addFilter new
  • ASP.NET Core 2 - GetUserIdAsync 返回带有 Guid Id 的 null 结果

    我当前正在将网站移植到 ASP NET Core 2 并且在调用时抛出以下异常userManager GenerateEmailConfirmationTokenAsync user 具有扩展的用户类IdentityUser
  • 在git的远程存储库上创建私有分支

    我想在我们公司的 git 上构建特定的流程 开发人员在他的本地计算机上创建一个分支并在那里提交一些文件 dev 将此分支推送到远程仓库 其他开发者无法访问该分支 经过几轮推动开发人员决定发布他的更改 将他的私人分支合并到公共分支 推动该公共
  • matplotlib 未检测到字体

    当我使用fontname 与Humor Sans字体我收到此错误 usr lib python3 5 site packages matplotlib font manager py 1288 UserWarning findfont Fo
  • Java中的断点和逐步调试?

    抱歉我的问题名称很奇怪 我不知道如何寻找这个 因为我不知道这些东西是如何称呼的 Visual Studio 中至少有一个功能 您可以单击代码左侧并设置一个大红点的起点 然后运行程序 您可以通过按 f8 或 f5 实际上是不同的 f 来跟踪步
  • 重新组织链式可观察量

    我有一大块链接的 Rx 可观察量 当通过选择表视图行时会触发这些可观察量table rx modelSelected 我希望能够打破这个逻辑 因为我目前必须在flatMapLatest 因为这是流程的 第一步 感觉不对 我必须在后续执行更多
  • 在 Intel x86 架构上使用非 AVX 指令移动 xmm 整数寄存器值

    我有以下问题 需要使用 AVX2 以外的任何工具来解决 我有 3 个值存储在 m128i 变量中 不需要第四个值 需要将这些值移动 4 3 5 我需要两个功能 一个用于按这些值进行右逻辑移位 另一个用于左逻辑移位 有谁知道使用 SSE AV