/*
	function :
		销毁文件集合crs_fd_set_t handler
	input :
		crs_fd_set_t *set : 文件集合
	return value :
		success : 返回 0
		fail : -1
*/
extern int32_t crs_fd_set_destroy(crs_fd_set_t *set)
{
    if ( NULL == set )
    {
        return -1;
    }
    crs_free( set );
    set = NULL;
    return 0;
}
Пример #2
0
// CRS -----------------------
int librlc_crs_encode(int k, int m, int w, int packet_size,
        const char *orig_data, int orig_data_len,
        char **encoded_data, char **encoded_parity,
        int *chunk_len)
{
    crs_coder_t crs_code;
    // crs init
    crs_init(&crs_code, k+m, k, w, packet_size);
    // rs encode
    crs_encode(crs_code.pcrsi, orig_data, orig_data_len, encoded_data, encoded_parity, chunk_len);

    // rs free
    crs_free(&crs_code);

    return 0;
}
Пример #3
0
int librlc_crs_repair(int k, int m, int w, int packet_size,
        char *available_data, int *data_list, int data_num,int chunk_len,
        int *repair_list, int repair_num, char **out_data)
{
    int ret = 0;
    crs_coder_t crs_code;
    //crs init
    crs_init(&crs_code, k+m, k, w, packet_size);
    // re repair
    ret = crs_repair(crs_code.pcrsi, available_data, data_list, data_num,
            chunk_len, repair_list, repair_num, out_data);

    // crs free
    crs_free(&crs_code);
    return ret;
}
Пример #4
0
int main(int narg, char* arg[])
{
  struct crs_data *crs;
  comm_ext world; int id,np;
  struct comm comm;
#ifdef MPI
  MPI_Init(&narg,&arg);
  world = MPI_COMM_WORLD;
  MPI_Comm_size(world,&np);
#else
  world=0, np=1;
#endif

  comm_init(&comm,world);
  if(np!=3) { puts("run with 3 procs"); exit(1); }
  id = comm.id;

  crs = crs_setup(nx[id], &x_id[id][0],
                  nz[id], &Ai[id][0], &Aj[id][0], &Ar[id][0],
                  0, &comm);

  crs_stats(crs);
  
  if(1) {
    uint i,j; double xv[8];
    for(i=0;i<8;++i) {
      crs_solve(xv,crs,&bv[id][i][0]);
      printf("%d col %d:",id,i);
      for(j=0;j<nx[id];++j) printf("\t%.4g",xv[j]);
      printf("\n");
    }
  }

  crs_free(crs);
  comm_free(&comm);

#ifdef MPI
  MPI_Finalize();
#endif
  return 0;
}
/*
	function :
		由TCP服务器调用,用于从已完成连接的队列的头返回下一个已完成连接
	input :
		crs_socket_handler_t *sock : socket handle
	return value :
		success :	返回 所接收的socket
		fail : 	返回 -1
*/
extern crs_socket_handler_t *crs_accept(crs_socket_handler_t *sock)
{
    char str_ip[16];
	memset(str_ip, 0,16);
    crs_socket_handler_t *new_sock = (crs_socket_handler_t *) crs_malloc(sizeof(crs_socket_handler_t));
    if (NULL == new_sock) {
        return NULL;
    }
    crs_memset(new_sock, 0, sizeof(crs_socket_handler_t));

    struct sockaddr_in peeraddr;
    socklen_t peeraddr_len;
    new_sock->fd = accept(sock->fd, (struct sockaddr *)&peeraddr, &peeraddr_len);
    if (0 > new_sock->fd) {
        crs_free(new_sock);
        return NULL;
    }

    strncpy(new_sock->sock_info.peer_ip, crs_inet_ntoa(peeraddr.sin_addr.s_addr,str_ip,16), sizeof(new_sock->sock_info.peer_ip) -1);
    new_sock->sock_info.peer_port = ntohs(peeraddr.sin_port);

    return new_sock;
}
Пример #6
0
int main(int narg, char* arg[])
{
    uint n;
    ulong *xid;
    uint nz;
    uint *Ai, *Aj;
    double *A;
    uint i;
    double *x, *b, *x2;

    struct crs_data *crs;
    comm_ext world;
    int id,np;
    struct comm comm;
#ifdef MPI
    MPI_Init(&narg,&arg);
    world = MPI_COMM_WORLD;
    MPI_Comm_size(world,&np);
#else
    world=0, np=1;
#endif

    comm_init(&comm,world);
    id = comm.id;

    n=M+1;
    if(id==np-1) --n;
    xid = tmalloc(ulong,n);
    x=tmalloc(double,3*n), b=x+n, x2=b+n;
    for(i=0; i<n; ++i) xid[i]=1+id*M+i;
    nz=2*M;
    if(id==np-1) --nz;
    Ai=tmalloc(uint,2*nz), Aj=Ai+nz;
    A =tmalloc(double,nz);
    for(i=0; i<M; ++i) Ai[i]=i,Aj[i]=i,A[i]=2;
    if(id==0) A[0]=1;
    if(id==np-1) A[n-1]=1;
    for(i=M; i<nz; ++i) Ai[i]=i-M,Aj[i]=i-M+1,A[i]=-1;

    crs = crs_setup(n,xid, nz,Ai,Aj,A, 1, &comm);
    crs_stats(crs);

    {
        double tn = M*np, mean = 1*(tn+1)/2;
        double avg = 1*(tn-1)*(tn+1)/12;
        for(i=0; i<n; ++i) x[i]=(xid[i]-mean)*(xid[i]-mean)-avg;
        for(i=0; i<n; ++i) b[i]=A[i]*x[i]
                                    - (i>0   || id!=0    ? (xid[i]-1-mean)*(xid[i]-1-mean)-avg : 0)
                                    - (i+1<n || id!=np-1 ? (xid[i]+1-mean)*(xid[i]+1-mean)-avg : 0);
        if(id!=np-1) b[n-1]=0;
    }
    crs_solve(x2,crs,b);
    crs_free(crs);
    comm_free(&comm);

    {   double dif=0;
        for(i=0; i<n; ++i) {
            double d=fabs(x[i]-x2[i])/(.1+fabs(x[i]));
            if(d>dif) dif=d;
        }
        printf("%d : max dif = %g\n",id,dif);
    }
    free(A);
    free(Ai);
    free(x);
    free(xid);

#ifdef MPI
    MPI_Finalize();
#endif

    if(id==0) printf("test successful\n");

    return 0;
}