【发布时间】:2018-08-15 15:18:34
【问题描述】:
我正在尝试打印出__m256i 变量的值,但出现运行时错误(file.exe 已停止工作!)。我的 CPU 是 Intel 并且支持 AVX 指令。当我评论 cout 行时,代码运行。我正在使用英特尔 C++ 编译器。问题是什么?有没有其他方法可以显示__m256i 变量的内容。我的代码如下:
#include <iostream>
#include <iomanip>
#include "immintrin.h"
using namespace std;
int main()
{
__m256i a;
int i;
a = _mm256_set_epi64x(1, 2, 3, 4);
cout << setfill('0'); // fill with 0s
for (i = 0; i < 4; i++) {
cout << hex << setw(16) << _mm256_extract_epi64(a, i);
}
cout << endl;
cin.get();
return 0;
}
【问题讨论】:
-
它实际编译成什么?尤其是那个提取物,如果不展开循环,这是不可能的
-
是的,编译没有问题。顺便说一句,问题出在 cout 而不是 extract 指令上。没有循环,代码也无法工作(例如 i = 0)。
-
Intel ICC(17 或 18)甚至不编译它(至少在 Linux 上)。 clang 是我发现的唯一一个可以展开循环以获取提取索引的编译时常量的编译器。您使用的是哪个版本的 ICC?
-
我使用 nodepad 输入代码,然后使用 ICC 18 编译它(例如 icl test.cpp),然后运行 exe 文件。我的操作系统是 Windows 10 64 位。无论如何,有没有其他方法可以显示变量a的内容?
-
如果您使用的是G2020 the spec sheet,则表明它不支持AVX。仅支持英特尔® SSE4.1、英特尔® SSE4.2 扩展。