复赛能否使用AVX,SSE等向量指令?

小鼠标 2016-05-02 10:58:26
运行环境说明中指出CPU是Intel Xeon CPU E5-2690 V2,这款CPU是支持AVX向量指令的,GCC使用向量指令只需要包含头文件<immintrin.h>即可,这不是第三方库,而是标准头文件。但使用头文件时需要指定编译选项-mavx,或者-march=native。现在官方的CMakeLists.txt文件里没有加入这些编译选项。
1.复赛能够允许使用AVX向量指令吗?如果允许使用,请加入对应的编译选项。
2.提交之后的程序会在服务器上重新编译后再执行吗?因为加入-march=native选项之后生成的可执行文件在别的机器上很可能会无法执行,因此我在自己机器上编译后交上去会执行失败,需要在服务器上重新编译才行。
...全文
471 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
frostbolt 2016-05-04
  • 打赏
  • 举报
回复
引用 9 楼 syuctzxk 的回复:
[quote=引用 8 楼 frostbolt 的回复:] [quote=引用 7 楼 syuctzxk 的回复:] [quote=引用 6 楼 hooleezzu 的回复:] [quote=引用 3 楼 syuctzxk 的回复:] 我还想加入一个编译选项,然后写多线程呢。既然不让自己写make文件,那还是算了吧
官方限制的不是多线程,而是限制单核吧,Java多线程可是不用额外编译选项的。 [/quote] 然而C++是要加一个编译选项的[/quote] 需要增加什么选项?可以一起看下,如果是共同需求,我们可以考虑加上。[/quote] C++写多线程不是需要加上"-pthread"选项么?然而不考察多线程,但是多线程可能会有用[/quote] 因为根据我们的经验,这个算法并不需要使用多线程,所以没有打开这个编译选项,如果大家确实有这个需求,我们可以加上。
frostbolt 2016-05-04
  • 打赏
  • 举报
回复
引用 11 楼 hooleezzu 的回复:
[quote=引用 10 楼 frostbolt 的回复:] 因为根据我们的经验,这个算法并不需要使用多线程,所以没有打开这个编译选项,如果大家确实有这个需求,我们可以加上。
能不能顺道把AVX的编译选项(-mavx)也加上?CPU和编译器都支持,不用不是浪费么?[/quote] 我们实际使用这个算法的场景并不一定是在X86 cpu上,还是尽量使用高级语言描述这个算法吧。我司的编程规范要求,优先考虑代码的可读、可移植,最后才考虑性能。
小鼠标 2016-05-04
  • 打赏
  • 举报
回复
引用 10 楼 frostbolt 的回复:
因为根据我们的经验,这个算法并不需要使用多线程,所以没有打开这个编译选项,如果大家确实有这个需求,我们可以加上。
能不能顺道把AVX的编译选项(-mavx)也加上?CPU和编译器都支持,不用不是浪费么?
syuctzxk 2016-05-03
  • 打赏
  • 举报
回复
引用 8 楼 frostbolt 的回复:
[quote=引用 7 楼 syuctzxk 的回复:] [quote=引用 6 楼 hooleezzu 的回复:] [quote=引用 3 楼 syuctzxk 的回复:] 我还想加入一个编译选项,然后写多线程呢。既然不让自己写make文件,那还是算了吧
官方限制的不是多线程,而是限制单核吧,Java多线程可是不用额外编译选项的。 [/quote] 然而C++是要加一个编译选项的[/quote] 需要增加什么选项?可以一起看下,如果是共同需求,我们可以考虑加上。[/quote] C++写多线程不是需要加上"-pthread"选项么?然而不考察多线程,但是多线程可能会有用
frostbolt 2016-05-03
  • 打赏
  • 举报
回复
引用 7 楼 syuctzxk 的回复:
[quote=引用 6 楼 hooleezzu 的回复:] [quote=引用 3 楼 syuctzxk 的回复:] 我还想加入一个编译选项,然后写多线程呢。既然不让自己写make文件,那还是算了吧
官方限制的不是多线程,而是限制单核吧,Java多线程可是不用额外编译选项的。 [/quote] 然而C++是要加一个编译选项的[/quote] 需要增加什么选项?可以一起看下,如果是共同需求,我们可以考虑加上。
syuctzxk 2016-05-03
  • 打赏
  • 举报
回复
引用 6 楼 hooleezzu 的回复:
[quote=引用 3 楼 syuctzxk 的回复:] 我还想加入一个编译选项,然后写多线程呢。既然不让自己写make文件,那还是算了吧
官方限制的不是多线程,而是限制单核吧,Java多线程可是不用额外编译选项的。 [/quote] 然而C++是要加一个编译选项的
  • 打赏
  • 举报
回复
我猜测,华为连高级IO都不给用,SIMD指令应该也是禁止的。很明显,华为更侧重的是核心算法的性能,而不是计算机体系结构或者其他方面带来的性能提升。仅仅是个人猜测。
小鼠标 2016-05-02
  • 打赏
  • 举报
回复
引用 3 楼 syuctzxk 的回复:
我还想加入一个编译选项,然后写多线程呢。既然不让自己写make文件,那还是算了吧
官方限制的不是多线程,而是限制单核吧,Java多线程可是不用额外编译选项的。
小鼠标 2016-05-02
  • 打赏
  • 举报
回复
引用 4 楼 frostbolt 的回复:
复赛在选手提交代码后,会重新编译,相应的编译选项不能修改,否则有可能在服务器上编译不过。 对于算法本身来说,10s的时间已经是实际应用场景要求的数百倍,使用特殊CPU指令集并不是必须的。
看来只能想起他办法了啊。
frostbolt 2016-05-02
  • 打赏
  • 举报
回复
复赛在选手提交代码后,会重新编译,相应的编译选项不能修改,否则有可能在服务器上编译不过。 对于算法本身来说,10s的时间已经是实际应用场景要求的数百倍,使用特殊CPU指令集并不是必须的。
syuctzxk 2016-05-02
  • 打赏
  • 举报
回复
我还想加入一个编译选项,然后写多线程呢。既然不让自己写make文件,那还是算了吧
小鼠标 2016-05-02
  • 打赏
  • 举报
回复
引用 1 楼 open_source_library 的回复:
我猜测,华为连高级IO都不给用,SIMD指令应该也是禁止的。很明显,华为更侧重的是核心算法的性能,而不是计算机体系结构或者其他方面带来的性能提升。仅仅是个人猜测。
你这么说也有道理,不过我想华为还是会以问题为导向吧,解决问题才是关键。算法改进无疑能让程序提速,但数据结构,访存局部性等的改进也能带来不容小觑的效果。 我们实验室是做高性能计算的,结合具体CPU做优化,这是经常遇到的事并且<immintrin.h>被GCC支持,只是需要加入一个编译选项,这根加入-O3 -Wall -std=c++11这些选项没有本质的差别,跟不让使用第三方库的规定也没有任何冲突。 不知道官方的态度会是怎样,希望能够尽快给个解释啊。

127

社区成员

发帖
与我相关
我的任务
社区描述
华为软件精英挑战赛(Huawei Code Craft)是华为公司面向全球大学生举办的一年一度的大型软件竞赛,致力于让参赛学生感受软件改变世界魅力,展示软件设计与编程潜力,享受Coding解决问题
开源软件软件工程软件构建 技术论坛(原bbs)
社区管理员
  • HUAWEI Code Craft社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