/**
 * Create endpoints and connection for DSP
 * @return MCAPI_SUCCESS/Error Code
 */
mcapi_status_t dsp_initialize(void) {

  mcapi_status_t status = MCAPI_ERR_GENERAL;

  /**
   * Create end-point for data and command transfer
   */
  dsp_command_endpoint = mcapi_endpoint_create(PORT_COMMAND, &status);
#ifdef DEBUG_INFO
  if (MCAPI_SUCCESS != status) {
    fprintf(stdout, "[%s] %d status: %d mcapi_endpoint_create failure\n",
        __FILE__, __LINE__, status);
    exit(1);
  }
#endif
  dsp_data_endpoint = mcapi_endpoint_create(PORT_DATA, &status);
#ifdef DEBUG_INFO
  if (MCAPI_SUCCESS != status) {
    fprintf(stdout, "[%s] %d status: %d mcapi_endpoint_create failure\n",
        __FILE__, __LINE__, status);
    exit(1);
  }
#endif
  dsp_data_send_endpoint = mcapi_endpoint_create(PORT_DATA_RECV, &status);
#ifdef DEBUG_INFO
  if (MCAPI_SUCCESS != status) {
    fprintf(stdout, "[%s] %d status: %d mcapi_endpoint_create failure\n",
        __FILE__, __LINE__, status);
    exit(1);
  }
#endif
  /**
   * Get the remote endpoints for communication
   */
  remote_data_recv_endpoint = mcapi_endpoint_get(DOMAIN, NODE_CORE_0,
      PORT_DATA_RECV, MCAPI_TIMEOUT_INFINITE, &status);
#ifdef DEBUG_INFO
  if (MCAPI_SUCCESS != status) {
    fprintf(stdout, "[%s] %d status: %d mcapi_endpoint_get failure\n", __FILE__,
        __LINE__, status);
    exit(1);
  }
#endif

  dsp_data_endpoint = dsp_data_send_endpoint;
  dsp_command_endpoint = dsp_data_send_endpoint;

  return status;
}
Esempio n. 2
0
void* second_thread(void* data)
{
  mca_status_t mcapi_status;
  mcapi_info_t mcapi_version;
  mcapi_param_t parms;
  int rc = 0;

  /* do some MCAPI work */

  printf("In thread 2, pid=%d\n",getpid());

  mcapi_initialize(the_domain, 
                   the_second_node, 
                   NULL,&parms,
                   &mcapi_version, 
                   &mcapi_status);

  if (mcapi_status != MCAPI_SUCCESS) {
    fprintf(stderr,"ERROR: thread 2 (pid %d) failed to initialize MCAPI: %s\n",
            getpid(),mcapi_display_status(mcapi_status,status_buff,sizeof(status_buff)));
    rc++; finalize(rc); return NULL;
  }

  printf("Thread 2 INITIALIZE DONE\n");

  thread2_recv_endpt = 
    mcapi_endpoint_create(RECV_PORT, &mcapi_status);
  if (mcapi_status != MCAPI_SUCCESS) {
    fprintf(stderr,"ERROR: thread 2 (pid %d) failed to create recv endpoint: %s\n",
            getpid(),mcapi_display_status(mcapi_status,status_buff,sizeof(status_buff)));
    rc++; finalize(rc); return NULL;
  }

  printf("Thread 2 CREATE RECV ENDPT DONE\n");

  thread2_send_endpt = 
    mcapi_endpoint_create(SEND_PORT, &mcapi_status);
  if (mcapi_status != MCAPI_SUCCESS) {
    fprintf(stderr,"ERROR: thread 2 (pid %d) failed to create send endpoint: %s\n",
            getpid(),mcapi_display_status(mcapi_status,status_buff,sizeof(status_buff)));
    rc++; finalize(rc); return NULL;
  }

  printf("Thread 2 CREATE SEND ENDPT DONE\n");

  finalize(MCAPI_FALSE); 
 
  return NULL;
}
Esempio n. 3
0
int do_main_thread(void)
{
  mca_status_t mcapi_status;
  mcapi_info_t mcapi_version;
  mcapi_param_t parms;
  int rc = 0;

  printf("In main thread, pid=%d\n",getpid());

  mcapi_initialize(the_domain, 
                   the_main_node, 
                   NULL,&parms,
                   &mcapi_version, 
                   &mcapi_status);

  if (mcapi_status != MCAPI_SUCCESS) {
    fprintf(stderr,"ERROR: thread 2 (pid %d) failed to initialize MCAPI: %s\n",
            getpid(),mcapi_display_status(mcapi_status,status_buff,sizeof(status_buff)));
    rc++; finalize(rc); return rc;
  }

  printf("Main Thread INITIALIZE DONE\n");

  main_recv_endpt = 
    mcapi_endpoint_create(RECV_PORT, &mcapi_status);
  if (mcapi_status != MCAPI_SUCCESS) {
    fprintf(stderr,"ERROR: main thread (pid %d) failed to create recv endpoint: %s\n",
            getpid(),mcapi_display_status(mcapi_status,status_buff,sizeof(status_buff)));
    rc++; finalize(rc); return rc;
  }

  printf("Main Thread CREATE RECV ENDPT DONE\n");

  main_send_endpt = 
    mcapi_endpoint_create(SEND_PORT, &mcapi_status);
  if (mcapi_status != MCAPI_SUCCESS) {
    fprintf(stderr,"ERROR: main thread (pid %d) failed to create send endpoint: %s\n",
            getpid(),mcapi_display_status(mcapi_status,status_buff,sizeof(status_buff)));
    rc++; finalize(rc); return rc;
  }

  printf("Main Thread CREATE SEND ENDPT DONE\n");
  finalize(rc); 
  return rc;
}
Esempio n. 4
0
int main(void)
{

  
  mcapi_endpoint_t recv_endpt;
  mcapi_endpoint_t send_endpt;
  mca_status_t status;
  int rc;
  mcapi_param_t parms;
  mcapi_info_t version;

  mcapi_set_debug_level(6);

  /* create a node */
  mcapi_initialize(DOMAIN,NODE,NULL,&parms,&version,&status);
  if (status != MCAPI_SUCCESS) {
    fprintf(stderr,"\nERROR: Failed to initialize: %s\n",mcapi_display_status(status,status_buff,sizeof(status_buff)));  
    return fail;
  }
  
  /* create the endpoints */
  send_endpt = mcapi_endpoint_create(1,&status);
  recv_endpt =  mcapi_endpoint_create(2,&status);

  sender(send_endpt,recv_endpt,0,NUM_MSGS-1);
  receiver(recv_endpt,0,NUM_MSGS-1);
 
  receiver(recv_endpt,NUM_MSGS,(NUM_MSGS*2)-1);
  sender(send_endpt,recv_endpt,NUM_MSGS,(NUM_MSGS*2)-1);

  rc = check_results();

  mcapi_finalize(&status);

  if (status != MCAPI_SUCCESS) {
    fprintf(stderr,"\nERROR: Failed to finalize: %s\n",mcapi_display_status(status,status_buff,sizeof(status_buff)));  
    return fail;
  }
  
  if (rc == 0) { printf("   Test PASSED\n"); } else { printf("   Test FAILED\n"); }
  return rc;
}
Esempio n. 5
0
int main(int argc,char * argv[])
{
	int process_num=sysconf(_SC_NPROCESSORS_CONF);
	printf("%i processors() in KeyStoneII system.\n\r",process_num);
	cpu_set_t mask;
	int myid= atoi(argv[1]);
	CPU_ZERO(&mask);
	CPU_SET(myid,&mask);
	if(sched_setaffinity(getpid(),sizeof(mask),&mask)==-1)
	{
		printf("Error: set CPU affinity failed.\n\r");
		return 0;
	}
	printf("Set CPU affinity success!\n\r");
	usleep(3000000);
	if(CPU_ISSET(myid, &mask)) 
	{
		printf("RECV is running on Processor %i\n\r",myid);
	}
	usleep(3000000);

	mcapi_status_t status;
	mcapi_info_t info;

	char status_msg[MCAPI_MAX_STATUS_MSG_LEN];
	size_t received_size;
	char recv_buf[BUFLEN]="";

	mcapi_request_t request;
	
	mcapi_endpoint_t recv_msg_point;

	mcapi_initialize(THE_DOMAIN,YELLOW_NODE,0,0,&info,&status);
	recv_msg_point=mcapi_endpoint_create(YELLOW_MSG,&status);
	mcapi_msg_recv(recv_msg_point,recv_buf,BUFLEN,&received_size,&status);
	usleep(3000000);
	printf("recviced message: %s\n\r",recv_buf);
	mcapi_finalize(&status);
	return EXIT_SUCCESS;
}
Esempio n. 6
0
int main(int argc, char** argv)
{

  mcapi_endpoint_t recv_endpt;
  mcapi_endpoint_t send_endpt;
  mca_status_t status;
  mcapi_request_t request;
  int i;

  mcapi_sclchan_recv_hndl_t recv_handle; /* r1 = ep1->ep2 */
  mcapi_sclchan_send_hndl_t send_handle; /* r1 = ep1->ep2 */
  size_t size;
mcapi_param_t parms;
  mcapi_info_t version;

  mcapi_set_debug_level(6);

  /* create a node */
  mcapi_initialize(DOMAIN,NODE,NULL,&parms,&version,&status);
  if (status != MCAPI_SUCCESS) {
    fprintf(stderr,"\nERROR: Failed to initialize: %s\n",mcapi_display_status(status,status_buff,sizeof(status_buff)));  
    return -1;
  }
  
  /* create the endpoints */
  send_endpt = mcapi_endpoint_create(1,&status);
  recv_endpt =  mcapi_endpoint_create(2,&status);

  /* connect the channel */

  /* connect the channel */
do {
    mcapi_sclchan_connect_i(send_endpt,recv_endpt,&request,&status);
//retry if all request handles are in-use
} while (status == MCAPI_ERR_REQUEST_LIMIT);
mcapi_wait(&request,&size,TIMEOUT,&status);
  if (status == MCAPI_ERR_CHAN_CONNECTED) {
    fprintf(stderr,"\nokay, already connected: %s\n",mcapi_display_status(status,status_buff,sizeof(status_buff)));  
  }
  else if (status != MCAPI_SUCCESS) { 
    fprintf(stderr,"\nERROR: Failed to connect: %s\n",mcapi_display_status(status,status_buff,sizeof(status_buff)));  
    fail();
  }


  /* open the endpoint handles */
do {
    mcapi_sclchan_send_open_i(&send_handle /*send_handle*/,send_endpt, &request, &status);
//retry if all request handles are in-use
} while (status == MCAPI_ERR_REQUEST_LIMIT);
mcapi_wait(&request,&size,TIMEOUT,&status);
  if (status != MCAPI_SUCCESS) { 
    fprintf(stderr,"\nERROR: Failed to open send handle: %s\n",mcapi_display_status(status,status_buff,sizeof(status_buff)));  
    fail();
  }
do {
    mcapi_sclchan_recv_open_i(&recv_handle /*recv_handle*/,recv_endpt, &request, &status);
//retry if all request handles are in-use
} while (status == MCAPI_ERR_REQUEST_LIMIT);
mcapi_wait(&request,&size,TIMEOUT,&status);
  if (status != MCAPI_SUCCESS) { 
    fprintf(stderr,"\nERROR: Failed to open recv handle: %s\n",mcapi_display_status(status,status_buff,sizeof(status_buff)));  
    fail();
  }

  /* issue sends */
  for (i = 0; i < MCAPI_MAX_QUEUE_ELEMENTS; i++) {
    if (!sender(send_handle,MCAPI_SUCCESS)) {
      fail();
    }
  }

  /* queue should be full */
  if (!sender(send_handle,MCAPI_ERR_MEM_LIMIT)) {
    fail();
  }

  /* issue receives */
  for (i = 0; i < MCAPI_MAX_QUEUE_ELEMENTS; i++) {
    if (!receiver(recv_handle,MCAPI_SUCCESS)) {
      fail();
    }
  }

  /* check results */
  if (! check_results()) {
    fail();
  }

  /* close handles */


  mcapi_finalize(&status);
  if (status != MCAPI_SUCCESS) {
    fprintf(stderr,"\nERROR: Failed to finalize: %s\n",mcapi_display_status(status,status_buff,sizeof(status_buff)));  
    fail();
  }
  
  printf("   Test PASSED\n");
  return 0;
}
Esempio n. 7
0
int main(int argc, char *argv[])
{
    //the endpoints used in message-oriented communication
    mcapi_endpoint_t red_msg_point;
    mcapi_endpoint_t yellow_msg_point;
    mcapi_endpoint_t green_msg_point;
    //the endpoints used in channel-oriented communication
    mcapi_endpoint_t yellow_sin_chan;
    mcapi_endpoint_t yellow_cos_chan;
    mcapi_endpoint_t yellow_pkt_chan;
    //status message received in almost all MCAPI-calls
    mcapi_status_t status;
    //info-struct received in initialization
    mcapi_info_t info;
    //buffer for incoming messages
    char recv_buf[MAX_MSG_LEN];
    //the status code converted to string
    char status_msg[MCAPI_MAX_STATUS_MSG_LEN];
    //size parameter required in some calls
    size_t size = 1;
    //an iterator used in loops
    unsigned int i = 0;
    //request handle is used to operate wait-calls
    mcapi_request_t request;
    //a second request handle! just so that we see it works :)
    mcapi_request_t request2;
    //sandles used in channel-messaging
    mcapi_sclchan_recv_hndl_t sin_handle;
    mcapi_sclchan_recv_hndl_t cos_handle;
    mcapi_pktchan_send_hndl_t pkt_handle;
    //how many scalars we are expecting
    char count = 0;
    //buffer of data sent in messages
    unsigned char* send_buf;

    printf(COLOR "here\n");

    //We are yellow! initialize accordingly
    mcapi_initialize( THE_DOMAIN, YELLOW_NODE, 0, 0, &info, &status );
    check( MCAPI_SUCCESS, status );
    //create our side of messaging
    yellow_msg_point = mcapi_endpoint_create( YELLOW_MSG, &status );
    check( MCAPI_SUCCESS, status );
    //obtain the red message point
    red_msg_point = mcapi_endpoint_get( THE_DOMAIN,
    RED_NODE, RED_MSG, TIMEOUT, &status );
    check( MCAPI_SUCCESS, status );

    printf(COLOR "start-up messaging\n");

    //wait for the amount to come
    mcapi_msg_recv( yellow_msg_point, recv_buf, MAX_MSG_LEN, &size,
    &status );
    check( MCAPI_SUCCESS, status );
    //read the count from first byte
    count = recv_buf[0];
    //surprise! this process reserves the buffer with malloc
    send_buf = (char*)malloc(count*2);

    //send ack
    send_buf[0] = 'a';
    mcapi_msg_send( yellow_msg_point, red_msg_point, send_buf, 1,
    0, &status );
    check( MCAPI_SUCCESS, status );

    printf(COLOR "start-up messaged with %u bytes. expecting %u scalars\n",
    size, count );

    //open our channel endpoint to sin
    yellow_sin_chan = mcapi_endpoint_create( YELLOW_SIN, &status );
    check( MCAPI_SUCCESS, status );
    //open our channel endpoint to cos
    yellow_cos_chan = mcapi_endpoint_create( YELLOW_COS, &status );
    check( MCAPI_SUCCESS, status );
    //open our ends, let senders form connection
    mcapi_sclchan_recv_open_i( &sin_handle, yellow_sin_chan, &request, 
    &status );
    check( MCAPI_PENDING, status );
    mcapi_sclchan_recv_open_i( &cos_handle, yellow_cos_chan, &request2, 
    &status );
    check( MCAPI_PENDING, status );
    //wait for it to happen
    mcapi_wait( &request, &size, TIMEOUT, &status );
    check( MCAPI_SUCCESS, status );
    mcapi_wait( &request2, &size, TIMEOUT, &status );
    check( MCAPI_SUCCESS, status );

    printf(COLOR "beginning the receive value\n");

    for ( i = 0; i < 15000; ++i )
    {
        //an iterator used in loops
        unsigned int j = 0;

        //start to receveive stuff
        //i+=2 because our values are two bytes while buf is one byte
        for ( j = 0; j < count; ++j )
        {
            //receive cos scalar
            short cval = mcapi_sclchan_recv_uint16( cos_handle, &status );
            check( MCAPI_SUCCESS, status );
            //receive sin scalar
            short sval = mcapi_sclchan_recv_uint16( sin_handle, &status );
            check( MCAPI_SUCCESS, status );
            //addition
            short sumval = sval + cval;
            //put to buf
            send_buf[j*2] = sumval;
            send_buf[j*2+1] = sumval >> 8;
            //printf( COLOR "%hX %hhX %hhX\n", sumval, send_buf[j*2],
            //send_buf[j*2+1] );
        }
    }

    printf(COLOR "receiving done, closing scalar channels\n");

    //close our ends
    mcapi_sclchan_recv_close_i( sin_handle, &request, &status );
    check( MCAPI_PENDING, status );
    mcapi_sclchan_recv_close_i( cos_handle, &request2, &status );
    check( MCAPI_PENDING, status );
    //wait for it to happen
    mcapi_wait( &request, &size, TIMEOUT, &status );
    check( MCAPI_SUCCESS, status );
    mcapi_wait( &request2, &size, TIMEOUT, &status );
    check( MCAPI_SUCCESS, status );

    printf(COLOR "closed, informing green\n");

    //obtain their endpoint
    green_msg_point = mcapi_endpoint_get( THE_DOMAIN,
    GREEN_NODE, GREEN_MSG, TIMEOUT, &status );
    check( MCAPI_SUCCESS, status );
    //send the message
    mcapi_msg_send( yellow_msg_point, green_msg_point, send_buf, 1,
    0, &status );
    check( MCAPI_SUCCESS, status );

    printf(COLOR "informed, opening packet channel\n");

    //open our channel endpoint to green
    yellow_pkt_chan = mcapi_endpoint_create( YELLOW_PKT, &status );
    check( MCAPI_SUCCESS, status );
    //open our end, let receiver form connection
    mcapi_pktchan_send_open_i( &pkt_handle, yellow_pkt_chan, &request, 
    &status );
    check( MCAPI_PENDING, status );
    //wait for it to happen
    mcapi_wait( &request, &size, TIMEOUT, &status );
    check( MCAPI_SUCCESS, status );
    
    //now send
    printf(COLOR "sending the packet\n");
    mcapi_pktchan_send( pkt_handle, send_buf, count, &status );

    //and now close
    printf(COLOR "sent the packet, closing\n");
    mcapi_pktchan_send_close_i( pkt_handle, &request, &status );
    check( MCAPI_PENDING, status );
    mcapi_wait( &request, &size, TIMEOUT, &status );
    check( MCAPI_SUCCESS, status );

    printf(COLOR "closed, shutdown\n");

    //free buf
    free( send_buf );

    //shut-down
    mcapi_finalize( &status );
    check( MCAPI_SUCCESS, status );

    return EXIT_SUCCESS;
}
Esempio n. 8
0
int main()
{
    //status message received in almost all MCAPI-calls
    mcapi_status_t status;
    //info-struct received in initialization
    mcapi_info_t info;
    //the status code converted to string
    char status_msg[MCAPI_MAX_STATUS_MSG_LEN];
    //an iterator used in loops
    unsigned int i = 0;
    //request handle is used to operate wait-calls
    mcapi_request_t request;
    //size parameter required in some calls
    size_t size = 1;
    //send-handle used in channel-messaging
    mcapi_pktchan_send_hndl_t handy;
    //a separate receive buffer used for messages
    char recv_msg[MAX_MSG_LEN];
    //get our stuff here. tip: if signed were used, it bastardized the values
    unsigned char* recv_buf;

    //the endpoints used in channel-oriented communication
    mcapi_endpoint_t green_chan;
    mcapi_endpoint_t yellow_chan;
    mcapi_endpoint_t green_msg_point;

    printf( COLOR "here\n");

    //we are the green
    mcapi_initialize( THE_DOMAIN, GREEN_NODE, 0, 0, &info, &status );
    check( MCAPI_SUCCESS, status );

    //create our message endpoint
    green_msg_point = mcapi_endpoint_create( GREEN_MSG, &status );
    check( MCAPI_SUCCESS, status );
    //wait for the start signal
    mcapi_msg_recv(green_msg_point, recv_msg, MAX_MSG_LEN, &size,
    &status );
    check( MCAPI_SUCCESS, status );
    printf(COLOR "signal received, starting to connect & open\n");

    //create our channel message endpoint
    green_chan = mcapi_endpoint_create( GREEN_PKT, &status );
    check( MCAPI_SUCCESS, status );
    //get their channel message endpoint
    yellow_chan = mcapi_endpoint_get( THE_DOMAIN,
    YELLOW_NODE, YELLOW_PKT, TIMEOUT, &status );
    check( MCAPI_SUCCESS, status );
    //form the channel
    mcapi_pktchan_connect_i( yellow_chan, green_chan, &request, &status );
    check( MCAPI_PENDING, status );
    //wait for it to happen
    mcapi_wait( &request, &size, TIMEOUT, &status );
    check( MCAPI_SUCCESS, status );
    //open our end
    mcapi_pktchan_recv_open_i( &handy, green_chan, &request, &status );
    check( MCAPI_PENDING, status );
    //wait for it to happen
    mcapi_wait( &request, &size, TIMEOUT, &status );
    check( MCAPI_SUCCESS, status );

    printf(COLOR "beginning the receive\n");

    //start to receive our stuff
    mcapi_pktchan_recv( handy, (void*)&recv_buf, &size, &status );
    check( MCAPI_SUCCESS, status );
    
    printf(COLOR "retrieval done, closing\n");

    //close our end
    mcapi_pktchan_recv_close_i( handy, &request, &status );
    check( MCAPI_PENDING, status );
    //wait for it to happen
    mcapi_wait( &request, &size, TIMEOUT, &status );
    check( MCAPI_SUCCESS, status );

    printf(COLOR "closed, go over the values\n");

    //go through that stuff
    //i+=2 because our values are two bytes while buf is one byte
    for ( i = 0; i < size; i+=2 )
    {
        //reconstruct the short
        short sumval = recv_buf[i+1] << 8 | recv_buf[i];
        //printf( COLOR "%hX %hhX %hhX\n", sumval, recv_buf[i], recv_buf[i+1] );
    }

    printf(COLOR "buffer release and shut down\n");

    //release
    mcapi_pktchan_release( recv_buf, &status );
    check( MCAPI_SUCCESS, status );

    //finalize at the end, regardless of which process we are
    mcapi_finalize( &status );
    check( MCAPI_SUCCESS, status );

    return EXIT_SUCCESS;
}
Esempio n. 9
0
int main(int argc, char** argv) {
  mcapi_boolean_t recv_done = MCAPI_FALSE;
  mcapi_boolean_t send_done = MCAPI_FALSE;

  mca_status_t status;
  mcapi_request_t request;
  size_t size;
  int num_sends,num_recvs,order,i;
  struct timeval tv;
  unsigned int seed;
  mcapi_endpoint_t recv_endpt;
  mcapi_endpoint_t send_endpt;
  int rc = 0;
  mcapi_param_t parms;
  mcapi_info_t version;
  mcapi_set_debug_level(6);

  memset(&send_requests,0,sizeof(send_requests));
  memset(&recv_requests,0,sizeof(recv_requests));
 
  /* initialize the random number generator with a seed */
  if (argc == 2) {
    seed = atoi(argv[1]);
  } else {
    gettimeofday(&tv,0);
    seed = tv.tv_sec + tv.tv_usec;
  }
  printf("Using seed:[%u]\n",seed);
  srand(seed);
  
  /* create a node */
  mcapi_initialize(DOMAIN,NODE,NULL,&parms,&version,&status);
  if (status != MCAPI_SUCCESS) {
    fprintf(stderr,"\nERROR: Failed to initialize (0): %s\n",mcapi_display_status(status,status_buff,sizeof(status_buff)));  
    rc++;
    mcapi_finalize(&status); 
    return rc; 
  }
  
  /* create the endpoints */
  send_endpt = mcapi_endpoint_create(1,&status);
  recv_endpt =  mcapi_endpoint_create(2,&status);

  
    /*************************** connect the channels *********************/
  do {
    mcapi_pktchan_connect_i(send_endpt,recv_endpt,&request,&status);
    //retry if all request handles are in-use
  } while (status == MCAPI_ERR_REQUEST_LIMIT);
  while (!mcapi_test(&request,&size,&status)) {}
  if (status != MCAPI_SUCCESS) { 
    fprintf(stderr,"\nERROR: Failed to initialize (1): %s\n",mcapi_display_status(status,status_buff,sizeof(status_buff)));
    rc++;
    mcapi_finalize(&status); 
    return rc; 
  }
  
  /*************************** open the channels *********************/
  do {
    mcapi_pktchan_recv_open_i(&r1 /*recv_handle*/,recv_endpt, &request, &status);
    //retry if all request handles are in-use
  } while (status == MCAPI_ERR_REQUEST_LIMIT);
  while (!mcapi_test(&request,&size,&status)) {}
  if (status != MCAPI_SUCCESS) { 
    fprintf(stderr,"\nERROR: Failed to initialize (2): %s\n",mcapi_display_status(status,status_buff,sizeof(status_buff)));
    rc++;
    mcapi_finalize(&status); 
    return rc; 
  }
  
  do {
    mcapi_pktchan_send_open_i(&s1 /*send_handle*/,send_endpt, &request, &status);
    //retry if all request handles are in-use
  } while (status == MCAPI_ERR_REQUEST_LIMIT);
  while (!mcapi_test(&request,&size,&status)) {}
  if (status != MCAPI_SUCCESS) { 
    fprintf(stderr,"\nERROR: Failed to initialize (3): %s\n",mcapi_display_status(status,status_buff,sizeof(status_buff)));
    rc++;
    mcapi_finalize(&status); 
    return rc; 
  }
  
  /* randomly issue sends and receives */
  printf("sending and receiving num_msgs=%d\n",NUM_MSGS);
  while (!(recv_done && send_done)) {
    if (send_done) { order = 1; }
   else if (recv_done) { order = 0; }
   else { order = get_random(); }
    if (order % 2) {
      /* do some receives */
      num_recvs = get_random();
      printf("issuing %i receives...\n",num_recvs); 
      for (i = 0; i < num_recvs; i++) {
       recv_done = receiver();
      }
    } else {
      /* do some sends */
      num_sends = get_random();
      printf("issuing %i sends...\n",num_sends); 
      for (i = 0; i < num_sends; i++) {
        send_done = sender();
      }
    } 
  }
  
  rc =check_results();
  
  
  mcapi_finalize(&status);
  if (status != MCAPI_SUCCESS) {
    fprintf(stderr,"\nERROR: Failed to finalize: %s\n",mcapi_display_status(status,status_buff,sizeof(status_buff)));  
    rc++;
  }
  
  
  if (rc == 0) {
    printf("   Test PASSED\n");
  } else {
    printf("   Test FAILED\n");
  }
 return rc;
}
Esempio n. 10
0
/**
 * Creates local end-points on GPP and gets remote DSP end-points *
 * @return MCAPI_SUCCESS/error
 */
