Блог пользователя dx24816

Автор dx24816, история, 6 лет назад, По-английски

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

  • Проголосовать: нравится
  • +14
  • Проголосовать: не нравится

»
6 лет назад, # |
Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

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.

  • »
    »
    6 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    This was on Codeforces. I have added the codes.

    • »
      »
      »
      6 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      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.

      • »
        »
        »
        »
        6 лет назад, # ^ |
        Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

        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.

        • »
          »
          »
          »
          »
          6 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится

          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.

          • »
            »
            »
            »
            »
            »
            6 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится

            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

            • »
              »
              »
              »
              »
              »
              »
              6 лет назад, # ^ |
                Проголосовать: нравится +1 Проголосовать: не нравится

              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

»
4 года назад, # |
  Проголосовать: нравится +1 Проголосовать: не нравится

Can anyone say what the following line actually do?

#pragma comment(linker, "/stack:200000000")
»
3 года назад, # |
Rev. 3   Проголосовать: нравится 0 Проголосовать: не нравится

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.