Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. Other Discussions
  3. Clever Code
  4. weird optimization

weird optimization

Scheduled Pinned Locked Moved Clever Code
databasealgorithmsdata-structuresperformancehelp
19 Posts 9 Posters 3 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • M Mike Dimmick

    Congratulations, you've found an optimization bug. Please report this to your compiler vendor. I'm guessing it's erroneously reusing a register, or not saving a value back to a memory location, or something like that. volatile requires the compiler to go back to the memory location every time (because it could have changed in a different code path) rather than use a previous value stored in a register.

    Stability. What an interesting concept. -- Chris Maunder

    M Offline
    M Offline
    Mladen Jankovic
    wrote on last edited by
    #10

    And what if I don't? :D By the way, I'm I the only one who think this message board (last two threads) are messed up?

    Mostly, when you see programmers, they aren't doing anything. One of the attractive things about programmers is that you cannot tell whether or not they are working simply by looking at them. Very often they're sitting there seemingly drinking coffee and gossiping, or just staring into space. What the programmer is trying to do is get a handle on all the individual and unrelated ideas that are scampering around in his head. (Charles M Strauss)

    P 1 Reply Last reply
    0
    • M Mladen Jankovic

      Posted code was just part of a method, and originally it's not usin built-in random generator. I have made test project, to see what's wrong.

      int _tmain(int argc, _TCHAR* argv[])
      {
      srand( (unsigned int) time(NULL) );

      int size = 10;
      int\* old = new int\[ size \];
      
      for( int i = 0; i < size; i++ )
      {
      	int index;
      	bool duplicate = false;
      	do	
      	{		
      		index = rand() % size;
      		for( int j = 0; j < i; j++ )
      		{			
      			duplicate = old\[ j \] == index;			
      			if( duplicate )				
      				break;		
      		}	
      	} while( duplicate );	
      
      	old\[ i \] = index;
      }
      
      for( int i = 0; i < size; i++ )
      	cout << old\[ i \] << "\\n";
      
      for( int i = 0; i < size; i++ )
      {
      	for( int j = i + 1; j < size; j++ )
      	{
      		if( old\[ i \] == old\[ j \] )
      			cout << "old\[" << i << "\]==old\[" << j << "\]==" << old\[ i \] << "\\n";
      	}
      }
      
      delete old;
      
      return 0;
      

      }

      Ouput: 8 3 7 6 0 9 8 3 1 4 old[0]==old[6]==8 old[1]==old[7]==3 Compiler used is MS VC++ 8.0. Building project as Debug produces no duplicates, but as Release produces more the one duplicate.

      Mostly, when you see programmers, they aren't doing anything. One of the attractive things about programmers is that you cannot tell whether or not they are working simply by looking at them. Very often they're sitting there seemingly drinking coffee and gossiping, or just staring into space. What the programmer is trying to do is get a handle on all the individual and unrelated ideas that are scampering around in his head. (Charles M Strauss)

      P Offline
      P Offline
      PIEBALDconsult
      wrote on last edited by
      #11

      Mladen Jankovic wrote:

      Compiler used is MS VC++ 8.0

      Oh, well, there's your problem. :-D Could you try my version and let me know whether or not it works?

      M 1 Reply Last reply
      0
      • P PIEBALDconsult

        Mladen Jankovic wrote:

        Compiler used is MS VC++ 8.0

        Oh, well, there's your problem. :-D Could you try my version and let me know whether or not it works?

        M Offline
        M Offline
        Mladen Jankovic
        wrote on last edited by
        #12

        PIEBALDconsult wrote:

        Could you try my version and let me know whether or not it works?

        Yes it works.

        Mostly, when you see programmers, they aren't doing anything. One of the attractive things about programmers is that you cannot tell whether or not they are working simply by looking at them. Very often they're sitting there seemingly drinking coffee and gossiping, or just staring into space. What the programmer is trying to do is get a handle on all the individual and unrelated ideas that are scampering around in his head. (Charles M Strauss)

        1 Reply Last reply
        0
        • M Mladen Jankovic

          And what if I don't? :D By the way, I'm I the only one who think this message board (last two threads) are messed up?

          Mostly, when you see programmers, they aren't doing anything. One of the attractive things about programmers is that you cannot tell whether or not they are working simply by looking at them. Very often they're sitting there seemingly drinking coffee and gossiping, or just staring into space. What the programmer is trying to do is get a handle on all the individual and unrelated ideas that are scampering around in his head. (Charles M Strauss)

          P Offline
          P Offline
          peterchen
          wrote on last edited by
          #13

          Just out of curiosity, which compiler are you using?


          We are a big screwed up dysfunctional psychotic happy family - some more screwed up, others more happy, but everybody's psychotic joint venture definition of CP
          My first real C# project | Linkify!|FoldWithUs! | sighist

          M 1 Reply Last reply
          0
          • P peterchen

            Just out of curiosity, which compiler are you using?


            We are a big screwed up dysfunctional psychotic happy family - some more screwed up, others more happy, but everybody's psychotic joint venture definition of CP
            My first real C# project | Linkify!|FoldWithUs! | sighist

            M Offline
            M Offline
            Mladen Jankovic
            wrote on last edited by
            #14

            VC++ 8 SP1, but it looks like that Beta version of Orcas has same bug. I have posted message on MSDN forum, and their moderator submited bug to VS team: https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?feedbackID=292132

            Mostly, when you see programmers, they aren't doing anything. One of the attractive things about programmers is that you cannot tell whether or not they are working simply by looking at them. Very often they're sitting there seemingly drinking coffee and gossiping, or just staring into space. What the programmer is trying to do is get a handle on all the individual and unrelated ideas that are scampering around in his head. (Charles M Strauss)

            P M 2 Replies Last reply
            0
            • M Mladen Jankovic

              VC++ 8 SP1, but it looks like that Beta version of Orcas has same bug. I have posted message on MSDN forum, and their moderator submited bug to VS team: https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?feedbackID=292132

              Mostly, when you see programmers, they aren't doing anything. One of the attractive things about programmers is that you cannot tell whether or not they are working simply by looking at them. Very often they're sitting there seemingly drinking coffee and gossiping, or just staring into space. What the programmer is trying to do is get a handle on all the individual and unrelated ideas that are scampering around in his head. (Charles M Strauss)

              P Offline
              P Offline
              peterchen
              wrote on last edited by
              #15

              That's freaking scary!


              We are a big screwed up dysfunctional psychotic happy family - some more screwed up, others more happy, but everybody's psychotic joint venture definition of CP
              My first real C# project | Linkify!|FoldWithUs! | sighist

              M 1 Reply Last reply
              0
              • P peterchen

                That's freaking scary!


                We are a big screwed up dysfunctional psychotic happy family - some more screwed up, others more happy, but everybody's psychotic joint venture definition of CP
                My first real C# project | Linkify!|FoldWithUs! | sighist

                M Offline
                M Offline
                Mladen Jankovic
                wrote on last edited by
                #16

                Bug or what? ;)

                Mostly, when you see programmers, they aren't doing anything. One of the attractive things about programmers is that you cannot tell whether or not they are working simply by looking at them. Very often they're sitting there seemingly drinking coffee and gossiping, or just staring into space. What the programmer is trying to do is get a handle on all the individual and unrelated ideas that are scampering around in his head. (Charles M Strauss)

                1 Reply Last reply
                0
                • M Mladen Jankovic

                  This peace of code (which should generate array of unique random numbers) works perfectly with on optimization. (No multithreading, by the way) int* old = new int[ size ]; for( int i = 0; i < size; i++ ) { int index; bool duplicate = false; do { index = rand(); for( int j = 0; j < i; j++ ) { duplicate = old[ j ] == index; if( duplicate ) break; } } while( duplicate ); old[ i ] = index; } But if I turn on optimization sometimes it produce exactly on duplicate. Adding volatile fixs the problem, but still i don't understand :confused: volatile bool duplicate = false; or for( volatile int j = 0; j < i; j++ )

                  Mostly, when you see programmers, they aren't doing anything. One of the attractive things about programmers is that you cannot tell whether or not they are working simply by looking at them. Very often they're sitting there seemingly drinking coffee and gossiping, or just staring into space. What the programmer is trying to do is get a handle on all the individual and unrelated ideas that are scampering around in his head. (Charles M Strauss)

                  D Offline
                  D Offline
                  David Crow
                  wrote on last edited by
                  #17

                  Your code snippet seems a bit inefficient. Try something like:

                  __inline void Swap( int &a, int &b )
                  {
                  int t = b;
                  b = a;
                  a = t;
                  }

                  void main( void )
                  {
                  int array[10] = {0};
                  int n = 10;

                  for (int i = 0; i < n; i++)
                      array\[i\] = i;
                  
                  for (i = 0; i < n; i++)
                  { 
                      int j = rand() % n;
                      Swap(array\[j\], array\[i\]);
                  }
                  

                  }


                  "A good athlete is the result of a good and worthy opponent." - David Crow

                  "To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne

                  1 Reply Last reply
                  0
                  • M Mladen Jankovic

                    This peace of code (which should generate array of unique random numbers) works perfectly with on optimization. (No multithreading, by the way) int* old = new int[ size ]; for( int i = 0; i < size; i++ ) { int index; bool duplicate = false; do { index = rand(); for( int j = 0; j < i; j++ ) { duplicate = old[ j ] == index; if( duplicate ) break; } } while( duplicate ); old[ i ] = index; } But if I turn on optimization sometimes it produce exactly on duplicate. Adding volatile fixs the problem, but still i don't understand :confused: volatile bool duplicate = false; or for( volatile int j = 0; j < i; j++ )

                    Mostly, when you see programmers, they aren't doing anything. One of the attractive things about programmers is that you cannot tell whether or not they are working simply by looking at them. Very often they're sitting there seemingly drinking coffee and gossiping, or just staring into space. What the programmer is trying to do is get a handle on all the individual and unrelated ideas that are scampering around in his head. (Charles M Strauss)

                    G Offline
                    G Offline
                    ghle
                    wrote on last edited by
                    #18

                    Good programmers don't "break" out of "for" loops.

                    1 Reply Last reply
                    0
                    • M Mladen Jankovic

                      VC++ 8 SP1, but it looks like that Beta version of Orcas has same bug. I have posted message on MSDN forum, and their moderator submited bug to VS team: https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?feedbackID=292132

                      Mostly, when you see programmers, they aren't doing anything. One of the attractive things about programmers is that you cannot tell whether or not they are working simply by looking at them. Very often they're sitting there seemingly drinking coffee and gossiping, or just staring into space. What the programmer is trying to do is get a handle on all the individual and unrelated ideas that are scampering around in his head. (Charles M Strauss)

                      M Offline
                      M Offline
                      Member 1229083
                      wrote on last edited by
                      #19

                      Well done, good catch! "Codegen problem with nested do-while / for loops (/O2)" I just gave my vote of Very-Important. Note-to-self: try to avoid flying with Microsoft powered airplanes.

                      1 Reply Last reply
                      0
                      Reply
                      • Reply as topic
                      Log in to reply
                      • Oldest to Newest
                      • Newest to Oldest
                      • Most Votes


                      • Login

                      • Don't have an account? Register

                      • Login or register to search.
                      • First post
                        Last post
                      0
                      • Categories
                      • Recent
                      • Tags
                      • Popular
                      • World
                      • Users
                      • Groups