Disable AVX2 functions on non-Haswell processors

前端 未结 2 1233
终归单人心
终归单人心 2021-02-11 02:29

I have written some AVX2 code to run on a Haswell i7 processor. The same codebase is also used on non-Haswell processors, where the same code should be replaced with their SSE e

2条回答
  •  一向
    一向 (楼主)
    2021-02-11 02:53

    If you just want to do this at compile-time then you can do this:

    #ifdef __AVX2__
        // AVX2 code
    #elif __SSE__
        // SSE code
    #else
        // scalar code
    #endif
    

    Note that when you compile with gcc -mavx2 ... then __AVX2__ gets defined automatically. Similarly for __SSE__. (Note also that you can check what's pre-defined by your compiler for any given command line switching using the incantation gcc -dM -E -mavx2 - < /dev/null.)

    If you want to do run-time dispatching though then that's a little more complicated.

提交回复
热议问题