multiscale / muscle3

The third major version of the MUltiScale Coupling Library and Environment
Apache License 2.0
25 stars 13 forks source link

Resource allocation allocates overlapping cores when it shouldn't #193

Closed LourensVeen closed 1 year ago

LourensVeen commented 1 year ago

If you take the rdmc_cpp.ymmsl file and set micro and macro both to a multiplicity of 8, with 4 threads for macro and 2 for micro, and then run muscle3 resources --cores-per-node 16 --verbose rdmc_cpp.ymmsl rd_implementations.ymmsl, you get:

A total of 2 nodes will be needed, as follows:

macro[0]: Resources(node000001: 0,1,2,3)
macro[1]: Resources(node000001: 4,5,6,7)
macro[2]: Resources(node000001: 10,11,8,9)
macro[3]: Resources(node000001: 12,13,14,15)
macro[4]: Resources(node000002: 0,1,2,3)
macro[5]: Resources(node000002: 4,5,6,7)
macro[6]: Resources(node000002: 10,11,8,9)
macro[7]: Resources(node000002: 12,13,14,15)
mc: Resources(node000001: 0)
micro[0]: Resources(node000001: 0,1)
micro[1]: Resources(node000001: 2,3)
micro[2]: Resources(node000001: 4,5)
micro[3]: Resources(node000001: 6,7)
micro[4]: Resources(node000001: 8,9)
micro[5]: Resources(node000001: 10,11)
micro[6]: Resources(node000001: 12,13)
micro[7]: Resources(node000001: 14,15)
rr: Resources(node000001: 0)

It's putting micro[1] on the same cores as macro[0], while they can overlap computation and should be on separate cores. Expected output:

A total of 2 nodes will be needed, as follows:

macro[0]: Resources(node000001: 0,1,2,3)
macro[1]: Resources(node000001: 4,5,6,7)
macro[2]: Resources(node000001: 10,11,8,9)
macro[3]: Resources(node000001: 12,13,14,15)
macro[4]: Resources(node000002: 0,1,2,3)
macro[5]: Resources(node000002: 4,5,6,7)
macro[6]: Resources(node000002: 10,11,8,9)
macro[7]: Resources(node000002: 12,13,14,15)
mc: Resources(node000001: 0)
micro[0]: Resources(node000001: 0,1)
micro[1]: Resources(node000001: 4,5)
micro[2]: Resources(node000001: 8,9)
micro[3]: Resources(node000001: 12,13)
micro[4]: Resources(node000002: 0,1)
micro[5]: Resources(node000002: 4,5)
micro[6]: Resources(node000002: 8,9)
micro[7]: Resources(node000002: 12,13)
rr: Resources(node000001: 0)

While we're at it, we should print the core numbers sorted numerically, not alphabetically, and collapse subsequent numbers so you get 0-127 instead of 0,1,2, .... ... .... ... ... , 126, 127 :smile:

LourensVeen commented 1 year ago

Released in 0.7.0.