- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我尝试使用 _mm256_load_ps() 内在函数来使我的程序运行得更快。这意味着我想一次加载 8 个 float 并将它们存储在 266b vector 中以用于进一步计算。
/* code snipet */
a_vec = _mm256_load_ps(&a[0])
b_vec = _mm256_load_ps(&b[0])
res = _mm256_addsub_ps(a,b)
/* code snipet */
此外,我在 makefile 中使用了这些标志:
CC=gcc
CFLAGS=-g -c -Wall -O5 -mavx -mfma -ffast-math
并且我已确保我的处理器支持 AVX 扩展。但是当我编译代码时,我不断收到此警告:
警告:未启用 AVX 的 AVX vector 返回会更改 ABI [-Wpsabi]
PS:我使用的是 Ubuntu 12.04 LTS 64 位
最佳答案
您的 Makefile 或构建中的其他内容已损坏。 -O5 -mavx
肯定会启用 AVX,因此该警告会告诉我们您的编译器没有看到这些选项。
据推测,您的代码根本无法编译,并且稍后会出现错误消息。如果未启用 AVX 支持,则无法识别 _mm256_load_ps
。
这段代码:
#include <immintrin.h>
__m256 foo(const float *a, const float *b)
{
__m256 a_vec = _mm256_load_ps(&a[0]); // assumes a and b are 32-byte aligned.
__m256 b_vec = _mm256_load_ps(&b[0]);
__m256 res = _mm256_addsub_ps(a_vec, b_vec);
return res;
}
使用gcc -march=haswell -O3
(-march=haswell
暗示-mavx
)对我来说编译得很好。 The asm output is :
vmovaps ymm0, YMMWORD PTR [rdi]
vaddsubps ymm0, ymm0, YMMWORD PTR [rsi]
ret
<小时/>
请注意,在正常的 Makefile 设置中,-c
不应成为 CFLAGS
的一部分。它应该是 .c
到 .o
模式规则的一部分。
此外,使用更现代的编译器将获得更好的结果。 Ubuntu 12.04 已经有 5 年多的历史了,在 AVX 还很新的时候就已经出现了。较新的编译器在最近的 CPU 扩展方面做得更好。 gcc6.3是一个不错的选择。 gcc7.1 已经发布,但它仍然很新。
关于c - 使用 _mm256_load_ps() Intel 内在函数时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44811620/
我是一名优秀的程序员,十分优秀!