c - 如何解决 vfmadd213ps 的“非法指令”?
问题描述
我已经尝试过 AVX 内在函数。但它导致“test.exe 中 0x00E01555 处未处理的异常:0xC000001D:非法指令。”
我使用了 Visual Studio 2015。异常错误是在“vfmadd213ps ymm2,ymm1,ymm0”指令引起的。我尝试设置“/arch:AVX”和“/arch:AVX2”,但仍然导致错误。下面是我的代码。
#include <immintrin.h>
int main(int argc, char *argv[])
{
float a[8] = { 0 };
float b[8] = { 0 };
float c[8] = { 0 };
__m256 _a = _mm256_loadu_ps(a);
__m256 _b = _mm256_loadu_ps(b);
__m256 _c = _mm256_loadu_ps(c);
__m256 result = _mm256_fmadd_ps(_a, _b, _c);
_mm256_storeu_ps(c, result);
return 0;
}
"__m256 result = _mm256_fmadd_ps(_a, _b, _c);" is disassembly
vmovups ymm0,ymmword ptr [_c]
vmovups ymm1,ymmword ptr [_b]
vmovups ymm2,ymmword ptr [_a]
vfmadd213ps ymm2,ymm1,ymm0
vmovups ymmword ptr [ebp-160h],ymm2
vmovups ymm0,ymmword ptr [ebp-160h]
vmovups ymmword ptr [result],ymm0
以及在“vfmadd213ps ymm2,ymm1,ymm0”引起的错误。
那我做错了什么?操作系统是 win 7 64 位,CPU 是 Intel(R) Core(TM) i7-3520M CPU @ 2.90Ghz(4 个 CPU),~2.9Ghz。
解决方案
因为您的处理器不支持该指令。
FVMADD213PS 是 FMA3 指令集扩展的一部分。英特尔在 Haswell(“第四代核心”)英特尔微架构中增加了对这一指令集扩展的支持;您笔记本电脑中的处理器是 Ivy Bridge(“第三代核心”)部件,因此它太旧了,无法支持此功能。
推荐阅读
- javascript - MS 图形 API:带有“/me/onlineMeetings”请求的 400 AuthenticationError
- firebase - 配置为单页应用(将所有网址重写为/index.html)后出现“出现意外错误”?是的
- maven - 将功能 Websphere Liberty 配置文件添加到应用程序
- node.js - 在重定向之前在 Express 应用中设置自定义引用者
- python - Google Calendar API 删除“conferenceData”嵌套对象
- arrays - 倒排数组(从最低索引读取)
- mysql - PRIMARY KEY 的所有部分都不能为空;如果您需要在键中使用 NULL,请改用 UNIQUE
- python - 如何修改列表中的多个项目?
- c# - 与 PostgreSql 的连接失败
- javascript - 在数学上将归一化值分成三个相等的值