You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MSVC v143 x86平台/_mm256_setr_epi64x/编译错误结果求助

EDIT2:我进一步简化了测试用例并优化了测试代码

这个问题我研究了一周,大概率是编译器BUG,但无法完全确定。

我使用CMake搭配MSVC-19.37.32822.0,target_compile_options设为/arch:AVX(/arch:AVX2同样触发问题),target_compile_features设为cxx_std_20。

_mm256_setr_epi64x和_mm256_set_epi64x这两个intrinsics生成错误结果。Debug构建无此问题,g++、clang++、clang-cl在所有SIMD选项组合下也正常。

该问题仅出现在开启/arch:AVX或/arch:AVX2的x86 MSVC构建中。用/O1和/O2编译可修复问题,仅Release模式出现,是可行方案! 经测试该方案无效。

我仅测试了最新v143工具集(MSVC-19.37.32822.0),未尝试旧版本。

EDIT:
该问题复现难度超预期——Godbolt无法用MSVC编译器运行测试。初步判断与Catch2测试框架相关。我已搭建GitHub复现仓库,含跨平台CMake配置可稳定复现,仓库会自动拉取Catch2。克隆后用VS2022打开CMakeLists.txt即可使用。

以下是复现测试代码片段:

/// FAILS                                                                
TEST_CASE("Testing with GIVEN", "[bug]") {
   const int64_t values[4] {11, 22, 33, 0};

   GIVEN("a1") {
      const __m256i a1 = _mm256_setr_epi64x(
         values[0],
         values[1],
         values[2],
         0 // 如果换成values[3]就能正常运行
      );

      WHEN("a1 is stored") {
         alignas(32) int64_t b1[4];
         _mm256_store_si256(reinterpret_cast<__m256i*>(b1), a1);

         THEN("The result should be correct") {
            REQUIRE(b1[0] == values[0]);
            REQUIRE(b1[1] == values[1]);
            REQUIRE(b1[2] == values[2]); // 这里总是失败
            REQUIRE(b1[3] == values[3]);
         }
      }
   }
}

你可克隆仓库测试,我还添加了GitHub Actions工作流(登录GitHub可查看构建/测试日志)

我已在微软开发者社区提交对应BUG报告,仍希望在此获取更多信息。

内容的提问来源于stack exchange,提问作者Dimo Markov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 03:35:33