~ubuntu-branches/ubuntu/quantal/slurm-llnl/quantal

« back to all changes in this revision

Viewing changes to src/plugins/select/cons_res/dist_tasks.c

  • Committer: Bazaar Package Importer
  • Author(s): Gennaro Oliva
  • Date: 2010-06-12 05:53:11 UTC
  • mfrom: (1.5.1 upstream) (16.1.2 maverick)
  • Revision ID: james.westby@ubuntu.com-20100612055311-k3tn6tri4biirq2l
Tags: 2.1.9-1
New upstream release 

Show diffs side-by-side

added added

removed removed

Lines of Context:
71
71
static int _compute_c_b_task_dist(struct job_record *job_ptr)
72
72
{
73
73
        bool over_subscribe = false;
74
 
        uint32_t n, i, tid, maxtasks;
 
74
        uint32_t n, i, tid, maxtasks, l;
75
75
        uint16_t *avail_cpus;
76
76
        job_resources_t *job_res = job_ptr->job_resrcs;
77
77
        if (!job_res || !job_res->cpus) {
83
83
        avail_cpus = job_res->cpus;
84
84
        job_res->cpus = xmalloc(job_res->nhosts * sizeof(uint16_t));
85
85
 
 
86
        if (job_ptr->details->cpus_per_task > 1)
 
87
                 maxtasks = maxtasks / job_ptr->details->cpus_per_task; 
 
88
 
86
89
        for (tid = 0, i = 0; (tid < maxtasks); i++) { /* cycle counter */
87
90
                bool space_remaining = false;
88
91
                if (over_subscribe) {
96
99
                for (n = 0; ((n < job_res->nhosts) && (tid < maxtasks)); n++) {
97
100
                        if ((i < avail_cpus[n]) || over_subscribe) {
98
101
                                tid++;
99
 
                                if (job_res->cpus[n] < avail_cpus[n])
100
 
                                        job_res->cpus[n]++;
101
 
                                if ((i + 1) < avail_cpus[n])
102
 
                                        space_remaining = true;
 
102
                                for (l = 0; l < job_ptr->details->cpus_per_task; l++) {
 
103
                                        if (job_res->cpus[n] < avail_cpus[n])
 
104
                                                job_res->cpus[n]++;
 
105
                                        if ((i + 1) < avail_cpus[n])
 
106
                                                space_remaining = true;
 
107
                                }
103
108
                        }
104
109
                }
105
110
                if (!space_remaining) {
192
197
                alloc_cores = true;
193
198
#endif
194
199
 
195
 
        if (job_ptr->details && job_ptr->details->mc_ptr &&
196
 
            job_ptr->details->mc_ptr->ntasks_per_core)
197
 
                ntasks_per_core = job_ptr->details->mc_ptr->ntasks_per_core;
 
200
        if (job_ptr->details && job_ptr->details->mc_ptr) {
 
201
                if (job_ptr->details->mc_ptr->ntasks_per_core) {
 
202
                        ntasks_per_core = job_ptr->details->mc_ptr->
 
203
                                          ntasks_per_core;
 
204
                }
 
205
                if ((job_ptr->details->mc_ptr->min_threads !=
 
206
                                                        (uint16_t) NO_VAL) &&
 
207
                    (job_ptr->details->mc_ptr->min_threads < ntasks_per_core)) {
 
208
                        ntasks_per_core = job_ptr->details->mc_ptr->min_threads;
 
209
                }
 
210
        }
198
211
 
199
212
        size  = bit_size(job_res->node_bitmap);
200
213
        csize = bit_size(job_res->core_bitmap);
276
289
                alloc_cores = true;
277
290
#endif
278
291
        core_map = job_res->core_bitmap;
279
 
        if (job_ptr->details && job_ptr->details->mc_ptr &&
280
 
            job_ptr->details->mc_ptr->ntasks_per_core)
281
 
                ntasks_per_core = job_ptr->details->mc_ptr->ntasks_per_core;
 
292
        if (job_ptr->details && job_ptr->details->mc_ptr) {
 
293
                if (job_ptr->details->mc_ptr->ntasks_per_core) {
 
294
                        ntasks_per_core = job_ptr->details->mc_ptr->
 
295
                                          ntasks_per_core;
 
296
                }
 
297
                if ((job_ptr->details->mc_ptr->min_threads != 
 
298
                                                        (uint16_t) NO_VAL) &&
 
299
                    (job_ptr->details->mc_ptr->min_threads < ntasks_per_core)) {
 
300
                        ntasks_per_core = job_ptr->details->mc_ptr->min_threads;
 
301
                }
 
302
        }
282
303
 
283
304
        sock_size  = select_node_record[0].sockets;
284
305
        sock_start = xmalloc(sock_size * sizeof(uint32_t));