Forumite Members › General Topics › Tech › PC Talk › Intel Skylake 50% slower in .NET apps than Intel Broadwell
- This topic has 3 replies, 2 voices, and was last updated 7 years, 9 months ago by
Wheels-Of-Fire.
-
AuthorPosts
-
June 18, 2018 at 11:55 am #22020
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!
June 18, 2018 at 11:24 pm #22039Hmm 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.
June 19, 2018 at 7:20 am #22045They probably introduce pauses to allow the passing of the semaphores of a thread. (e.g. don’t interrupt, ready to pass data etc)
June 19, 2018 at 12:19 pm #22055There 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.
-
AuthorPosts
- You must be logged in to reply to this topic.
