|
Lines 1862-1868
static int _count_cpus(struct job_record *job_ptr, bitstr_t *bitmap,
Link Here
|
| 1862 |
* and step's allocation */ |
1862 |
* and step's allocation */ |
| 1863 |
static void _pick_step_cores(struct step_record *step_ptr, |
1863 |
static void _pick_step_cores(struct step_record *step_ptr, |
| 1864 |
job_resources_t *job_resrcs_ptr, |
1864 |
job_resources_t *job_resrcs_ptr, |
| 1865 |
int job_node_inx, uint16_t task_cnt) |
1865 |
int job_node_inx, uint16_t task_cnt, |
|
|
1866 |
uint16_t tasks_per_core) |
| 1866 |
{ |
1867 |
{ |
| 1867 |
int bit_offset, core_inx, i, sock_inx; |
1868 |
int bit_offset, core_inx, i, sock_inx; |
| 1868 |
uint16_t sockets, cores; |
1869 |
uint16_t sockets, cores; |
|
Lines 1878-1889
static void _pick_step_cores(struct step_record *step_ptr,
Link Here
|
| 1878 |
&sockets, &cores)) |
1879 |
&sockets, &cores)) |
| 1879 |
fatal("get_job_resources_cnt"); |
1880 |
fatal("get_job_resources_cnt"); |
| 1880 |
|
1881 |
|
| 1881 |
if (task_cnt == (cores * sockets)) |
1882 |
if (task_cnt == (cores * sockets * tasks_per_core)) |
| 1882 |
use_all_cores = true; |
1883 |
use_all_cores = true; |
| 1883 |
else |
1884 |
else |
| 1884 |
use_all_cores = false; |
1885 |
use_all_cores = false; |
|
|
1886 |
|
| 1885 |
if (step_ptr->cpus_per_task > 0) |
1887 |
if (step_ptr->cpus_per_task > 0) |
| 1886 |
cpu_cnt *= step_ptr->cpus_per_task; |
1888 |
cpu_cnt *= step_ptr->cpus_per_task / tasks_per_core; |
| 1887 |
|
1889 |
|
| 1888 |
/* select idle cores first */ |
1890 |
/* select idle cores first */ |
| 1889 |
for (sock_inx=0; sock_inx<sockets; sock_inx++) { |
1891 |
for (sock_inx=0; sock_inx<sockets; sock_inx++) { |
|
Lines 2029-2038
extern void step_alloc_lps(struct step_record *step_ptr)
Link Here
|
| 2029 |
} |
2031 |
} |
| 2030 |
} |
2032 |
} |
| 2031 |
if (pick_step_cores) { |
2033 |
if (pick_step_cores) { |
|
|
2034 |
uint16_t tasks_per_core = 1; |
| 2035 |
if ((job_resrcs_ptr->whole_node == 1) |
| 2036 |
|| !(slurmctld_conf.select_type_param |
| 2037 |
& (CR_CORE | CR_SOCKET)) |
| 2038 |
|| !(job_ptr->details && |
| 2039 |
(job_ptr->details->cpu_bind_type != NO_VAL16) |
| 2040 |
&& (job_ptr->details->cpu_bind_type |
| 2041 |
& CPU_BIND_ONE_THREAD_PER_CORE))) |
| 2042 |
tasks_per_core = |
| 2043 |
node_record_table_ptr[i_node].threads; |
| 2032 |
_pick_step_cores(step_ptr, job_resrcs_ptr, |
2044 |
_pick_step_cores(step_ptr, job_resrcs_ptr, |
| 2033 |
job_node_inx, |
2045 |
job_node_inx, |
| 2034 |
step_ptr->step_layout-> |
2046 |
step_ptr->step_layout-> |
| 2035 |
tasks[step_node_inx]); |
2047 |
tasks[step_node_inx], |
|
|
2048 |
tasks_per_core); |
| 2036 |
} |
2049 |
} |
| 2037 |
if (slurmctld_conf.debug_flags & DEBUG_FLAG_CPU_BIND) |
2050 |
if (slurmctld_conf.debug_flags & DEBUG_FLAG_CPU_BIND) |
| 2038 |
_dump_step_layout(step_ptr); |
2051 |
_dump_step_layout(step_ptr); |
| 2039 |
- |
|
|