Ejemplo n.º 1
0
LISTELEMENT*  add_jobs (WSET *ws1, WSET *ws2, LISTELEMENT *listpointer)
{
   int i,k,kk;
   JOB *j;
   for(k=0;k<=ws1->deg-1;k++)
     for(kk=0;kk<=ws2->deg-1;kk++)
     {
     j = (JOB *) calloc (1, sizeof(JOB));
     make_job(j,ws1->num_eqns,ws2->num_eqns); 
     /* witness point 1 */
     for(i=0;i<=ws1->num_eqns-1;i++)
       j->source_1[i]=ws1->source[i];
     j->num_eqns_1 = ws1->num_eqns;
     j->num_vars_1 = ws1->num_vars;
     j->dim_1 = ws1->dim;
     j->deg_1 = ws1->deg;
     /*j->solution_1 = ws1->sols[k]; */
     /* witness point 2 */
     for(i=0;i<=ws2->num_eqns-1;i++)
       j->source_2[i]=ws2->source[i];
     j->num_eqns_2 = ws2->num_eqns;
     j->num_vars_2 = ws2->num_vars;
     j->dim_2 = ws2->dim;
     j->deg_2 = ws2->deg;
     /*j->solution_2 = ws2->sols[kk]; */
 
     listpointer = additem(listpointer, j);
     }
   if(v>3) printf("adding jobs is DONE\n");
   return listpointer;
}
Ejemplo n.º 2
0
int Connector::getAllTasks() {

	unsigned int numberOfJobs = 0;
	unsigned int *numrows = &numberOfJobs;
	MYSQL_RES *res_set; /* Create a pointer to recieve the return value.*/
	MYSQL_ROW row; /* Assign variable for rows. */

	string a =
			"SELECT tasks.idreceptor, receptors.name, receptors.pdb, receptors.conf_name, receptors.conf, tasks.idligand, ligands.name, ligands.pdb, tasks.experiment from tasks, receptors, ligands WHERE tasks.status = 0 and receptors.idreceptors = tasks.idreceptor and ligands.idligands = tasks.idligand LIMIT 0,1000";

	string b = ";";
	string sql = a + b;

	mysql_query(connect, sql.c_str());
	/* Send a query to the database. */
	//unsigned int i = 0; /* Create a counter for the rows */
	res_set = mysql_store_result(connect); /* Receive the result and store it in res_set */
	*numrows = mysql_num_rows(res_set); /* Create the count to print all rows */

	log_messages.printf(MSG_DEBUG, "Making %d jobs\n", *numrows);

	if (*numrows > 0) {
		fprintf(stderr, "adding tasks\n");
		unsigned int n;
		for (n = 0; n < *numrows; n++) {
			struct jobstruct job;
			row = mysql_fetch_row(res_set);
			job.idreceptor = row[0];
			job.namereceptor = row[1];
			job.pdbreceptor = row[2];
			job.confname = row[3];
			job.pdbconf = row[4];
			job.idligand = row[5];
			job.nameligand = row[6];
			job.pdbligand = row[7];
			job.experiment = row[8];
			//printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n",row[0],row[1],row[2],row[3],row[4],row[5],row[6],row[7]); /* Print the row data */

			int retval = make_job(job);

			if (retval) {
				log_messages.printf(MSG_CRITICAL, "can't make job: %s\n",
						boincerror(retval));
				exit(retval);
			}
			markTaskAsRunning(job.idreceptor, job.idligand);
		}
	}
	mysql_free_result(res_set);

	return 0;
}
Ejemplo n.º 3
0
void main_loop() {
    int retval;
    int node=0,n;
    while (node<n1) {
        check_stop_daemons();
	retval = count_unsent_results(n, 0);
        if (retval) {
            log_messages.printf(MSG_CRITICAL,
                "count_unsent_jobs() failed: %s\n", boincerror(retval)
            );
            exit(retval);
        }
        if (n > CUSHION) {
            daemon_sleep(5);
        } else {

          //  int njobs =  (CUSHION-n)/REPLICATION_FACTOR;
            log_messages.printf(MSG_DEBUG,
                "Making job for %d\n", node
            );
      //      for (int i=0; i<njobs; i++) {
      	      for (int i=0; i<n1; i+=CLIENT_LIMIT)
      	      {
                retval = make_job(node,i);
                if (retval) {
                    log_messages.printf(MSG_CRITICAL,
                        "can't make job: %s\n", boincerror(retval)
                    );
                    exit(retval);
                }
      	      }
   //         }
            // Now sleep for a few seconds to let the transitioner
            // create instances for the jobs we just created.
            // Otherwise we could end up creating an excess of jobs.
            double now = dtime();
            while (1) {
                daemon_sleep(5);
                double x;
                retval = min_transition_time(x);
                if (retval) {
                    log_messages.printf(MSG_CRITICAL,
                        "min_transition_time failed: %s\n", boincerror(retval)
                    );
                    exit(retval);
                }
                if (x > now) break;
            }
        }
        node++;
    }
}
Ejemplo n.º 4
0
void main_loop() {
    int retval;

    while (1) {
        check_stop_daemons();
        long n;
        retval = count_unsent_results(n, app.id);
        if (retval) {
            log_messages.printf(MSG_CRITICAL,
                "count_unsent_jobs() failed: %s\n", boincerror(retval)
            );
            exit(retval);
        }
        if (n > CUSHION) {
            daemon_sleep(10);
        } else {
            int njobs = (CUSHION-n)/REPLICATION_FACTOR;
            log_messages.printf(MSG_DEBUG,
                "Making %d jobs\n", njobs
            );
            for (int i=0; i<njobs; i++) {
                retval = make_job();
                if (retval) {
                    log_messages.printf(MSG_CRITICAL,
                        "can't make job: %s\n", boincerror(retval)
                    );
                    exit(retval);
                }
            }
            // Wait for the transitioner to create instances
            // of the jobs we just created.
            // Otherwise we'll create too many jobs.
            //
            double now = dtime();
            while (1) {
                daemon_sleep(5);
                double x;
                retval = min_transition_time(x);
                if (retval) {
                    log_messages.printf(MSG_CRITICAL,
                        "min_transition_time failed: %s\n", boincerror(retval)
                    );
                    exit(retval);
                }
                if (x > now) break;
            }
        }
    }
}
Ejemplo n.º 5
0
void test_mm(void) {
  int max_threads = 8;
  thread_pool_t *thread_pool = create_thread_pool(max_threads);

  int m = 8192;
  int n = 1024;
  int k = 1024;
  double *a = make_array(m, k);
  double *b = make_array(k, n);
  double *o = make_array(m, n);
  int tile_sizes[5] = {1024, 64, 64, 8, 8};

  int num_threads = 8;
  job_t *job = make_job(0, m, 1024, num_threads, 1);

  vm_args_t vm_args;
  vm_args.a = a;
  vm_args.b = b;
  vm_args.out = o;
  vm_args.m = m;
  vm_args.n = n;
  vm_args.k = k;

  struct timeval start, end, result;
  gettimeofday(&start, NULL);
  launch_job(thread_pool, &vm2, &vm_args, job, tile_sizes, 1);
  wait_for_job(thread_pool);
  gettimeofday(&end, NULL);

  double t;
  timersub(&end, &start, &result);
  t = result.tv_sec + result.tv_usec / 1000000.0;
  printf("Parallel runtime: %f\n", t);

  int pass = 1;
//  int i, j, l;
//  double sum;
//  gettimeofday(&start, NULL);
//  for (i = 0; i < m; ++i) {
//    for (j = 0; j < n; ++j) {
//      sum = 0.0;
//      for (l = 0; l < k; ++l) {
//        sum += a[i*k + l] * b[j*k + l];
//      }
//      pass = pass && (abs(sum - o[i*n + j]) < 1e-4);
//    }
//  }
//  gettimeofday(&end, NULL);
  CU_ASSERT(pass);

//  double naive_time;
//  timersub(&end, &start, &result);
//  naive_time = result.tv_sec + result.tv_usec / 1000000.0;
//  printf("Naive time: %f\n", naive_time);

  destroy_thread_pool(thread_pool);
  free_job(job);
  free_array(a);
  free_array(b);
  free_array(o);
}
Ejemplo n.º 6
0
// simulate trying to do an RPC;
// return true if we actually did one
//
bool CLIENT_STATE::simulate_rpc(PROJECT* p) {
    char buf[256], buf2[256];
    vector<IP_RESULT> ip_results;
    vector<RESULT*> new_results;

    bool avail;
    if (p->last_rpc_time) {
        double delta = now - p->last_rpc_time;
        avail = p->available.sample(delta);
    } else {
        avail = p->available.sample(0);
    }
    p->last_rpc_time = now;
    if (!avail) {
        sprintf(buf, "RPC to %s skipped - project down<br>", p->project_name);
        html_msg += buf;
        msg_printf(p, MSG_INFO, "RPC skipped: project down");
        gstate.scheduler_op->project_rpc_backoff(p, "project down");
        p->master_url_fetch_pending = false;
        return false;
    }

    // save request params for WORK_FETCH::handle_reply
    //
    double save_cpu_req_secs = rsc_work_fetch[0].req_secs;
    for (int i=1; i<coprocs.n_rsc; i++) {
        COPROC& cp = coprocs.coprocs[i];
        if (!strcmp(cp.type, "NVIDIA")) {
            coprocs.nvidia.req_secs = rsc_work_fetch[i].req_secs;
        }
        if (!strcmp(cp.type, "ATI")) {
            coprocs.ati.req_secs = rsc_work_fetch[i].req_secs;
        }
        if (!strcmp(cp.type, "intel_gpu")) {
            coprocs.intel_gpu.req_secs = rsc_work_fetch[i].req_secs;
        }
    }

    if (!server_uses_workload) {
        for (int i=0; i<coprocs.n_rsc; i++) {
            rsc_work_fetch[i].estimated_delay = rsc_work_fetch[i].busy_time_estimator.get_busy_time();
        }
    }

    for (unsigned int i=0; i<app_versions.size(); i++) {
        app_versions[i]->dont_use = false;
    }

    work_fetch.request_string(buf2, sizeof(buf2));
    sprintf(buf, "RPC to %s: %s<br>", p->project_name, buf2);
    html_msg += buf;

    msg_printf(p, MSG_INFO, "RPC: %s", buf2);

    handle_completed_results(p);

    if (server_uses_workload) {
        get_workload(ip_results);
    }

    bool sent_something = false;
    while (!existing_jobs_only) {
        vector<APP*> apps;
        get_apps_needing_work(p, apps);
        if (apps.empty()) break;
        RESULT* rp = new RESULT;
        WORKUNIT* wup = new WORKUNIT;
        make_job(p, wup, rp, apps);

        double et = wup->rsc_fpops_est / rp->avp->flops;
        if (server_uses_workload) {
            IP_RESULT c(rp->name, rp->report_deadline-now, et);
            if (check_candidate(c, ncpus, ip_results)) {
                ip_results.push_back(c);
            } else {
                msg_printf(p, MSG_INFO, "job for %s misses deadline sim\n", rp->app->name);
                APP_VERSION* avp = rp->avp;
                delete rp;
                delete wup;
                avp->dont_use = true;
                continue;
            }
        } else {
            double est_delay = get_estimated_delay(rp);
            if (est_delay + et > wup->app->latency_bound) {
                msg_printf(p, MSG_INFO,
                    "job for %s misses deadline approx: del %f + et %f > %f\n",
                    rp->app->name,
                    est_delay, et, wup->app->latency_bound
                );
                APP_VERSION* avp = rp->avp;
                delete rp;
                delete wup;
                avp->dont_use = true;
                continue;
            }
        }

        sent_something = true;
        rp->set_state(RESULT_FILES_DOWNLOADED, "simulate_rpc");
        results.push_back(rp);
        new_results.push_back(rp);
#if 0
        sprintf(buf, "got job %s: CPU time %.2f, deadline %s<br>",
            rp->name, rp->final_cpu_time, time_to_string(rp->report_deadline)
        );
        html_msg += buf;
#endif
        decrement_request(rp);
    }

    njobs += (int)new_results.size();
    msg_printf(0, MSG_INFO, "Got %lu tasks", new_results.size());
    sprintf(buf, "got %lu tasks<br>", new_results.size());
    html_msg += buf;

    SCHEDULER_REPLY sr;
    rsc_work_fetch[0].req_secs = save_cpu_req_secs;
    work_fetch.handle_reply(p, &sr, new_results);
    p->nrpc_failures = 0;
    p->sched_rpc_pending = 0;
    //p->min_rpc_time = now + 900;
    p->min_rpc_time = now;
    if (sent_something) {
        request_schedule_cpus("simulate_rpc");
        request_work_fetch("simulate_rpc");
    }
    sim_results.nrpcs++;
    return true;
}