Linux运行makefile, g++/gcc出错Error: suffix or operands invalid for `vbroadcastss'

linux系统下编译出错Error: suffix or operands invalid for `vbroadcastss’解决办法

在运行kaggle-2014-criteo-master 开源程序时,由于需编译运行gbdt,libffm程序,makefile时遇到错误,直觉与运行程序的系统有关系。经搜索找到了解决办法。
问题主要是gcc或g++编译时设置了 - march参数,而此参数为平台相关的参数。需要修改此参数值为机器对应的值。
(程序下载地址:https://github.com/ycjuan/kaggle-2014-criteo)
针对这个开源程序只需修改:
[文件路径]/kaggle-2014-criteo/solvers/gbdt 下的Makefile 的
[文件路径]/kaggle-2014-criteo/solvers/libffm-1.13 下的Makefile
-march=native 为-march=broadwel
之后再makefile 错误消失。

报错场景

具体报下面的错:

[dhy@Master kaggle-2014-criteo-master]$ make
make -C solvers/gbdt
make[1]: Entering directory `/home/dhy/code/kaggle-2014-criteo-master/solvers/gbdt'
g++ -Wall -Wconversion -O2 -fPIC -std=c++0x -march=native -fopenmp -o gbdt src/train.cpp src/common.cpp src/timer.cpp src/gbdt.cpp
make[1]: Leaving directory `/home/dhy/code/kaggle-2014-criteo-master/solvers/gbdt'
ln -sf solvers/gbdt/gbdt
make -C solvers/libffm-1.13
make[1]: Entering directory `/home/dhy/code/kaggle-2014-criteo-master/solvers/libffm-1.13'
g++ -Wall -O3 -std=c++0x -march=native -fopenmp -DUSEOMP -c -o ffm.o ffm.cpp
/tmp/ccuUtD2f.s: Assembler messages:
/tmp/ccuUtD2f.s:3671: Error: suffix or operands invalid for `vbroadcastss'
/tmp/ccuUtD2f.s:3787: Error: suffix or operands invalid for `vbroadcastss'
/tmp/ccuUtD2f.s:3917: Error: suffix or operands invalid for `vbroadcastss'
/tmp/ccuUtD2f.s:4071: Error: suffix or operands invalid for `vbroadcastss'
make[1]: *** [ffm.o] Error 1
make[1]: Leaving directory `/home/dhy/code/kaggle-2014-criteo-master/solvers/libffm-1.13'
make: *** [ffm-train] Error 2

解决办法

修改Makefile中,-march=native为-march=broadwell
这是因为gcc/g++ 参数march在不同架构的平台对应不同的-march选项,具体参考:https://gcc.gnu.org/onlinedocs/gcc 中“3.18 Machine-Dependent Options“”小节。查看机器对应的-march的方法为运行下面的命令1

$gcc -c -Q -march=native --help=target | grep march

本人机子上执行上面的命令出现:

-march=                     		broadwell

因此,在编译文件Makefile中 g++或gcc 参数设置为 -march= broadwell。
不同cpu对应march选择可参考下表:2

CPU类型march选项
AMD Barcelona- march=barcelona
AMD Bobcat- march=btver1
AMD Jaguar- march=btver2
AMD Bulldozer- march=bdver1
AMD Piledriver- march=bdver2
AMD Steamroller- march=bdver3
Intel Westmere- march=westmere
Intel Core Nehalem- march=corei7
Intel Core Sandy Bridge- march=corei7-avx
Intel Core Ivy Bridge- march=core-avx-i
Intel Core Haswell- march=core-avx2
Intel Core Broadwell- march=broadwell
Intel Atom Bonnell- march=bonnell
Intel Atom Silvermont- march=silvermont

参考文献


  1. https://blog.csdn.net/listener51/article/details/80468021 ↩︎

  2. http://blog.sciencenet.cn/blog-365047-1014406.html ↩︎

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值