Ejemplo n.º 1
0
/*FGROUP ALItools
Steering routone for correlation:
 type =0 : autocorrelation = noise, bckg
 type =1 : crosscorrelation = alignment
 h0chans = channels in ssm in l0 output mode
*/
void Correl(int type,int l0inputs,int l1inputs,int l2inputs,int h0chans,int cordist,int delta,int dir){
 int i,j,nactive;
 int activeinputs[NUMOFINPS];
 for(i=0;i<NUMOFINPS;i++)activeinputs[i]=0;
 nactive=0;
 for(i=0;i<(NUMOFL0INPS-NUMOFH0INPS);i++){
  if(l0inputs & (1<<i)){
    activeinputs[nactive]=i;
    nactive++;
  }
 }
 for(i=0;i<NUMOFH0INPS;i++){
  if(h0chans & (1<<i)){
    activeinputs[nactive]=i+NUMOFL0INPS-NUMOFH0INPS;
    nactive++;
  }
 }
 for(i=0;i<24;i++){
  if(l1inputs & (1<<i)){
    activeinputs[nactive]=i+NUMOFL0INPS;
    nactive++;
  }
 }
 for(i=0;i<12;i++){
  if(l2inputs & (1<<i)){
   activeinputs[nactive]=i+NUMOFL0INPS+24;
   nactive++;
  }
 }
 if(type==1){
   for(i=0;i<nactive;i++){
    for(j=i;j<nactive;j++){
     if(i != j)croscor1(activeinputs[i],activeinputs[j],cordist,delta,dir);
    }
   }
  }else{
   for(i=0;i<nactive;i++)autocor(activeinputs[i],cordist,delta);
  }
}
Ejemplo n.º 2
0
int main()
{
    FILE *file;
    char filename[32];

    // output file names
    char *fs = "data/s.dat";
    char *fs1 = "data/s1.dat";
    char *fs2 = "data/s2.dat";
    char *fsclet = "data/sclet.dat";
    char *fs1clet = "data/s1clet.dat";
    char *fs2clet = "data/s2clet.dat";
    char *fscloud = "data/scloud.dat";
    char *fs1cloud = "data/s1cloud.dat";
    char *fs2cloud = "data/s2cloud.dat";
    char *fsintr = "data/sintr.dat";

    // output file descriptors
    int fd_s;
    int fd_s1;
    int fd_s2;
    int fd_sclet;
    int fd_s1clet;
    int fd_s2clet;
    int fd_scloud;
    int fd_s1cloud;
    int fd_s2cloud;
    int fd_sintr;

    // temporary service variables
    long unsigned int id;
    double s1_clet;
    double s2_clet;
    double s1_cloud;
    double s2_cloud;
    double setup;

    // completions
    unsigned long c1_clet;
    unsigned long c2_clet;
    unsigned long c1_cloud;
    unsigned long c2_cloud;
    unsigned long c_setup;

    // counters
    unsigned long n1;
    unsigned long n2;
    unsigned long n1_clet;
    unsigned long n2_clet;
    unsigned long n1_cloud;
    unsigned long n2_cloud;
    unsigned long n_intr;
    
    // batch sizes 
    unsigned long b;
    unsigned long b1;
    unsigned long b2;
    unsigned long b_clet;
    unsigned long b1_clet;
    unsigned long b2_clet;
    unsigned long b_cloud;
    unsigned long b1_cloud;
    unsigned long b2_cloud;
    unsigned long b_intr;

    long unsigned int i;
    unsigned int r;

    // service batch arrays
    double s[K];
    double s1[K];
    double s2[K];
    double sclet[K];
    double s1clet[K];
    double s2clet[K];
    double scloud[K];
    double s1cloud[K];
    double s2cloud[K];
    double sintr[K];

    struct confint_t c;

    // open output files
    fd_s = open(fs, O_WRONLY | O_CREAT, 00744);
    fd_s1 = open(fs1, O_WRONLY | O_CREAT, 00744);
    fd_s2 = open(fs2, O_WRONLY | O_CREAT, 00744);
    fd_sclet = open(fsclet, O_WRONLY | O_CREAT, 00744);
    fd_s1clet = open(fs1clet, O_WRONLY | O_CREAT, 00744);
    fd_s2clet = open(fs2clet, O_WRONLY | O_CREAT, 00744);
    fd_scloud = open(fscloud, O_WRONLY | O_CREAT, 00744);
    fd_s1cloud = open(fs1cloud, O_WRONLY | O_CREAT, 00744);
    fd_s2cloud = open(fs2cloud, O_WRONLY | O_CREAT, 00744);
    fd_sintr = open(fsintr, O_WRONLY | O_CREAT, 00744);
    if (fd_sintr == -1 || fd_s == -1 || fd_s1 == -1 || fd_s2 == -1 || 
        fd_sclet == -1 || fd_s1clet == -1 || fd_s2clet == -1 ||
        fd_scloud == -1 || fd_s1cloud == -1 || fd_s2cloud == -1)
        handle_error("opening an output file");

    for (r = 0; r < R; r++) {

        // init variables 
        memset(s, 0, K * sizeof(double));
        memset(s1, 0, K * sizeof(double));
        memset(s2, 0, K * sizeof(double));
        memset(sclet, 0, K * sizeof(double));
        memset(s1clet, 0, K * sizeof(double));
        memset(s2clet, 0, K * sizeof(double));
        memset(scloud, 0, K * sizeof(double));
        memset(s1cloud, 0, K * sizeof(double));
        memset(s2cloud, 0, K * sizeof(double));
        memset(sintr, 0, K * sizeof(double));
        n1 = 0;
        n2 = 0;
        n1_clet = 0;
        n2_clet = 0;
        n1_cloud = 0;
        n2_cloud = 0;
        n_intr = 0;

        // open the file
        sprintf(filename, "data/service_%d.dat", r);
        file = fopen(filename, "r");
        if (!file)
            handle_error("opening data file");

        // read completions
        if (fscanf(file, "-1 %ld %ld %ld %ld %ld\n",
            &c1_clet, &c2_clet, &c1_cloud, &c2_cloud, &c_setup) == EOF)
            handle_error("reading completions"); 

        // compute batch sizes
        b = (c1_clet + c2_clet + c1_cloud + c2_cloud) / K;
        b1 = (c1_clet + c1_cloud) / K;
        b2 = (c2_clet + c2_cloud) / K;
        b_clet = (c1_clet + c2_clet) / K;
        b1_clet = c1_clet / K;
        b2_clet = c2_clet / K;
        b_cloud = (c1_cloud + c2_cloud) / K;
        b1_cloud = c1_cloud / K;
        b2_cloud = c2_cloud / K;
        b_intr = c_setup / K;

        if (!b1_cloud) {
            fputs("\nWARNING: not enough class 1 jobs executed on the cloud. "
                    "The value will not be reliable\n", stderr);
            b1_cloud = 1;
        }

        // get data
        while (fscanf(file, "%ld %lf %lf %lf %lf %lf\n", &id,
                &s1_clet, &s2_clet, &s1_cloud, &s2_cloud, &setup) != EOF) {

            s[id / b] += s1_clet + s2_clet + s1_cloud + s2_cloud + setup;

            if (s1_clet || s1_cloud) {
                s1[n1 / b1] += s1_clet + s1_cloud;
                n1++;
            }
            if (s2_clet || s2_cloud) {
                s2[n2 / b2] += s2_clet + s2_cloud + setup;
                n2++;
            }
            if (s1_clet) {
                s1clet[n1_clet / b1_clet] += s1_clet;
                sclet[(n1_clet + n2_clet) / b_clet] += s1_clet;
                n1_clet++;
            }
            if (s2_clet && !setup) {
                s2clet[n2_clet / b2_clet] += s2_clet;
                sclet[(n1_clet + n2_clet) / b_clet] += s2_clet;
                n2_clet++;
            }
            if (s1_cloud) {
                s1cloud[n1_cloud / b1_cloud] += s1_cloud;
                scloud[(n1_cloud + n2_cloud) / b_cloud] += s1_cloud;
                n1_cloud++;
            }
            if (s2_cloud) {
                s2cloud[n2_cloud / b2_cloud] += s2_cloud;
                scloud[(n1_cloud + n2_cloud) / b_cloud] += s2_cloud;
                n2_cloud++;
            }
            if (setup) {
                sintr[n_intr / b_intr] += s2_clet + s2_cloud + setup;
                n_intr++;
            }
        }

        // close the file
        if (fclose(file) == EOF)
            handle_error("closing data file");

        // compute batch means
        for (i = 0; i < K; i++) {
            s[i] /= b;
            s1[i] /= b1;
            s2[i] /= b2;
            s1clet[i] /= b1_clet;
            s2clet[i] /= b2_clet;
            sclet[i] /= b_clet;
            s1cloud[i] /= b1_cloud;
            s2cloud[i] /= b2_cloud;
            scloud[i] /= b_cloud;
            sintr[i] /= b_intr;
        }

        // print results 
        printf("\n  Replication %d results:\n", r);
        c = confint(s, K, ALPHA); 
        dprintf(fd_s, "%f %f\n", c.mean, c.w);
        printf("system service time ......... = %f  +/- %f\n", c.mean, c.w);
        printf("autocorralation between batches: %f\n", autocor(s, K, 1));
        c = confint(s1, K, ALPHA); 
        dprintf(fd_s1, "%f %f\n", c.mean, c.w);
        printf("class 1 service time ........ = %f  +/- %f\n", c.mean, c.w);
        printf("autocorralation between batches: %f\n", autocor(s1, K, 1));
        c = confint(s2, K, ALPHA); 
        dprintf(fd_s2, "%f %f\n", c.mean, c.w);
        printf("class 2 service time ........ = %f  +/- %f\n", c.mean, c.w);
        printf("autocorralation between batches: %f\n", autocor(s2, K, 1));
        c = confint(s1clet, K, ALPHA); 
        dprintf(fd_s1clet, "%f %f\n", c.mean, c.w);
        printf("class 1 cloudlet service time = %f  +/- %f\n", c.mean, c.w);
        printf("autocorralation between batches: %f\n", autocor(s1clet, K, 1));
        c = confint(s2clet, K, ALPHA); 
        dprintf(fd_s2clet, "%f %f\n", c.mean, c.w);
        printf("class 2 cloudlet service time = %f  +/- %f\n", c.mean, c.w);
        printf("autocorralation between batches: %f\n", autocor(s2clet, K, 1));
        c = confint(sclet, K, ALPHA); 
        dprintf(fd_sclet, "%f %f\n", c.mean, c.w);
        printf("cloudlet service time ....... = %f  +/- %f\n", c.mean, c.w);
        printf("autocorralation between batches: %f\n", autocor(sclet, K, 1));
        c = confint(s1cloud, K, ALPHA); 
        dprintf(fd_s1cloud, "%f %f\n", c.mean, c.w);
        printf("class 1 cloud service time .. = %f  +/- %f\n", c.mean, c.w);
        printf("autocorralation between batches: %f\n", autocor(s1cloud, K, 1));
        c = confint(s2cloud, K, ALPHA); 
        dprintf(fd_s2cloud, "%f %f\n", c.mean, c.w);
        printf("class 2 cloud service time .. = %f  +/- %f\n", c.mean, c.w);
        printf("autocorralation between batches: %f\n", autocor(s2cloud, K, 1));
        c = confint(scloud, K, ALPHA); 
        dprintf(fd_scloud, "%f %f\n", c.mean, c.w);
        printf("cloud service time .......... = %f  +/- %f\n", c.mean, c.w);
        printf("autocorralation between batches: %f\n", autocor(scloud, K, 1));
        c = confint(sintr, K, ALPHA); 
        dprintf(fd_sintr, "%f %f\n", c.mean, c.w);
        printf("interrupted jobs service time = %f  +/- %f\n", c.mean, c.w);
        printf("autocorralation between batches: %f\n", autocor(sintr, K, 1));
    }

    // close output file
    if (close(fd_s) == -1)
        handle_error("closing output file");
    if (close(fd_s1) == -1)
        handle_error("closing output file");
    if (close(fd_s2) == -1)
        handle_error("closing output file");
    if (close(fd_sclet) == -1)
        handle_error("closing output file");
    if (close(fd_s1clet) == -1)
        handle_error("closing output file");
    if (close(fd_s2clet) == -1)
        handle_error("closing output file");
    if (close(fd_scloud) == -1)
        handle_error("closing output file");
    if (close(fd_s1cloud) == -1)
        handle_error("closing output file");
    if (close(fd_s2cloud) == -1)
        handle_error("closing output file");
    if (close(fd_sintr) == -1)
        handle_error("closing output file");

    return EXIT_SUCCESS;
}