The intel C++ compiler icpc provides following flags for using AVX:
-xAVX, -xavx, -mavx
which one should be used and which is more effective?
If both -xAVX and -xavx are accepted, they would be the same. -mavx differs in that there is no run-time check to see whether the program you have built is running on a recognized Intel AVX platform, so instead of a message about incompatibility you would see illegal instruction fault on a non-AVX platform.
Among the ways you could check is to generate asm files (option -S) and compare to see that the generated code is the same. As far as I know, differences could be taken as evidence of a bug.
Any of the available options will run on an Intel AVX platform, but in most cases the AVX code should run as fast or faster than the backward compatible options.