Antonio
Antonio

Reputation: 20286

Can I enable vectorization only for one part of the code?

Is there a way to enable vectorization only for some part of the code, like a pragma directive? Basically having as if the -ftree-vectorize is enabled only while compiling some part of the code? Pragma simd for example is not available with gcc...

The reason is that from benchmarking we saw that with -O3 (which enables vectorization) the timings were worse than with -O2. But there are some part of the code for which we would like the compiler to try vectorizing loops.

One solution I could use would be to restrict the compiler directive to one file.

Upvotes: 3

Views: 1371

Answers (1)

Z boson
Z boson

Reputation: 33669

Yes, this is possible. You can either disable it for the whole module or individual functions. You can't however do this for particular loops.

For individual functions use __attribute__((optimize("no-tree-vectorize"))).

For whole modules -O3 automatic enables -ftree-vectorize. I'm not sure how to disable it once it's enabled but you can use -O2 instead. If you want to use all of -O3 except -ftree-vectorize then do this

gcc -c -Q -O3 --help=optimizers > /tmp/O3-opts
gcc -c -Q -O2 --help=optimizers > /tmp/O2-opts
diff /tmp/O2-opts /tmp/O3-opts | grep enabled

And then include all the options except for -ftree-vectorize.

Edit: I don't see -fno-tree-vectorize in the man pages but it works anyway so you can do -O3 -fno-tree-vectorize.

Edit: The OP actually wants to enable vectorization for particular functions or whole modules. In that case for individual functions __attribute__((optimize("tree-vectorize"))) can be used and for whole modules -O2 -ftree-vectorize.

Edit (from Antonio): In theory there is a pragma directive to enable tree-vectorizing all functions that follow

#pragma GCC optimize("tree-vectorize")

But it seems not to work with my g++ compiler, maybe because of the bug mentioned here: How to enable optimization in G++ with #pragma. On the other hand, the function attribute works.

Upvotes: 4

Related Questions