- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试学习 AVX 指令,并在运行我收到的基本代码时
Illegal instruction (core dumped)
下面提到了代码,我正在使用
编译它g++ -mavx512f 1.cpp
问题到底是什么以及如何克服它?谢谢!
#include <immintrin.h>
#include<iostream>
using namespace std;
void add(const float a[], const float b[], float res[], int n)
{
int i = 0;
for(; i < (n&(~0x31)) ; i+=32 )
{
__m512 x = _mm512_loadu_ps( &a[i] );
__m512 y = _mm512_loadu_ps( &b[i] );
__m512 z = _mm512_add_ps(x,y);
_mm512_stream_ps(&res[i],z);
}
for(; i<n; i++) res[i] = a[i] + b[i];
}
int main()
{
int n = 100000;
float a[n], b[n], res[n];
for(int i = 0;i < n; i++)
{
a[i] = i;
b[i] = i+10;
}
add(a,b,res,n);
for(int i=0;i<n;i++) cout<<res[i]<<" ";
cout<<endl;
return 0;
}
最佳答案
可能您的 CPU 根本不支持 AVX512。
只有这些和更新世代的 CPU support AVX-512 :
Zen 4(大概以后)。
服务器/工作站:Skylake-SP (“至强可扩展性能”)及更高版本,
Skylake-X高端台式机/工作站。
客户:Ice Lake后来例如i5-1035G4 和 Rocket Lake桌面,例如i5-11600.
(还有非常有限的版本 Cannon Lake laptop chip )
这些的赛扬/奔腾版本有 AVX2 但没有 AVX-5121。
不是奥尔德湖(第 12 代);英特尔倒退了他们的 AVX-512 支持,并积极阻止人们在芯片中使用 AVX-512 支持,该芯片最初可在禁用 E 核的情况下使用。
Xeon Phi 计算卡,第 2 代及更高版本 ( Knight's Landing )。
使用 clang 或 g++ -O3 -march=native
启用您的 CPU 支持的所有内容。
如果你遇到编译错误(比如未声明的函数 _mm512_loadu_ps
),你的 CPU 不支持 AVX512 所以 g++ 没有启用它,所以 immintrin.h
不会定义那个内在的。
(或者另一个可能的错误是“内联”目标选项不允许的内置错误。)
如果您想为其他 CPU 制作二进制文件,而不仅仅是您正在编译的机器,请仅使用单独的 -mavx512f
和 -mtune=
选项。
相关:How to test AVX-512 instructions w/o supported hardware?
MSVC 和 ICC 确实允许您在不告诉编译器目标支持它们的情况下使用内部函数,因此这种根据 CPU 检查代码的方法不适用于这些编译器。他们很乐意让您编译不能在当前 CPU 上运行的代码。 (因为 MSVC 假定您将进行运行时 CPU 检测和调度,而不是为每个人分发源代码以针对他们自己的机器进行优化。)
英特尔 processor name/number meanings
AMD 尚未发布任何 AVX-512 CPU(谣言指向 Zen4),而较旧的 Intel 也没有。
Skylake 客户端没有有 AVX-512,只有 Skylake 服务器。
英特尔 Alder Lake混合 (big.LITTLE) CPU won't have AVX-512 ,甚至在大核上也只有 AVX2。
Silvermont/Tremont 等低功耗 CPU 甚至没有 AVX1。
另请注意,AVX-512 有多个扩展,例如 AVX-512VPOPCNTDQ,它引入了 SIMD 指令来计算每个 SIMD 元素中的设置位。查看维基百科的CPUs with AVX-512 table 查看哪个 CPU 有什么。 AVX-512F 是“基础”,AVX-512VL 允许在 128 位和 256 位 vector 上使用很酷的新指令。
脚注 1:旧版 Intel CPU 的奔腾/赛扬版本甚至没有 AVX,只有 SSE4.2。 (也缺少 BMI1/2,因为它们禁用了 VEX 前缀的解码)。
关于c++ - 运行基本 Avx512 代码时获取非法指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56621809/
我需要您在以下方面提供帮助。近一个月来,我一直在阅读有关任务和异步的内容。 我想尝试在一个简单的 wep api 项目中实现我新获得的知识。我有以下方法,并且它们都按预期工作: public Htt
我的可执行 jar 中有一个模板文件 (.xls)。不需要在运行时我需要为这个文件创建 100 多个副本(稍后将唯一地附加)。用于获取 jar 文件中的资源 (template.xls)。我正在使用
我在查看网站的模型代码时对原型(prototype)有疑问。我知道这对 Javascript 中的继承很有用。 在这个例子中... define([], function () { "use
影响我性能的前三项操作是: 获取滚动条 获取偏移高度 Ext.getStyle 为了解释我的应用程序中发生了什么:我有一个网格,其中有一列在每个单元格中呈现网格。当我几乎对网格的内容做任何事情时,它运
我正在使用以下函数来获取 URL 参数。 function gup(name, url) { name = name.replace(/[\[]/, '\\\[').replace(/[\]]/,
我最近一直在使用 sysctl 来做很多事情,现在我使用 HW_MACHINE_ARCH 变量。我正在使用以下代码。请注意,当我尝试获取其他变量 HW_MACHINE 时,此代码可以完美运行。我还认为
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 关闭 9 年前。 要求提供代码的问题必须表现出对所解决问题的最低限度的理解。包括尝试过的解决方案、为什么
由于使用 main-bower-files 作为使用 Gulp 的编译任务的一部分,我无法使用 node_modules 中的 webpack 来require 模块code> dir 因为我会弄乱当
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 5 年前。 Improve this qu
我使用 Gridlayout 在一行中放置 4 个元素。首先,我有一个 JPanel,一切正常。对于行数变大并且我必须能够向下滚动的情况,我对其进行了一些更改。现在我的 JPanel 上添加了一个 J
由于以下原因,我想将 VolumeId 的值保存在变量中: #!/usr/bin/env python import boto3 import json import argparse import
我正在将 MSAL 版本 1.x 更新为 MSAL-browser 的 Angular 。所以我正在尝试从版本 1.x 迁移到 2.X.I 能够成功替换代码并且工作正常。但是我遇到了 acquireT
我知道有很多关于此的问题,例如 Getting daily averages with pandas和 How get monthly mean in pandas using groupby但我遇到
This is the query string that I am receiving in URL. Output url: /demo/analysis/test?startDate=Sat+
我正在尝试使用 javascript 中的以下代码访问 Geoserver 层 var gkvrtWmsSource =new ol.source.ImageWMS({ u
API 需要一个包含授权代码的 header 。这就是我到目前为止所拥有的: var fullUrl = 'https://api.ecobee.com/1/thermostat?json=\{"s
如何获取文件中的最后一个字符,如果是某个字符,则删除它而不将整个文件加载到内存中? 这就是我目前所拥有的。 using (var fileStream = new FileStream("file.t
我是这个社区的新手,想出了我的第一个问题。 我正在使用 JSP,我成功地创建了 JSP-Sites,它正在使用jsp:setParameter 和 jsp:getParameter 具有单个字符串。
在回答 StoreStore reordering happens when compiling C++ for x86 @Peter Cordes 写过 For Acquire/Release se
我有一个函数,我们将其命名为 X1,它返回变量 Y。该函数在操作 .on("focusout", X1) 中使用。如何获取变量Y?执行.on后X1的结果? 最佳答案 您可以更改 Y 的范围以使其位于函
我是一名优秀的程序员,十分优秀!