C++ 调用always_inline';时内联失败__m256d(mm256)广播(const double)和#x27 ;;

C++ 调用always_inline';时内联失败__m256d(mm256)广播(const double)和#x27 ;;,c++,gcc,x86,intrinsics,avx,C++,Gcc,X86,Intrinsics,Avx,我正在尝试运行一个由我的一个朋友创建的VisualStudioCPP项目。我试图在不使用VS的情况下运行该文件,但我得到了一个错误列表,所有错误的格式都相同: inlining failed in call to always_inline '__m256d _mm256_broadcast_sd(const double*)': target specific option mismatch| 它在VS和release模式下正确运行,在debug模式下运行时中断 includes如下所示:

我正在尝试运行一个由我的一个朋友创建的VisualStudioCPP项目。我试图在不使用VS的情况下运行该文件,但我得到了一个错误列表,所有错误的格式都相同:

inlining failed in call to always_inline '__m256d _mm256_broadcast_sd(const double*)': target specific option mismatch|
它在VS和release模式下正确运行,在debug模式下运行时中断

include
s如下所示:

#include "stdafx.h"
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <vector>
# include <omp.h>
#include <chrono>
#include <fstream>
#include <algorithm>

#include <immintrin.h>

using namespace std::chrono;
using namespace std;
更新:


我正在使用this命令来运行它:
g++-std=c++0x multip.cpp-o multip
,是否有额外的参数来添加-mavx到编译器调用中?

意味着您在GCC调用中缺少一个特性标志。您可能需要将
-mavx
添加到编译器调用中

如果您打算仅在您的计算机上运行此功能,
-march=native
将打开您自己的计算机支持的所有功能标志。

表示您在GCC调用中缺少功能标志。您可能需要将
-mavx
添加到编译器调用中


如果您打算仅在您的计算机上运行此功能,
-march=native
将打开您自己的计算机支持的所有功能标志。

g++-std=c++0x multi.cpp-o multi
这是我使用的,它应该能够在任何人的计算机上运行。@SachiDangalla这需要支持的CPU。它不会在任何人的机器上运行,只会在支持此指令的机器上运行。因此,在具有AVX指令的机器上,代码在VS中正确运行,但不会在命令行中正确运行。是否要使用其他参数?@SachiDangalla,您需要更具体地说明所得到的错误。@SachiDangalla:Visual Studio允许您对编译器尚未启用的指令集使用内部函数。GCC或clang中并非如此。如果您从命令行运行MSVC的编译器,它的工作原理将与从内部运行的编译器相同。。。顺便说一句,我强烈建议使用
-march=native
-march=haswell
,而不仅仅是
-mavx
,设置适合现代CPU的调优选项,以及启用AVX+AVX2+FMA+popcnt+BMI1/2+等,或者为Ryzen设置
-march=znver1
g++-std=c++0x multip.cpp-o multip
这就是我使用的,它应该能够在任何人的机器上运行。@SachiDangalla这需要支持的CPU。它不会在任何人的机器上运行,只会在支持此指令的机器上运行。因此,在具有AVX指令的机器上,代码在VS中正确运行,但不会在命令行中正确运行。是否要使用其他参数?@SachiDangalla,您需要更具体地说明所得到的错误。@SachiDangalla:Visual Studio允许您对编译器尚未启用的指令集使用内部函数。GCC或clang中并非如此。如果您从命令行运行MSVC的编译器,它的工作原理将与从内部运行的编译器相同。。。顺便说一句,我强烈建议使用
-march=native
-march=haswell
,而不仅仅是
-mavx
,设置适用于现代CPU的调谐选项,以及启用AVX+AVX2+FMA+popcnt+BMI1/2+等,或为Ryzen设置
-march=znver1
。旁注无法解决您的问题:您可以使用_mm256\u setzero\u pd()相关:解释GCC/clang与MSVC/ICC的区别:GCC/clang要求您启用使用内部函数的扩展。如果没有
-msse4.1
,它们永远不会发出SSE4.1指令,即使是从内部函数发出的指令。旁注:无法解决您的问题:您可以使用_mm256_setzero_pd()相关:解释GCC/clang与MSVC/ICC的区别:GCC/clang要求您启用使用内部函数的扩展。如果没有
-msse4.1
,它们永远不会发出SSE4.1指令,即使是从内部函数发出。
double zero = 0;
__m256d acc = _mm256_broadcast_sd(&zero);