aRCCE_test.c 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. #include <string.h>
  2. #include <stdio.h>
  3. #include "RCCE.h"
  4. #define max(x,y) ((x)>(y)?(x):(y))
  5. int RCCE_APP(int argc, char **argv){
  6. int YOU, NUES;
  7. char *sig_array, sig_source;
  8. RCCE_FLAG flag_rec_sig,flag_send_sig);
  9. RCCE_FLAG_STATUS receiver_status;
  10. RCCE_init(&argc, &argv);
  11. // RCCE_debug_set(RCCE_DEBUG_ALL);
  12. ME = RCCE_ue();
  13. NUES = RCCE_num_ues();
  14. RCCE_flag_alloc(&flag_rec_sig);
  15. RCCE_flag_alloc(&flag_send_sig);
  16. RCCE_flag_write(&flag_rec_sig, RCCE_FLAG_UNSET, ME);
  17. RCCE_flag_write(&flag_send_sig, RCCE_FLAG_UNSET, ME);
  18. sig_array = (char *) RCCE_malloc(NUES * sizeof(char));
  19. if (ME == 0) sig_source = '\0';
  20. else if (ME == 1) sig_source = 'a';
  21. else if (ME == 2) sig_source = 'b';
  22. else sig_source = 'c';
  23. for (i=0; i<NUES; i++)
  24. RCCE_put(&sig_array[i], &sig_source, sizeof(char), ME);
  25. RCCE_barrier(&RCCE_COMM_WORLD);
  26. if (ME == 0) {
  27. for (i=0; i<1000; i++)
  28. dummy++;
  29. printf("I am 0 and i finished my first round\n");
  30. RCCE_wait_until(flag_rec_sig, RCCE_FLAG_UNSET);
  31. for (i=0; i<NUES; i++) {
  32. RCCE_get(&sig_read, &sig_array[i], sizeof(char), ME);
  33. printf("I am %d and signal of %d is %d",ME,i,sig_read);
  34. }
  35. } else {
  36. RCCE_flag_read(flag_rec_sig, &receiver_status, 0);
  37. while (receiver_status == RCCE_FLAG_SET) {
  38. //printf("I am %d and flag_rec_sig is taken");
  39. RCCE_flag_read(flag_rec_sig, &receiver_status, 0);
  40. }
  41. RCCE_flag_write(&flag_rec_sig, RCCE_FLAG_SET, 0);
  42. RCCE_put(&sig_array[ME], &sig_source, sizeof(char), 0);
  43. RCCE_flag_write(&flag_rec_sig, RCCE_FLAG_UNSET, 0);
  44. printf("I am %d and i sent my signal");
  45. }
  46. RCCE_finalize();
  47. return(0);
  48. }