Intel Skylake 50% slower in .NET apps than Intel Broadwell

Forumite Members General Topics Tech PC Talk Intel Skylake 50% slower in .NET apps than Intel Broadwell

Viewing 4 posts - 1 through 4 (of 4 total)
  • Author
    Posts
  • #22020
    Ed PEd P
    Participant
      @edps
      Forumite Points: 39

      Why you may want to keep your old Broadwell server! (via Hacker News)

      It looks like a problem with heavily multithreaded applications. As a heavy use of multi-threading has yet to make an appearance in games code, the only other area where this MIGHT make an appearance is in graphics apps such as Photoshop. so no need to panic or start a Class Action against Intel!

       

      #22039
      Wheels-Of-FireWheels-Of-Fire
      Participant
        @grahamdearsley
        Forumite Points: 4

        Hmm lots to look through there ?

        It looks as though the problem is that intel has increased the number of cycles the CPU pause instruction pauses for.

        I have yet to get my head around all the different ways that a thread can gain exclusive access to a system resourse because you can have spin locks, push locks, mutexes, semaphores and more but the pause problem seems to affect spin locks.

        As i understand it if a thread manages to aquire a spinlock on a resourse and another thread requires it then the second thread will not enter a wait on event state thus releasing its CPU but instead it will enter a fixed length loop (spin) before trying again. We are now tying up 2 CPU cores with one doing nothing useful.

        If im right the loop includes a pause instruction so a longer pause means that the second thread now spends longer spinning before checking to see if the resourse is free.

        The aquire spinlock function used in .NET apps appears to make this worse by lncreasing the length of the loop every time it goes round.

        All of the above could be wrong ?

        If there is never any contention because there are only a few threads then the problem never happens.

         

        #22045
        Ed PEd P
        Participant
          @edps
          Forumite Points: 39

          They probably introduce pauses to allow the passing of the semaphores of a thread. (e.g. don’t interrupt, ready to pass data etc)

          #22055
          Wheels-Of-FireWheels-Of-Fire
          Participant
            @grahamdearsley
            Forumite Points: 4

            There is a good reason that the pause instruction was introduced.

            If a Hyperthreaded core is running 2 threads and one of them is just looping the CPU still has to give equal time to both threads. If one of the threads is paused though it is a hint to the CPU to give more time to the other thread.

          Viewing 4 posts - 1 through 4 (of 4 total)
          • You must be logged in to reply to this topic.