Outsourcing new CPU scores for lobbies
-
@meatontable said in Outsourcing new CPU scores for lobbies:
I'm proposing to multiply the current CPU score by CPU count and divide it by 2.
Wouldn't this skew results of CPU's with many cores even though they are high performance? Like new Ryzen chips, even when they have many cores their single thread performance is also excellent for supcom.
-
Ok . I would like to clarify. Supcom is really old game and it uses 2 cores only. In this case it is no sense to keep in mind how many cores are. Our application uses only 1-2 of them.
I definitely sure that I 'm saying nothing bad about new Ryzen chips.
In our CPUscore Ryzen 9 5900x (3.7HZ)12 cores bits Ryzen 7 5800x 8 cores(3.8GHZ) (I assume that Ryzen 9 has 1.5 twice better value ) but for SUPCom both CPU are near equal and Ryzen7 is better due to better Hz.
CPUscore should show the right information about the slow CPU for the game purpose.
I'm not happy that definitely slow CPU from 2013 year bits more better CPU from 2017 due to the count of cores.... -
@meatontable said in Outsourcing new CPU scores for lobbies:
I'm not happy that definitely slow CPU from 2013 year bits more better CPU from 2017 due to the count of cores....
I don't think you have the right picture of how the CPU test in-game is working. The test that is ran in-game is single threaded, don't know why you are thinking about core counts in this way. A slow older gen 6-core AMD CPU will show up as a slow CPU with the test as it should, it does not gain anything from having a larger core count when compared to e.g. a faster 2-4 core Intel CPU from the same era. You can't compare the CPU score ran manually in a newer lua version to the one used in-game.
Also in case it wasn't clear, lower is better in the FAF CPU test.
-
@giebmasse said in Outsourcing new CPU scores for lobbies:
@meatontable said in Outsourcing new CPU scores for lobbies:
I'm not happy that definitely slow CPU from 2013 year bits more better CPU from 2017 due to the count of cores....
I don't think you have the right picture of how the CPU test in-game is working. The test that is ran in-game is single threaded, don't know why you are thinking about core counts in this way. A slow older gen 6-core AMD CPU will show up as a slow CPU with the test as it should, it does not gain anything from having a larger core count when compared to e.g. a faster 2-4 core Intel CPU from the same era. You can't compare the CPU score ran manually in a newer lua version to the one used in-game.
Also in case it wasn't clear, lower is better in the FAF CPU test.
I have take a function from https://github.com/FAForever/fa/blob/741febf45a165e257db972fc2104484a51dd799d/lua/ui/lobby/lobby.lua#L5228
I do nothing with this function except the adding time check before and after checking CPU score. Original FAF score function is related to the CPU's count but game is a single core application. -
I'm proposing to do next ;
- Inform about CPU and your current CPU score.
- Run replay with max possible speed.
I hope you have 6 or 8 cores CPU.
I also replay the same game and we can compare the running time.
If CPU score is working correctly then CPUscore * running time in sec should be near to equal for everyone.
-
except faf is not a single threaded software
pause a game and have a look in the task manager
you will see up to about 22 threads spread on up to 3 cores
the sim thread runs by itself on 1 core, usually maxed to 100%, this thread/core is the limiting factor
the other main threads such as rendering, networking and audio run on other cores -
agree. I can not see Single core CPU at the market. At least 2 CPU + hypertheding and we have no problem with other parts. Only one process is a bottleneck. Ive noticed few times that some guys have better CPU score but are aking -1 -2 when I can support +2
-
Again, if I'd disable 4 of my cores I'd get the same CPU score result (4 vs 8 cores).
Yes, the game itself is not purely single threaded, but single thread performance is the most vital measurement we can do for CPU's as it is most often one thread that is the bottleneck. (If anyone is interested some info about supcom and threads can be found here: http://www.slideshare.net/guest40fc7cd/threading-successes-02-supreme-commander)So I simply don't understand what you are after with the core count in this case. The score is not perfect and doesn't 100% compare with actual game performance, but that is a given as it is a very simple synthetic test.
About a performance test replay, I believe Marlo worked on a "standardized" replay that could be used for this, does anyone know if it got finished?
-
@giebmasse said in Outsourcing new CPU scores for lobbies:
About a performance test replay, I believe Marlo worked on a "standardized" replay that could be used for this, does anyone know if it got finished?
Agree. The replay test is a best. Also I have disable hypertheading and my CPU score is better for few points. Totally disapointed .
-
@Giebmasse it did - but the 3721 patch broke it , we're working on it.
-
5900x
B550 Aorus Master
32gb 3600 CL16
CPU score is 91/96 -
hello,
I 've bought new DDR4 RAM (3200). This is max value supported by my motherboard.
Of course CPU support 2400 only . Executing ZLO test I have got a little better value , but it is look more as fluctuation not real changes . 18min 5 sec
But the installing new memory droped my CPU score again. The score is 292 now. (was 270 using RAM 2133) and 141 before last changes. -
I'm sorry . I have no executed the test after memory upgrade. Time of the replay is 16.42
Looks like prroblem is here:--This instruction set should cover most LUA operators j = i + i --Addition k = i * i --Multiplication l = k / j --Division m = j - i --Subtraction j = i ^ 4 --Power l = -i --Negation m = {'1234567890', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', true} --Create Table TableInsert(m, '1234567890') --Insert Table Value k = i < j --Less Than k = i == j --Equality k = i <= j --Less Than or Equal to k = not k n[tostring(i)] = m
We have assumption that SupremeCommander has tha same count of the all operation. I'm suspecting that TableInsert is more rare operation then math operations. I've executed code from https://pastebin.com/GUTBXF7a (this is part of cpuscore) and would like to say that My PC spent most of the time on
n[tostring(i)] = m (50% executing time) and
TableInsert(m, '1234567890') --Insert Table Value ( around 40% of the time)
Can we add some weight value and dont worry so much on the memory speed for CPUScore ? -
Inserting a value into a table like that is a common operation however. All effects for example are stored like that (and it is precisely the reason why I'm optimizing them - to prevent these type of allocations as much as possible).
edit: more on topic - we're looking into an alternative to the CPU benchmark by having an actual benchmark map that you can run. This will take time however.
-
After last changes my cpuscore is changed from 291 to 261 . Thank you for this.
Possible I'm wrong but let imagine. Few guys are starting to play using different CPUs and system. If someone has a problem with cooling then the CPU of this player slows down a game at the middle. Of course, we can not detect this issue during the short 10-15 sec test.
I can rewrite a original script for the showing times of each operations (13 or less (as I remember asm , + and - use a same time, and all compare operation are too)). If results from 20-30 guys are present it is possible to write a good forecast. (if we have forgoten a powersave function ). I'm looking a boring guy becouse I'm QA -
How about...
We add a new Trueskill rating but instead of skill it tries to rate CPU of players and adjusts after every match!For each game we figure out the slowest CPU (if we can do that?) and then we tell Trueskill that that player played and lost against all other players of the match in several 1v1s. Over time Trueskill should come up with a ranking of all player's CPUs ??? xD
-
@katharsas that's like using a spade to dig a tunnel under the atlantic. I like the novelty of the idea but you're probably not going to get a very good metric out of it
-
@katharsas said in Outsourcing new CPU scores for lobbies:
How about...
We add a new Trueskill rating but instead of skill it tries to rate CPU of players and adjusts after every match!For each game we figure out the slowest CPU (if we can do that?) and then we tell Trueskill that that player played and lost against all other players of the match in several 1v1s. Over time Trueskill should come up with a ranking of all player's CPUs ??? xD
I have attempted this at the past - on the LUA side we can only retrieve what the current game speed is with no indication as to who causes that. With the benchmark map this doesn't matter - as only one person is in the game .
-
Hm in this case the solution is really simple. We are minus one after each game with no delay and add after game with delay .
Example : we have 5 players : A , B, C, D, E . A has a slow comp pruduces -1 or -2. All gamers have default CPU score rate 100 .
First game : A B C . (game speed -1) = rates A 101 B 101 C 101
Second one : B C D (game speed 0 ) = rates b 100 C 100 D 99
3 : C D E (game min speed 0 ) = rates C 99 D 98 E 99
4. D E A (game speed -1 becouse we have A) = D 99 E 100 A 102
After some time (50 games for player) A will have CPU score around 150 .
Also we need a some saving system : Player with -1 can not pass 200 , with -2 = 300 -
I do not think such a system would work in practice as it takes too long to converge while at the same time the system is easy to manipulate. Even when that is not intended. As an example, if you often play 1v1 ladder and 4v4+ custom games then you gain CPU rating from ladder where as you can lose them from the custom games, evening out on 100 or whatever number is desired at that point in time.
Running a separate benchmark map that simulates the game is the best approach in my opinion. The benchmark map would run at full speed. We could for example take the real time (system time at end - system time at start) it took to run the benchmark as your score. We still need to dive into the details of this - nothing is set in stone.