mcapi_status_t initialize_comms(void) {

  mcapi_status_t status = MCAPI_ERR_GENERAL;

  /**
   * Create local end-points for communication
   */
#ifdef DEBUG_INFO
  printf("[CORE A]: Initializing communication\n");
#endif
  command_endpoint = mcapi_endpoint_create(PORT_COMMAND, &status);
#ifdef DEBUG_INFO
  if (MCAPI_SUCCESS != status) {
    fprintf(stdout, "[%s] %d status: %d mcapi_endpoint_create failure\n",
        __FILE__, __LINE__, status);
    exit(1);
  }
#endif

  data_endpoint = mcapi_endpoint_create(PORT_DATA, &status);
#ifdef DEBUG_INFO
  if (MCAPI_SUCCESS != status) {
    fprintf(stdout, "[%s] %d status: %d mcapi_endpoint_create failure\n",
        __FILE__, __LINE__, status);
    exit(1);
  }
#endif
  data_recv_endpoint = mcapi_endpoint_create(PORT_DATA_RECV, &status);
#ifdef DEBUG_INFO
  if (MCAPI_SUCCESS != status) {
    fprintf(stdout, "[%s] %d status: %d mcapi_endpoint_create failure\n",
        __FILE__, __LINE__, status);
    exit(1);
  }
#endif
  /**
   * Get the remote end-points for communication
   */
  remote_command_endpoint = mcapi_endpoint_get(DOMAIN, NODE_CORE_1,
      PORT_COMMAND, MCAPI_TIMEOUT_INFINITE, &status);
#ifdef DEBUG_INFO
  if (MCAPI_SUCCESS != status) {
    fprintf(stdout, "[%s] %d status: %d mcapi_endpoint_get failure\n", __FILE__,
        __LINE__, status);
    exit(1);
  }
#endif
  remote_data_endpoint = mcapi_endpoint_get(DOMAIN, NODE_CORE_1, PORT_DATA,
      MCAPI_TIMEOUT_INFINITE, &status);
#ifdef DEBUG_INFO
  if (MCAPI_SUCCESS != status) {
    fprintf(stdout, "[%s] %d status: %d mcapi_endpoint_get failure\n", __FILE__,
        __LINE__, status);
    exit(1);
  }
#endif
  remote_data_recv_endpoint = mcapi_endpoint_get(DOMAIN, NODE_CORE_1,
      PORT_DATA_RECV, MCAPI_TIMEOUT_INFINITE, &status);
#ifdef DEBUG_INFO
  if (MCAPI_SUCCESS != status) {
    fprintf(stdout, "[%s] %d status: %d mcapi_endpoint_get failure\n", __FILE__,
        __LINE__, status);
    exit(1);
  }
#endif

  data_endpoint  = data_recv_endpoint;
  command_endpoint = data_recv_endpoint ;
  remote_data_endpoint = remote_data_recv_endpoint;
  remote_command_endpoint = remote_data_recv_endpoint;

  return status;
}
Esempio n. 11
0
int main(int argc, char** argv)
{
  mcapi_boolean_t recv_done = MCAPI_FALSE;
  mcapi_boolean_t send_done = MCAPI_FALSE;
  mcapi_endpoint_t recv_endpt;
  mcapi_endpoint_t send_endpt;
  mca_status_t status;
  int num_sends,num_recvs,order,i;
  struct timeval tv;
  unsigned int seed;
mcapi_param_t parms;
  mcapi_info_t version;

  mcapi_set_debug_level(4);

  /* initialize the random number generator with a seed */
  if (argc == 2) {
    seed = atoi(argv[1]);
  } else {
    gettimeofday(&tv,0);
    seed = tv.tv_sec + tv.tv_usec;
  }
  printf("Using seed:[%u]\n",seed);
  srand(seed);

  /* create a node */
  mcapi_initialize(DOMAIN,NODE,NULL,&parms,&version,&status);
  if (status != MCAPI_SUCCESS) {
    fprintf(stderr,"\nERROR: Failed to initialize: %s\n",mcapi_display_status(status,status_buff,sizeof(status_buff)));  
    return fail;
  }
  
  /* create the endpoints */
  send_endpt = mcapi_endpoint_create(1,&status);
  recv_endpt =  mcapi_endpoint_create(2,&status);

  /* randomly issue sends and receives */
  while (!(recv_done && send_done)) {
    order = get_random();
    if (order % 2) {
      /* if we chose an odd number, do some receives */
      num_recvs = get_random();
      if (!recv_done) { printf("issuing %i receives...\n",num_recvs); }
      for (i = 0; i < num_recvs; i++) {
        recv_done = receiver(recv_endpt);
      }
    } else {
      /* if we chose an even number, do some sends */
      num_sends = get_random();
      if (!send_done) {printf("issuing %i sends...\n",num_sends); }
      for (i = 0; i < num_sends; i++) {
        send_done = sender(send_endpt,recv_endpt);
      }
    }
  }
  
  if (! check_results()) {
    fprintf(stderr,"\nFAILED - check results\n");
    mcapi_finalize(&status);
    return fail;
  }

  mcapi_finalize(&status);
  if (status != MCAPI_SUCCESS) {
    fprintf(stderr,"\nERROR: Failed to finalize: %s\n",mcapi_display_status(status,status_buff,sizeof(status_buff)));  
    return fail;
  }
  
  printf("   Test PASSED\n");
  return ok;
}
Esempio n. 12
0
void *receiver(void* data)
{  
  char buffer[NUM_MSGS];
  int count = 0;
  size_t recv_size;
  mca_status_t status;
 
  int i;
mcapi_param_t parms;
  mcapi_info_t version;

  /* create a node */
  mcapi_initialize(DOMAIN,NODE+1,NULL,&parms,&version,&status);
  
  if (status != MCAPI_SUCCESS) {
    fprintf(stderr,"\nFAIL: Failed to initialize: %s\n",mcapi_display_status(status,status_buff,sizeof(status_buff)));   
    WRONG;
  }
  
  
  /* make recv endpoint */
  recv_endpt = mcapi_endpoint_create(1,&status);
  if (status != MCAPI_SUCCESS) {
    fprintf(stderr,"\nFAIL: Failed to create recv endpoint: %s\n",mcapi_display_status(status,status_buff,sizeof(status_buff))); 
    WRONG;
  }
  
  
  
  /* do the receives */
  for (count = 0; count < NUM_MSGS; count++) {
      mcapi_msg_recv(recv_endpt,
                     buffer,
                     sizeof(buffer),
                     &recv_size,
                     &status);
      if ((status != MCAPI_SUCCESS) && (TIMEOUT)) {
        /* yield and then retry */
        for (i = 0; i < TIMEOUT; i++) {
          if (status != MCAPI_SUCCESS) {
            fprintf(stderr,"\nWARNING: Recv failed: reason:%s  recv_count:%d.  Will yield and re-try.\n",mcapi_display_status(status,status_buff,sizeof(status_buff)),count);
            sched_yield();
            mcapi_msg_recv(recv_endpt,
                           buffer,
                           sizeof(buffer),
                           &recv_size,
                           &status);
          }
          if (status == MCAPI_SUCCESS) {
            break;
          }
        }
      }
      
      if (status == MCAPI_SUCCESS) {
        printf("count=%d, Received: [%s]\n",count,buffer);
      } else {
        fprintf(stderr,"\nFAIL: Recv failed: reason:%s  recv_count:%d.\n",mcapi_display_status(status,status_buff,sizeof(status_buff)),count);
        WRONG;
      }
  }

  /* finalize */
  mcapi_finalize(&status);
  
  if (status != MCAPI_SUCCESS) {
    fprintf(stderr,"\nFAIL: Failed to finalize: %s\n",mcapi_display_status(status,status_buff,sizeof(status_buff)));   
    WRONG;
  }

  return NULL;
}
Esempio n. 13
0
void *sender(void* data)
{
  char buffer[NUM_MSGS];
  int count = 0;

  mca_status_t status;
  int i;
  mcapi_param_t parms;
  mcapi_info_t version;
  mcapi_priority_t priority = 1;
  mcapi_endpoint_t remote_recv_endpt;
 
  /* create a node */
  mcapi_initialize(DOMAIN,NODE,NULL,&parms,&version,&status);
  if (status != MCAPI_SUCCESS) {
    fprintf(stderr,"\nERROR: Failed to initialize: %s\n",mcapi_display_status(status,status_buff,sizeof(status_buff)));  
    WRONG;
  }
  
  
  /* make send endpoint */
  send_endpt = mcapi_endpoint_create(0,&status);
  if (status != MCAPI_SUCCESS) {
    fprintf(stderr,"\nERROR: Failed to create send endpoint: %s\n",mcapi_display_status(status,status_buff,sizeof(status_buff))); 
    WRONG;
  }
  
  
  /* get a recv endpoint */
  remote_recv_endpt = mcapi_endpoint_get(DOMAIN,NODE+1,1,MCA_INFINITE,&status);
  if (status != MCAPI_SUCCESS) {
    fprintf(stderr,"\nERROR: Failed to get receive endpoint: %s\n",mcapi_display_status(status,status_buff,sizeof(status_buff))); 
    WRONG;
  }
  
  /* do the sends */
  for (count = 0; count < NUM_MSGS; count++) {
    sprintf(buffer,"Sending: %d",count);
    
    printf("Sending: [%s]\n",buffer);
    
    mcapi_msg_send(send_endpt,
                   remote_recv_endpt,
                   buffer,
                   strlen(buffer),
                   priority,
                   &status);
    
    if ((status != MCAPI_SUCCESS) && (TIMEOUT)) {
      /* yield and then retry */
      for (i = 0; i < TIMEOUT; i++) {
        if (status == MCAPI_ERR_MEM_LIMIT) {
            fprintf(stderr,"WARNING: Send failed: reason:%s  send_count:%d.  Will yield and re-try.\n",mcapi_display_status(status,status_buff,sizeof(status_buff)),count);
            sched_yield();
            mcapi_msg_send(send_endpt,
                           remote_recv_endpt,
                           buffer,
                           strlen(buffer),
                           priority,
                           &status);
        }
        if (status == MCAPI_SUCCESS) {
          break;
        }
      }
    }
    if (status != MCAPI_SUCCESS) {
      fprintf(stderr,"\nFAIL: Send failed: reason:%s  send_count:%d\n",mcapi_display_status(status,status_buff,sizeof(status_buff)),count);
      WRONG;
    }
  }
     
  /* finalize */
  mcapi_finalize(&status);
  
  if (status != MCAPI_SUCCESS) {
    fprintf(stderr,"\nFAIL: Failed to finalize: %s\n",mcapi_display_status(status,status_buff,sizeof(status_buff)));   
    WRONG;
  }
  
  return NULL;
}
Esempio n. 14
0
/*****************************************************************************
 *  setup_echo_endpoints
 *****************************************************************************/
