Hello,
I use to include the following code into my headers because I saw others doing the same.
#pragma comment(linker, "/stack:200000000")
#pragma GCC optimize("Ofast")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
For the most part, it has made some of my programs that previously got TLE get AC. However I recently kept getting TLE with these comments in the header of my program for a problem, and when I removed them, I got AC. So I'm wondering what do these comments do, and when should I use them? Thanks in advance!
Edit:
Here is the TLE: http://codeforces.me/contest/1009/submission/40353118
Here is the AC: http://codeforces.me/contest/1009/submission/40353105
You can check the only difference is the pragma.
-dx24816
Please give examples of removing these giving AC.
BTW, if this is for USACO, I think they will switch you to optimize level 0 if you use any of these flags. So don't try it there.
This was on Codeforces. I have added the codes.
http://codeforces.me/contest/1009/submission/40353472 http://codeforces.me/contest/1009/submission/40353529
It is optimization flags issue. I remember hearing in the past that optimize levels more aggressive than 2 can actually result in slowdowns. CF uses optimize level 2 by default. Ofast is the one slowing you down the most.
Removing the target instructions also seems to provide a speedup. I don't have any explanation for this.
I see your point. The problem is if I'm on an actually Codeforces contest, how would I know if pragma speeds up my code or slows it down without potentially getting a bad submission, since sometimes adding the pragma on Codeforces turns my code from TLE to AC.
I never use the Ofast pragma. You shouldn't either
For the target instructions, use them when you are trying to brute force something with a lot of simple for loops (preferably over large-sized arrays, or with no arrays at all), that's where it helps the most. Otherwise I don't use them.
I was thinking to use these pragma comments in my code I have found about all the pragma comments from here https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html but there was not much explanation about target pragma. So Can you please give more details on GCC target pragma. Thanks
It's stuff that targets for physical architecture and speeds up brute-force loops and such immensely, and it can be helpful sometimes. See MrDindows or dmkozyrev for more
Can anyone say what the following line actually do?
it increases stack size
https://codeforces.me/contest/1009/submission/153624213 submit it again and get AC
UPD: Sorry I didn't notice the time of this blog, I think it might be because of the judge have been update.