OpenModelica / OpenModelicaLibraryTesting

Test script for OMCompiler+OpenModelicaLibraries
Other
9 stars 13 forks source link

Heavy-test job should compile one test at a time with all available cores, not just one #139

Open casella opened 4 days ago

casella commented 4 days ago

While checking the latest test reports, I figured that there must have been a misunderstanding in my specifications for the heavy-test job.

This is the regular new backend ScalableTestSuite job report: immagine

and this is the corresponding heavy-test new backend ScalableTestSuite job report:

immagine

All the code generation tasks take 40% less time in the heavy-test job, I guess because you don't have many cores competing for memory access on one or two DMA memory channels. However, the C-compilation task takes 7X times, I guess because we are not running many clang instances in parallel on the available cores. BTW, this explains why the heavy-tests job really takes forever to run.

My intention was that the simulations in the heavy-tests job run as if you are running them standalone on the workstation: one by one, but using all the available memory and cores. For some reason, this probably ended up with just one core being used.

Can you please fix that?

casella commented 4 days ago

This is the chain of calls: https://github.com/OpenModelica/OpenModelicaLibraryTesting/blob/4f2c30f19ca4d3ad9936cdece5c5328c052b1336/.CI/Jenkinsfile#L638

https://github.com/OpenModelica/OpenModelicaLibraryTesting/blob/4f2c30f19ca4d3ad9936cdece5c5328c052b1336/.CI/Jenkinsfile#L967

in this call jobs = 1. It calls the test.py script here: https://github.com/OpenModelica/OpenModelicaLibraryTesting/blob/4f2c30f19ca4d3ad9936cdece5c5328c052b1336/.CI/Jenkinsfile#L1161

so --jobs gets 1 as well. Then, in test.py

https://github.com/OpenModelica/OpenModelicaLibraryTesting/blob/4f2c30f19ca4d3ad9936cdece5c5328c052b1336/test.py#L60

n_jobs gets a value of 1. Later on, single_thread gets a value of "" https://github.com/OpenModelica/OpenModelicaLibraryTesting/blob/4f2c30f19ca4d3ad9936cdece5c5328c052b1336/test.py#L212-L216

which is passed into conf["single_thread_cmd"] https://github.com/OpenModelica/OpenModelicaLibraryTesting/blob/4f2c30f19ca4d3ad9936cdece5c5328c052b1336/test.py#L578

Finally, that configuration (empty string) is used to set the command line options: https://github.com/OpenModelica/OpenModelicaLibraryTesting/blob/4f2c30f19ca4d3ad9936cdece5c5328c052b1336/testmodel.py#L206

But I it is used for the code generation only, which is in fact faster, since some of it is multi-threaded, not for the C compilation. That is handled afterwards by starting make: https://github.com/OpenModelica/OpenModelicaLibraryTesting/blob/4f2c30f19ca4d3ad9936cdece5c5328c052b1336/testmodel.py#L433 which is run with -j1, that I understand means one job at a time, regardless of what the value of jobs was in the call of runRegressiontest()

So I guess if single_tread=="", we should use -j instead.

What I don't get is why the C compile time is 5-7 times smaller with the regular newInst-newBackend job than with the heavy-test job. If both run make with a single thread, the time should be the same.