Exemplo n.º 1
0
/**
 * Update state by subtracting inval.
 * Emit the previous state as outval.
 * If new state > 0, emit a new state.
 */
void *add( void *hnd, c4snet_data_t *state, c4snet_data_t *inval)
{
  int int_state, int_newstate, int_inval;
  c4snet_data_t *data_newstate, *data_output;

  int_state = *(int *) C4SNetGetData(state);
  int_inval = *(int *) C4SNetGetData(inval);

  /* update state */
  int_newstate = int_state - int_inval;

  if (int_newstate > 0) {
    data_newstate = C4SNetCreate(CTYPE_int, 1, &int_newstate);
    C4SNetOut( hnd, 1, data_newstate);
  }

  /* emit old state as output */
  data_output = C4SNetCreate(CTYPE_int, 1, &int_state);
  C4SNetOut( hnd, 2, data_output);


  C4SNetFree(state);
  C4SNetFree(inval);
  return( hnd);
}
Exemplo n.º 2
0
void *merge(void *hnd, c4snet_data_t *OutFile, c4snet_data_t *Result,
            int X, c4snet_data_t *Out, int N, int B, int K, int J, int I)
{
    const int   P = N / B;

    if (verbose) {
        printf("%s: %p, %p, X=%d, %p, N=%d, B=%d, (%d, %d, %d)\n",
                __func__, OutFile, Result, X, Out, N, B, K, J, I);
    }
    if (compute) {
        c4snet_data_t **result = C4SNetGetData(Result);
        assert(result[J + I * P] == NULL);
        result[J + I * P] = Out;
    }
    if (X > 1) {
        C4SNetOut(hnd, 1, OutFile, Result, X - 1);
    }
    else if (compute) {
        struct timespec end;
        if (clock_gettime(CLOCK_REALTIME, &end)) {
            pexit("clock_gettime");
        }
        printf("Time for size %d x %d : %lf sec\n", N, N, delta_time(begin, end));
        write_matrix(Result, N, B, OutFile);
        C4SNetOut(hnd, 2, C4SNetCreate(CTYPE_char, 5, "Done."));
        C4SNetFree(OutFile);
        C4SNetFree(Result);
    }
    return hnd;
}
Exemplo n.º 3
0
void *split( void *hnd, c4snet_data_t *A, int A_width, int A_height, int nodes)
{
  int i, first, last, block;

  int *new_array;
  c4snet_data_t *new_data;
  int *array = C4SNetGetData(A);

  block = A_height / nodes;
  first = 0;
  last = first + block - 1;

  for (i = 0; i < nodes - 1; i++) {
    new_data = C4SNetAlloc(CTYPE_int, A_width * (last - first + 1), (void **) &new_array);

    memcpy(new_array, (array + A_width * first), sizeof(int) * A_width * (last - first + 1));

    C4SNetOut( hnd, 1, new_data, A_width, A_height, i, first, last);

    first = last + 1;
    last  += block;
  }

  last = A_height - 1;

  new_data = C4SNetAlloc(CTYPE_int, A_width * (last - first + 1), (void **) &new_array);

  memcpy(new_array, (array + A_width * first), sizeof(int) * A_width * (last - first + 1));

  C4SNetOut(hnd, 1, new_data, A_width, A_height, i, first, last);
  C4SNetFree(A);

  return hnd;
}
Exemplo n.º 4
0
/**
 * Update state by adding inval and emitting new state and old state as output
 * if new state >= MAXVAL, a trigger is emitted instead of a new state.
 */