int setup_echo_endpoints(int task_id)
{
  mcapi_status_t status;
  int local_send_port = 0;
  int local_recv_port = 1;  
  int next_node = (task_id == num_tasks - 1) ? 
    0 + th_get_node_offset() : 
    task_id + 1 + th_get_node_offset();
  int next_recv_port = 1;
  mcapi_info_t version;
  mcapi_param_t parms;

  /* TODO -- this needs to be cleaned up */
  /* figure out how many cores we have, then split the tasks up evenly among the cores */
#if (WITH_AFFINITY != 0)
  int i;
  int num_cores = 2;
  int tasks_per_core = num_tasks/num_cores;
  int core = 0;
  for (i = 0; i < num_tasks; i+=tasks_per_core) {
    if ((i <= task_id) && ((i + tasks_per_core) >= task_id )) {
      th_log("[TC_ECHO]    -- setting task_id(%i) affinity to core(%i)\n",task_id,core);
      th_set_affinity(core);
      break;
    }
   core++;
  }
#endif
 
  /* initialize */
  //mca_set_debug_level(1); 
  mcapi_initialize(CONKER_TESTCASE_DOMAIN, task_id + th_get_node_offset(), NULL,&parms,&version,&status);
  if (status != MCAPI_SUCCESS) {
    th_log_error("Task id %d failed to initialize: %s\n",
                 task_id, mcapi_display_status(status,status_buff,sizeof(status_buff)));
    return -1;
  }

  /* create local_send endpoint */
  th_log_info("[TC_ECHO]    -- creating local send endpoint node=%d, port=%d\n", 
              task_id + th_get_node_offset(), local_send_port);

  local_endpts[task_id].endpts[WRITE_IDX] = 
    mcapi_endpoint_create(local_send_port, &status);
  if (status != MCAPI_SUCCESS) {
    th_log_error("Task id %d failed to create local send endpoint: %s\n",
                 task_id, mcapi_display_status(status,status_buff,sizeof(status_buff)));
    return -1;
  }

  /* create local_recv endpoint */
  th_log_info("[TC_ECHO]    -- creating local recv endpoint node=%d, port=%d\n", 
              task_id + th_get_node_offset(), local_recv_port);

  local_endpts[task_id].endpts[READ_IDX] = 
    mcapi_endpoint_create(local_recv_port, &status);
  if (status != MCAPI_SUCCESS) {
    th_log_error("Task id %d failed to create local receive endpoint: %s\n",
                 task_id, mcapi_display_status(status,status_buff,sizeof(status_buff)));
    return -1;
  }

  /* get the endpoint to send to */
  th_log_info("[TC_ECHO]    -- get next recv endpt, node=%d, next_node=%d, next_recv_port=%d\n", 
              task_id, next_node, next_recv_port);

  remote_endpts[task_id] = 
    mcapi_endpoint_get(CONKER_TESTCASE_DOMAIN, next_node, next_recv_port, TIMEOUT,&status);
  if (status != MCAPI_SUCCESS) {
    th_log_error("Task id %d failed to get next recv endpoint: %s\n",
                 task_id, mcapi_display_status(status,status_buff,sizeof(status_buff)));
    return -1;
  }

  return 0;
}
Esempio n. 15
0
int main () {
  size_t size;
  mcapi_endpoint_t ep1,ep2;
  mcapi_pktchan_send_hndl_t s1; /* s1 = ep1->ep2 */
  mcapi_pktchan_recv_hndl_t r1; /* r1 = ep1->ep2 */
  int i = 0;
  int rc = 1;
  mca_status_t status;
  mcapi_request_t request;
mcapi_param_t parms;
  mcapi_info_t version;

  mcapi_set_debug_level(6);

  /* create a node */
  mcapi_initialize(DOMAIN,NODE,NULL,&parms,&version,&status);
  if (status != MCAPI_SUCCESS) { WRONG }
    
  /* create endpoints */
  ep1 = mcapi_endpoint_create(PORT_NUM1,&status);
  if (status != MCAPI_SUCCESS) { WRONG }

  ep2 = mcapi_endpoint_create(PORT_NUM2,&status);
  if (status != MCAPI_SUCCESS) { WRONG }
 
  /*************************** connect the channels *********************/
do {
    mcapi_pktchan_connect_i(ep1,ep2,&request,&status);
//retry if all request handles are in-use
} while (status == MCAPI_ERR_REQUEST_LIMIT);
  while (!mcapi_test(&request,&size,&status)) {}
  if (status != MCAPI_SUCCESS) { WRONG }

  /*************************** open the channels *********************/
do {
    mcapi_pktchan_recv_open_i(&r1 /*recv_handle*/,ep2, &request, &status);
//retry if all request handles are in-use
} while (status == MCAPI_ERR_REQUEST_LIMIT);
  while (!mcapi_test(&request,&size,&status)) {}
  if (status != MCAPI_SUCCESS) { WRONG }
  
do {
    mcapi_pktchan_send_open_i(&s1 /*send_handle*/,ep1, &request, &status);
//retry if all request handles are in-use
} while (status == MCAPI_ERR_REQUEST_LIMIT);
  while (!mcapi_test(&request,&size,&status)) {}
  if (status != MCAPI_SUCCESS) { WRONG }

  /* tests: recv send send recv obeys FIFO */
do {
    mcapi_pktchan_recv_i(r1,(void **)((void*)&requests[i].buffer),&requests[i].request,&requests[i].status);
//retry if all request handles are in-use
} while (status == MCAPI_ERR_REQUEST_LIMIT);
  i++;
do {
    mcapi_pktchan_send_i(s1,"one",sizeof("one"),&requests[i].request,&requests[i].status);
//retry if all request handles are in-use
} while (status == MCAPI_ERR_REQUEST_LIMIT);
  i++;
do {
    mcapi_pktchan_send_i(s1,"two",sizeof("two"),&requests[i].request,&requests[i].status);
//retry if all request handles are in-use
} while (status == MCAPI_ERR_REQUEST_LIMIT);
  i++;
do {
    mcapi_pktchan_recv_i(r1,(void **)((void*)&requests[i].buffer),&requests[i].request,&requests[i].status);
//retry if all request handles are in-use
} while (status == MCAPI_ERR_REQUEST_LIMIT);
  i++;
 
  rc = check_results();

  /* close the channels */
do {
    mcapi_pktchan_recv_close_i(r1,&request,&status);     
//retry if all request handles are in-use
} while (status == MCAPI_ERR_REQUEST_LIMIT);
  while (!mcapi_test(&request,&size,&status)) {}
  if (status != MCAPI_SUCCESS) { WRONG }
                                                                                                                                      
do {
    mcapi_pktchan_send_close_i(s1,&request,&status); 
//retry if all request handles are in-use
} while (status == MCAPI_ERR_REQUEST_LIMIT);
  while (!mcapi_test(&request,&size,&status)) {}
  if (status != MCAPI_SUCCESS) { WRONG }

  mcapi_finalize(&status);
  if (rc == 0) {
    printf("   Test PASSED\n");
  } else {
    printf("   Test FAILED\n");
  }
  return rc;
}