Core A7 is based on GROMACS 5.0.4. I started with that source code and found where it builds the domain decomposition. I added a loop to try every thread count between 2 and 128 to see how it would break down a work unit. Each place where GROMACS would throw a fatal error and quit, I made it return instead and considered that count bad. What follows is the thread counts that should work for 3 different work units I tested. (I didn't think to write down the project number of one of them.)
All three work units have different maximum allowed number of cells based on the volume of the atoms. Estimated PME load also differs. When using more than 18 threads, some of the energy calculations are moved to separate PME threads. The algorithm first finds the minimum number of threads to carry the PME load and then splits the remaining threads. These two variables make it nearly impossible to guess whether a particular work unit will run on x threads.
p16501 - max 11x11x10 - PME load 0.10
Code: Select all
2 = 2x1x1
3 = 3x1x1
4 = 4x1x1
5 = 5x1x1
6 = 6x1x1
7 = 7x1x1
8 = 8x1x1
9 = 3x3x1
10 = 5x2x1
11 = 11x1x1
12 = 4x3x1
15 = 5x3x1
16 = 4x4x1
18 = 6x3x1
20 = 2x3x3 18 + 2 PME
21 = 3x3x2 18 + 3 PME
24 = 4x5x1 20 + 4 PME
25 = 5x2x2 20 + 5 PME
27 = 3x4x2 24 + 3 PME
28 = 4x3x2 24 + 4 PME
30 = 3x3x3 27 + 3 PME
32 = 8x3x1 24 + 8 PME
35 = 5x3x2 30 + 5 PME
36 = 4x4x2 32 + 4 PME
40 = 4x3x3 36 + 4 PME
42 = 6x3x2 36 + 6 PME
44 = 4x3x3 36 + 8 PME
45 = 5x4x2 40 + 5 PME
48 = 8x5x1 40 + 8 PME
50 = 5x3x3 45 + 5 PME
52 = 5x4x2 40 + 12 PME
54 = 6x4x2 48 + 6 PME
55 = 7x7x1 49 + 6 PME
56 = 7x7x1 49 + 7 PME
60 = 6x3x3 54 + 6 PME
63 = 7x4x2 56 + 7 PME
64 = 8x7x1 56 + 8 PME
65 = 5x5x2 50 + 15 PME
66 = 4x7x2 56 + 10 PME
70 = 7x3x3 63 + 7 PME
72 = 8x4x2 64 + 8 PME
75 = 5x3x4 60 + 15 PME
77 = 7x3x3 63 + 14 PME
78 = 5x7x2 70 + 8 PME
80 = 8x3x3 72 + 8 PME
81 = 9x4x2 72 + 9 PME
84 = 6x4x3 72 + 12 PME
85 = 5x5x3 75 + 10 PME
88 = 8x3x3 72 + 16 PME
90 = 9x3x3 81 + 9 PME
91 = 7x5x2 70 + 21 PME
95 = 5x4x4 80 + 15 PME
96 = 4x3x7 84 + 12 PME
98 = 7x4x3 84 + 14 PME
99 = 3x7x4 84 + 15 PME
100 = 10x3x3 90 + 10 PME
102 = 6x5x3 90 + 12 PME
104 = 6x5x3 90 + 14 PME
105 = 5x6x3 90 + 15 PME
108 = 6x4x4 96 + 12 PME
110 = 7x7x2 98 + 12 PME
112 = 7x2x7 98 + 14 PME
114 = 4x5x5 100 + 14 PME
115 = 5x5x4 100 + 15 PME
117 = 5x7x3 105 + 12 PME
119 = 7x5x3 105 + 14 PME
120 = 6x6x3 108 + 12 PME
125 = 5x5x4 100 + 25 PME
126 = 7x4x4 112 + 14 PME
128 = 4x4x7 112 + 16 PME
Code: Select all
2 = 2x1x1
3 = 3x1x1
4 = 4x1x1
5 = 5x1x1
6 = 6x1x1
8 = 4x2x1
9 = 3x3x1
10 = 5x2x1
12 = 6x2x1
15 = 5x3x1
16 = 4x4x1
18 = 6x3x1
20 = 4x2x2 16 + 4 PME
21 = 2x4x2 16 + 5 PME
24 = 6x3x1 18 + 6 PME
25 = 5x2x2 20 + 5 PME
27 = 3x3x2 18 + 9 PME
28 = 5x2x2 20 + 8 PME
30 = 6x2x2 24 + 6 PME
32 = 3x4x2 24 + 8 PME
35 = 5x5x1 25 + 10 PME
36 = 3x3x3 27 + 9 PME
40 = 4x4x2 32 + 8 PME
42 = 4x4x2 32 + 10 PME
44 = 4x4x2 32 + 12 PME
45 = 3x3x4 36 + 9 PME
48 = 6x2x3 36 + 12 PME
50 = 4x5x2 40 + 10 PME
52 = 5x4x2 40 + 12 PME
54 = 6x3x2 36 + 18 PME
55 = 5x4x2 40 + 15 PME
56 = 5x4x2 40 + 16 PME
60 = 6x4x2 48 + 12 PME
64 = 3x4x4 48 + 16 PME
65 = 5x5x2 50 + 15 PME
66 = 5x5x2 50 + 16 PME
72 = 6x3x3 54 + 18 PME
75 = 5x3x4 60 + 15 PME
80 = 4x4x4 64 + 16 PME
81 = 3x6x3 54 + 27 PME
85 = 5x6x2 60 + 25 PME
90 = 6x3x4 72 + 18 PME
95 = 5x5x3 75 + 20 PME
96 = 6x4x3 72 + 24 PME
99 = 5x5x3 75 + 24 PME
100 = 5x4x4 80 + 20 PME
110 = 5x4x4 80 + 30 PME
114 = 5x6x3 90 + 24 PME
115 = 5x6x3 90 + 25 PME
117 = 3x6x5 90 + 27 PME
120 = 6x4x4 96 + 24 PME
125 = 5x5x4 100 + 25 PME
128 = 4x6x4 96 + 32 PME
Code: Select all
2 = 2x1x1
3 = 3x1x1
4 = 4x1x1
5 = 5x1x1
6 = 3x2x1
8 = 4x2x1
9 = 3x3x1
10 = 5x2x1
12 = 4x3x1
15 = 5x3x1
16 = 4x4x1
18 = 3x3x2
20 = 4x3x1 12 + 8 PME
21 = 4x3x1 12 + 9 PME
24 = 5x3x1 15 + 9 PME
25 = 5x3x1 15 + 10 PME
27 = 3x5x1 15 + 12 PME
28 = 3x3x2 18 + 10 PME
30 = 3x2x3 18 + 12 PME
32 = 4x5x1 20 + 12 PME
35 = 5x4x1 20 + 15 PME
36 = 4x5x1 20 + 16 PME
40 = 5x5x1 25 + 15 PME
42 = 3x3x3 27 + 15 PME
44 = 4x2x3 24 + 20 PME
45 = 3x3x3 27 + 18 PME
48 = 3x5x2 30 + 18 PME
50 = 4x4x2 32 + 18 PME
52 = 4x4x2 32 + 20 PME
54 = 3x5x2 30 + 24 PME
55 = 5x2x3 30 + 25 PME
56 = 4x3x3 36 + 20 PME
60 = 4x3x3 36 + 24 PME
63 = 3x4x3 36 + 27 PME
64 = 4x5x2 40 + 24 PME
65 = 5x4x2 40 + 25 PME
66 = 3x4x3 36 + 30 PME
70 = 5x3x3 45 + 25 PME
72 = 3x5x3 45 + 27 PME
75 = 4x4x3 48 + 27 PME
78 = 4x4x3 48 + 30 PME
80 = 5x2x5 50 + 30 PME
81 = 4x4x3 48 + 33 PME
85 = 5x2x5 50 + 35 PME
95 = 5x4x3 60 + 35 PME
96 = 4x5x3 60 + 36 PME
100 = 4x4x4 64 + 36 PME
104 = 4x4x4 64 + 40 PME
108 = 4x4x4 64 + 44 PME
117 = 5x5x3 75 + 42 PME
120 = 5x3x5 75 + 45 PME
125 = 5x4x4 80 + 45 PME
128 = 4x5x4 80 + 48 PME
Note: There do appear to be additional restrictions baked into the assignment server and core A7 that limit possibilities that could work but are not attempted.
Code: Select all
# Threads p16501 p??? p14378
1 1 1 1
2 1 1 1
3 1 1 1
4 1 1 1
5 1 1 1
6 1 1 1
7 1 0 0
8 1 1 1
9 1 1 1
10 1 1 1
11 1 0 0
12 1 1 1
13 0 0 0
14 0 0 0
15 1 1 1
16 1 1 1
17 0 0 0
18 1 1 1
19 0 0 0
20 1 1 1
21 1 1 1
22 0 0 0
23 0 0 0
24 1 1 1
25 1 1 1
26 0 0 0
27 1 1 1
28 1 1 1
29 0 0 0
30 1 1 1
31 0 0 0
32 1 1 1
33 0 0 0
34 0 0 0
35 1 1 1
36 1 1 1
37 0 0 0
38 0 0 0
39 0 0 0
40 1 1 1
41 0 0 0
42 1 1 1
43 0 0 0
44 1 1 1
45 1 1 1
46 0 0 0
47 0 0 0
48 1 1 1
49 0 0 0
50 1 1 1
51 0 0 0
52 1 1 1
53 0 0 0
54 1 1 1
55 1 1 1
56 1 1 1
57 0 0 0
58 0 0 0
59 0 0 0
60 1 1 1
61 0 0 0
62 0 0 0
63 1 0 1
64 1 1 1
65 1 1 1
66 1 1 1
67 0 0 0
68 0 0 0
69 0 0 0
70 1 0 1
71 0 0 0
72 1 1 1
73 0 0 0
74 0 0 0
75 1 1 1
76 0 0 0
77 1 0 0
78 1 0 1
79 0 0 0
80 1 1 1
81 1 1 1
82 0 0 0
83 0 0 0
84 1 0 0
85 1 1 1
86 0 0 0
87 0 0 0
88 1 0 0
89 0 0 0
90 1 1 0
91 1 0 0
92 0 0 0
93 0 0 0
94 0 0 0
95 1 1 1
96 1 1 1
97 0 0 0
98 1 0 0
99 1 1 0
100 1 1 1
101 0 0 0
102 1 0 0
103 0 0 0
104 1 0 1
105 1 0 0
106 0 0 0
107 0 0 0
108 1 0 1
109 0 0 0
110 1 1 0
111 0 0 0
112 1 0 0
113 0 0 0
114 1 1 0
115 1 1 0
116 0 0 0
117 1 1 1
118 0 0 0
119 1 0 0
120 1 1 1
121 0 0 0
122 0 0 0
123 0 0 0
124 0 0 0
125 1 1 1
126 1 0 0
127 0 0 0
128 1 1 1
I'd like to get a thread count test into the hands of researchers. If there is a particular format that would work well for setting limits on the assignment server, I can work on that.