void *compute( void *hnd, c4snet_data_t *state, c4snet_data_t *inval)
{
  int int_state, int_newstate, int_inval;
  c4snet_data_t *data_newstate, *data_output;

  int_state = *(int *) C4SNetGetData(state);
  int_inval = *(int *) C4SNetGetData(inval);

  /* emit outval */
  data_output = C4SNetCreate(CTYPE_int, 1, &int_state);
  C4SNetOut( hnd, 1, data_output);

  /* update state */
  int_newstate = int_state + int_inval;

  if (int_newstate < MAXVAL) {
    /* emit state */
    data_newstate = C4SNetCreate(CTYPE_int, 1, &int_newstate);
    C4SNetOut( hnd, 2, data_newstate);
  } else {
    /* emit trigger */
    data_newstate = C4SNetCreate(CTYPE_int, 1, &int_newstate);
    C4SNetOut( hnd, 3, data_newstate);
  }

  C4SNetFree(state);
  C4SNetFree(inval);
  return( hnd);
}
Exemplo n.º 5
0
void * merge (void *hnd, c4snet_data_t * atiles, c4snet_data_t * ltiles,
    int counter, int bs, int p, int k)
{
    if (++counter < p - k - 1)
        C4SNetOut (hnd, 1, counter);
    else
        C4SNetOut (hnd, 2, atiles, ltiles, bs, p, k);
    return hnd;
}
Exemplo n.º 6
0
void * sync (void *hnd, c4snet_data_t * fatiles, c4snet_data_t * fltiles,
    int counter, int bs, int p, int k)
{
    if (++counter < (p - k) * (p - k - 1) / 2)
        C4SNetOut (hnd, 1, counter);
    else
        C4SNetOut (hnd, 2, fatiles, fltiles, bs, p, k);
    return hnd;
}
Exemplo n.º 7
0
void *Merger (void *hnd, c4snet_data_t *total_ele, c4snet_data_t *count, c4snet_data_t *submatrix_in_one_row, c4snet_data_t *size_matrix, c4snet_data_t *size_submatrix, c4snet_data_t *result, c4snet_data_t *submatrix_result, c4snet_data_t *position)
{
	int int_total_ele = * (int *) C4SNetGetData(total_ele);
	int int_count = * (int *) C4SNetGetData(count);

	int *int_submatrix_result = C4SNetGetData(submatrix_result);
	int *int_result = C4SNetGetData(result);

	int int_submatrix_in_one_row = * (int *) C4SNetGetData(submatrix_in_one_row);
	int int_size_matrix = * (int *) C4SNetGetData(size_matrix);
	int int_size_submatrix = * (int *) C4SNetGetData(size_submatrix);
	int int_position = * (int *) C4SNetGetData(position);

	int i, j;


	int positioni, positionj;
	int position_in_result;

	int_count = int_count + 1;

	positioni = int_position / int_submatrix_in_one_row;
	positionj = int_position % int_submatrix_in_one_row;


	for (i = 0; i < int_size_submatrix; i++)
	{
	 for (j = 0; j < int_size_submatrix; j++)
	 {
		 position_in_result = (int_size_matrix * (i + (positioni * int_size_submatrix)) + j + (positionj * int_size_submatrix));
		 int_result[position_in_result] = int_result[position_in_result] + int_submatrix_result[(int_size_submatrix * i) + j];
	 }
	}

	if ( int_count < int_total_ele)
	{

		c4snet_data_t *new_result;
		new_result = C4SNetCreate(CTYPE_int, int_size_matrix*int_size_matrix, int_result);
		C4SNetOut(hnd, 1, total_ele, C4SNetCreate(CTYPE_int, 1, &int_count), submatrix_in_one_row, size_matrix, size_submatrix, new_result);
	}
	else
	{
		printf("SOLUTION:\n");
		for (i = 0; i < int_size_matrix; i++)
		{
			for (j = 0; j < int_size_matrix; j++)
			{
				printf("%d\t", int_result[(i*int_size_matrix) + j]);
			}
			printf("\n");
		}
		C4SNetOut(hnd, 2, 0);
	}

	return hnd;
}
Exemplo n.º 8
0
void *condif( void *hnd, c4snet_data_t *p)
{
  bool bool_p = *(bool *) C4SNetGetData(p);

  if (bool_p) C4SNetOut(hnd, 1, 0);
  else C4SNetOut(hnd, 2, 0);

  C4SNetFree(p);

  return hnd;
}
Exemplo n.º 9
0
/* Do the InitialFactorization from input tile Fac to output tile Tri. */
void *facto(void *hnd, c4snet_data_t *Fac, int N, int B, int K)
{
    int         j;
    const int   P = N / B;
    c4snet_data_t *Tri;

    if (verbose) {
        printf("%s: %p, N=%d, B=%d, (%d, , )\n",
                __func__, Fac, N, B, K);
    }
    if (compute) {
        tile_t  A = (tile_t) C4SNetGetData(Fac);
        void    *tile_ptr;
        c4snet_data_t *tile = C4SNetAlloc(CTYPE_double, B * B, &tile_ptr);
        tile_t  L = (tile_t) tile_ptr;
        int     k_b, j_b, j_bb, i_b;

        memset(L, 0, B * B * sizeof(double));
        for (k_b = 0; k_b < B; ++k_b) {
            if (A[k_b + k_b * B] <= 0) {
                fprintf(stderr, "Not a symmetric positive definite (SPD) matrix\n");
                fprintf(stderr, "K = %d, k_b = %d, B = %d, A[k_b + k_b * B] = %f\n",
                        K, k_b, B, A[k_b + k_b * B]);
                exit(1);
            }
            L[k_b + k_b * B] = sqrt(A[k_b + k_b * B]);
            for (j_b = k_b + 1; j_b < B; ++j_b) {
                L[j_b + k_b * B] = A[j_b + k_b * B] / L[k_b + k_b * B];
            }
            for (j_bb = k_b + 1; j_bb < B; ++j_bb) {
                for (i_b = j_bb; i_b < B; ++i_b) {
                    A[i_b + j_bb * B] -= L[i_b + k_b * B] * L[j_bb + k_b * B];
                }
            }
        }
        Tri = tile;
        C4SNetFree(Fac);
    } else {
        Tri = Fac;
    }
    for (j = K; j < P; ++j) {
        if (verbose) {
            printf("%s: -> Tri, N=%d, B=%d, (%d, %d, )\n", __func__, N, B, K, j);
        }
        C4SNetOut(hnd, 1, C4SNetShallowCopy(Tri), N, B, K, j);
    }
    /* printf("%s: -> Out, N=%d, B=%d, (%d, %d, %d)\n",
           __func__, N, B, K, K - 1, K - 1); */
    C4SNetOut(hnd, 2, Tri, N, B, K, K - 1, K - 1);
    return hnd;
}
Exemplo n.º 10
0
void * update (void *hnd, c4snet_data_t * fatiles, c4snet_data_t * fltiles,
    int bs, int p, int k, int index)
{
    tile * a_tiles = *((tile **) C4SNetGetData (fatiles));
    tile * l_tiles = *((tile **) C4SNetGetData (fltiles));
    int j_b, k_b, i_b;
    int i = index % p, j = index / p;
    tile l1_block = NULL, l2_block = NULL;
    // Diagonal tile
    if (i == j)
        l2_block = l_tiles[k * p + j];
    else {
        l1_block = l_tiles[k * p + i];
        l2_block = l_tiles[k * p + j];
    }
    for (j_b = 0; j_b < bs; j_b++)
        for (k_b = 0; k_b < bs; k_b++) {
            double temp = -1 * l2_block[k_b * bs + j_b];
            if (i != j)
                for (i_b = 0; i_b < bs; i_b++)
                    a_tiles[j * p + i][j_b * bs + i_b] =
                        a_tiles[j * p + i][j_b * bs + i_b]
                      + temp * l1_block[k_b * bs + i_b];
            else
                for (i_b = j_b; i_b < bs; i_b++)
                    a_tiles[j * p + i][j_b * bs + i_b] =
                        a_tiles[j * p + i][j_b * bs + i_b]
                      + temp * l2_block[k_b * bs + i_b];
        }
    C4SNetOut (hnd, 1, fatiles, fltiles, bs, p, k);
    return hnd;
}
Exemplo n.º 11
0
void *
solve_s2 (void *hnd, c4snet_data_t * atiles, c4snet_data_t * ltiles, int bs,
	    int p, int k, int j, c4snet_data_t * timestruct)
{
  int k_b, j_b, i_b;
  tile restrict * restrict a_tiles = *((tile **) C4SNetGetData (atiles));
  tile restrict * restrict l_tiles = *((tile **) C4SNetGetData (ltiles));
  
  memset (l_tiles[j * p + k], 0, sizeof (double) * bs * bs);
  assert (j != k);
  
  for (k_b = 0; k_b < bs; k_b++)
    {
      for (i_b = 0; i_b < bs; i_b++)
	l_tiles[j * p + k][i_b * bs + k_b] =
					a_tiles[j * p + k][i_b * bs + k_b]
				      / l_tiles[k * p + k][k_b * bs + k_b];
      for (j_b = k_b + 1; j_b < bs; j_b++)
	for (i_b = 0; i_b < bs; i_b++)
	  a_tiles[j * p + k][i_b * bs + j_b] =
					a_tiles[j * p + k][i_b * bs + j_b]
				      - l_tiles[k * p + k][j_b * bs + k_b] 
				      * l_tiles[j * p + k][i_b * bs + k_b];
    }
  C4SNetOut (hnd, 1, atiles, ltiles, bs, p, k, timestruct);
  return hnd;
}
Exemplo n.º 12
0
void * decompose (void *hnd, c4snet_data_t *InFile, c4snet_data_t *OutFile,
    int a_size, int bs)
{
    int p, i, j;
    double *array;
    tile *atiles, *ltiles;
    char *infile;

    if (bs <= 0) {
        fprintf (stderr, "A block size must be greater than 0\n");
        exit (1);
    }
    if (a_size <= 0) {
        fprintf (stderr, "The dimension of matrix must be greater than 0\n");
        exit (1);
    }
    if (a_size % bs) {
        fprintf(stderr, 
            "matrix size %d is not a multiple of the block size %d\n",
            a_size, bs);
        exit(1);
    }

    p = a_size / bs;

    /* Get the input filename as a string. */
    infile = chars_to_string(InFile);
    outfile = chars_to_string(OutFile);
    C4SNetFree(InFile);
    C4SNetFree(OutFile);

    array = SNetMemAlloc(a_size * a_size * sizeof(double));
    read_matrix(a_size, array, infile);
    free(infile);

    if (clock_gettime(CLOCK_REALTIME, &begin)) {
        pexit("clock_gettime");
    }

    atiles = (tile *) malloc (sizeof (tile) * p * p);
    ltiles = (tile *) malloc (sizeof (tile) * p * p);
    memset (atiles, 0, sizeof (tile) * p * p);
    memset (ltiles, 0, sizeof (tile) * p * p);
    for (i = 0; i < p; i++)
        for (j = 0; j <= i; j++) {
            atiles[j * p + i] = (double *) malloc (sizeof (double) * bs * bs);
            ltiles[j * p + i] = (double *) malloc (sizeof (double) * bs * bs);
            int ai, aj, ti, tj;
            for (ai = i * bs, ti = 0; ti < bs; ai++, ti++)
                for (aj = j * bs, tj = 0; tj < bs; aj++, tj++)
                    atiles[j * p + i][tj * bs + ti] = array[aj * a_size + ai];
        }
    C4SNetOut (hnd, 1, C4SNetCreate (CTYPE_char, sizeof (void *), &atiles),
               C4SNetCreate (CTYPE_char, sizeof (void *), &ltiles), bs, p, 0);
    free(array);
    return hnd;
}
Exemplo n.º 13
0
void * distribute (void *hnd, c4snet_data_t * fatiles, c4snet_data_t * fltiles,
    int bs, int p, int k)
{
    int i, j;
    for (j = k + 1; j < p; j++)
        for (i = k + 1; i <= j; i++)
            C4SNetOut (hnd, 1, fatiles, fltiles, bs, p, k, i * p + j);
    return hnd;
}
Exemplo n.º 14
0
void *finalP(void *hnd, c4snet_data_t *sd, c4snet_data_t *sk, int c) {
  char *D = (char *) C4SNetGetData(sd);
  char E[8];
  Permute( E, D, FinalPermuteMap, 8 );
//  printbyte(E);
  C4SNetOut(hnd, 1, C4SNetCreate(CTYPE_char, 8, &E[0]));
  C4SNetFree(sd);
  C4SNetFree(sk);
  return hnd;
}
Exemplo n.º 15
0
/************ SOURCE SINK ***************/
void *source(void *hnd, int interval, int mess) {
  char pt[8] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'};
  char key[7] = {'1', '2', '3', '4', '5', '6', '7'};
  int i;
  for (i = 0; i < mess; i++) {
    C4SNetOut(hnd, 1, C4SNetCreate(CTYPE_char, 8, &pt[0]), C4SNetCreate(CTYPE_char, 7, &key[0]));
    usleep(interval);    // sleep in microseconds
  }
  return hnd;
}
Exemplo n.º 16
0
void *subRound(void *hnd, c4snet_data_t *sd, c4snet_data_t*sk, int c, int size) {
  char *D = (char*) C4SNetGetData(sd);
  char *K = (char *) C4SNetGetData(sk);
  int i;
  for (i = 0; i < size; i++) {
    dround(&D[i * 8], &K[i * 7], c);
  }
  c++;
  C4SNetOut(hnd, 1, sd, sk, c, size);
  return hnd;
}
Exemplo n.º 17
0
void *init( void *hnd)
{
  int *int_x;
  c4snet_data_t *result;

  result = C4SNetAlloc(CTYPE_int, X*Y, &int_x);
  for (int i = 0; i < X*Y; i++) int_x[i] = i;

  C4SNetOut(hnd, 1, result);
  return hnd;
}
Exemplo n.º 18
0
void *init( void *hnd)
{
  int *int_x;
  c4snet_data_t *result;

  result = C4SNetAlloc(CTYPE_int, X*Y, &int_x);
  for (int i = 0; i < X*Y; i++) int_x[i] = i;
  printf("\n\n\narray is created\n\n\n");
  C4SNetOut(hnd, 1, result);
  return hnd;
}
Exemplo n.º 19
0
void *algorithm( void *hnd,
                 c4snet_data_t *password,
                 c4snet_data_t *salt,
                 c4snet_data_t *dictionary,
                 int dictionary_size)
{
  struct crypt_data cdata;
  char *pw, *slt, *dict, *result;
  bool found = false;
  int i, j;

  cdata.initialized = 0;

  pw = C4SNetGetData(password);
  slt = C4SNetGetData(salt);
  dict = C4SNetGetData(dictionary);

  for (i = 0, j = 0; i < dictionary_size; i++) {
    result = crypt_r(&dict[j], slt, &cdata);

    if (!strcmp(result, pw)) {
      C4SNetOut(hnd, 1,
          C4SNetCreate(CTYPE_char, strlen(&dict[j]), &dict[j]));

      found = true;
      break;
    } else {
      j += 1 + strlen(&dict[j]);
    }
  }

  if (!found) {
    C4SNetOut(hnd, 2, 0);
  }

  C4SNetFree(password);
  C4SNetFree(salt);
  C4SNetFree(dictionary);

  return hnd;
}
Exemplo n.º 20
0
void *initP(void *hnd, c4snet_data_t *spt, c4snet_data_t *skey) {
  char *pt = (char *) C4SNetGetData(spt);
  char *key = (char *) C4SNetGetData(skey);
  char K[7];
  char D[8];
  Permute( K, key, KeyPermuteMap, 7 );
  Permute( D, pt, InitialPermuteMap, 8 );
  C4SNetOut(hnd, 1, C4SNetCreate(CTYPE_char, 8, &D[0]), C4SNetCreate(CTYPE_char, 7, &K[0]), 0);
  C4SNetFree(spt);
  C4SNetFree(skey);
  return hnd;
}
Exemplo n.º 21
0
void *addt( void *hnd, int n, int w)
{
  int i, s;
  for (s = n, i = 0; i <= w; ++i)
  {
         s += n;
        __asm__ __volatile__ ("");
  }

  C4SNetOut(hnd, 1, n, w);

  return hnd;
}
Exemplo n.º 22
0
void * compute_s1 (void *hnd, c4snet_data_t * atiles, c4snet_data_t * ltiles,
    int bs, int p, int k)
{
    int k_b, j_b, j, i_b, j_bb;
    tile * a_tiles = *((tile **) C4SNetGetData (atiles));
    tile * l_tiles = *((tile **) C4SNetGetData (ltiles));
    for (k_b = 0; k_b < bs; k_b++) {
            l_tiles[k * p + k][k_b * bs + k_b] =
                sqrt (a_tiles[k * p + k][k_b * bs + k_b]);

        for (j_b = k_b + 1; j_b < bs; j_b++)
            l_tiles[k * p + k][k_b * bs + j_b] =
                a_tiles[k * p + k][k_b * bs + j_b] 
              / l_tiles[k * p + k][k_b * bs + k_b];

        for (j_bb = k_b + 1; j_bb < bs; j_bb++)
            for (i_b = j_bb; i_b < bs; i_b++)
                a_tiles[k * p + k][i_b * bs + j_bb] =
                    a_tiles[k * p + k][i_b * bs + j_bb]
                  - l_tiles[k * p + k][k_b * bs + i_b]
                  * l_tiles[k * p + k][k_b * bs + j_bb];
    }

    if (k + 1 < p)
        for (j = k + 1; j < p; j++)
            C4SNetOut (hnd, 1, atiles, ltiles, bs, p, k, j);
    else {
        int i, j;
        C4SNetOut (hnd, 2, ltiles, bs, p);
        /* deallocate a_tiles array and remove atiles field.  */
        for (i = 0; i < p; i++)
            for (j = 0; j <= i; j++)
                free (a_tiles[j * p + i]);
        free (a_tiles);
        C4SNetFree (atiles);
    }
    return hnd;
}
Exemplo n.º 23
0
void *finalP(void *hnd, c4snet_data_t *sd, c4snet_data_t *sk, int c, int size) {
  char *D = (char *) C4SNetGetData(sd);
  int i;
  char *E = (char *) SCCMallocPtr(8 * size);
  for (i = 0; i < size; i++)
    Permute( &E[i * 8], &D[i * 8], FinalPermuteMap, 8 );

  //printbyte(E, size);
  C4SNetOut(hnd, 1, C4SNetCreate(CTYPE_char, size, &E[0]), size);
  C4SNetFree(sd);
  C4SNetFree(sk);
  //SCCFreePtr(E);
  return hnd;
}
Exemplo n.º 24
0
void *showB( void *hnd, c4snet_data_t *x)
{
  int int_x = *(int *)C4SNetGetData( x);
  c4snet_data_t *result;

  printf("%s: %d\n", __func__, int_x);

  result = C4SNetCreate(CTYPE_int, 1, &int_x);

  C4SNetFree(x);

  C4SNetOut( hnd, 1, result);

  return hnd;
}
Exemplo n.º 25
0
void *dec( void *hnd, c4snet_data_t *x)
{
  int int_x;
  c4snet_data_t *result;

  int_x= *(int *)C4SNetGetData( x);
  int_x -= 1;

  result = C4SNetCreate(CTYPE_int, 1, &int_x);

  C4SNetFree(x);

  C4SNetOut( hnd, 1, result);
  return( hnd);
}
Exemplo n.º 26
0
void *initP(void *hnd, c4snet_data_t *spt, c4snet_data_t *skey, int size) {
  char *pt = (char *) C4SNetGetData(spt);
  char *key = (char *) C4SNetGetData(skey);
  char *K = (char *) SCCMallocPtr(size * 7);
  char *D = (char *) SCCMallocPtr(size * 8);
  int i;
  for (i = 0; i < size; i++) {
    Permute( &K[i * 7], key, KeyPermuteMap, 7 );
    Permute( &D[i * 8], pt, InitialPermuteMap, 8 );
  }
  C4SNetOut(hnd, 1, C4SNetCreate(CTYPE_char, 8 * size, &D[0]), C4SNetCreate(CTYPE_char, 7 * size, &K[0]), 0, size);
  C4SNetFree(spt);
  C4SNetFree(skey);
  SCCFreePtr (K);
  SCCFreePtr (D);
  return hnd;
}
Exemplo n.º 27
0
void *subRound(void *hnd, c4snet_data_t *sd, c4snet_data_t*sk, int c) {
  char *D = (char*) C4SNetGetData(sd);
  char *K = (char *) C4SNetGetData(sk);
  int i;
  for (i = 0; i < 8; i++) {
    int j;
    char *L = D;           /* The left 4 bytes (half) of the data block.   */
    char *R = &(D[4]);     /* The right half of the ciphertext block.      */
    char  Rexp[6];         /* Expanded right half.                         */
    char  Rn[4];           /* New value of R, as we manipulate it.         */
    char  SubK[6];         /* The 48-bit subkey.                           */

    /* Generate the subkey for this round.
    */
    KeyShift( K, KeyRotation[i + c * 8] );
    Permute( SubK, K, KeyCompression, 6 );

    /* Expand the right half (R) of the data block to 48 bytes,
     * then XOR the result with the Subkey for this round.
     */
    Permute( Rexp, R, DataExpansion, 6 );
    xor( Rexp, Rexp, SubK, 6 );

    /* S-Box substitutions, P-Box permutation, and final XOR.
     * The S-Box substitutions return a 32-bit value, which is then
     * run through the 32-bit to 32-bit P-Box permutation.  The P-Box
     * result is then XOR'd with the left-hand half of the key.
     * (Rexp is used as a temporary variable between the P-Box & XOR).
     */
    sbox( Rn, Rexp );
    Permute( Rexp, Rn, PBox, 4 );
    xor( Rn, L, Rexp, 4 );

    /* The previous R becomes the new L,
     * and Rn is moved into R ready for the next round.
     */
    for( j = 0; j < 4; j++ )
    {
      L[j] = R[j];
      R[j] = Rn[j];
    }
  }
  c++;
  C4SNetOut(hnd, 1, sd, sk, c);
  return hnd;
}
Exemplo n.º 28
0
void *
finalize (void *hnd, c4snet_data_t * fltiles, int bs, int p)
{
    struct timespec end;
    tile * tiles = *((tile **) C4SNetGetData (fltiles));

    if (clock_gettime(CLOCK_REALTIME, &end)) {
        pexit("clock_gettime");
    }
    printf("Time for size %d x %d : %lf sec\n", bs * p, bs * p, delta_time(begin, end));
    
    write_matrix(tiles, p, bs);

    C4SNetOut (hnd, 1, C4SNetCreate (CTYPE_char, 5, "Done."));
    C4SNetFree (fltiles);
    return hnd;
}
Exemplo n.º 29
0
void *add( void *hnd, c4snet_data_t *n, c4snet_data_t *w)
{
  int int_n = *(int *) C4SNetGetData(n);
  int int_w = *(int *) C4SNetGetData(w);

  C4SNetFree(n);
  C4SNetFree(w);

  int i, s;
  for (s = int_n, i = 0; i <= int_w; ++i)
  {
         s += int_n;
        __asm__ __volatile__ ("");
  }

  C4SNetOut(hnd, 1, C4SNetCreate(CTYPE_int, 1, &int_n), C4SNetCreate(CTYPE_int, 1, &int_w));

  return hnd;
}
Exemplo n.º 30
0
void *
update (void *hnd, c4snet_data_t * fatiles, c4snet_data_t * fltiles, int bs,
	int p, int k, int index, c4snet_data_t *timestruct)
{
  tile restrict * restrict a_tiles = *((tile **) C4SNetGetData (fatiles));
  tile restrict * restrict l_tiles = *((tile **) C4SNetGetData (fltiles));
  int j_b, k_b, i_b;
  int i = index % p, j = index / p;
  tile l1_block, l2_block;
      // Diagonal tile
      if (i == j)
	l2_block = l_tiles[j * p + k];
      else
	{
	  l2_block = l_tiles[i * p + k];
	  l1_block = l_tiles[j * p + k];
	}

      for (j_b = 0; j_b < bs; j_b++)
	for (k_b = 0; k_b < bs; k_b++)
	  {
	    double temp = -1 * l2_block[j_b * bs + k_b];
	    if (i != j)
	      for (i_b = 0; i_b < bs; i_b++)
		a_tiles[j * p + i][i_b * bs + j_b] =
			      a_tiles[j * p + i][i_b * bs + j_b]
			    + temp * l1_block[i_b * bs + k_b];
	    else
	      for (i_b = j_b; i_b < bs; i_b++)
		a_tiles[j * p + i][i_b * bs + j_b] =
				    a_tiles[j * p + i][i_b * bs + j_b]
				  + temp * l2_block[i_b * bs + k_b];
	  }
  C4SNetOut (hnd, 1, fatiles, fltiles, bs, p, k, timestruct);
  return hnd;
}