tmp.c 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  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 ME, NUES, i, dummy=0;
  7. int *sig_array, sig_source, sig_read;
  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_SET, ME);
  17. RCCE_flag_write(&flag_send_sig, RCCE_FLAG_UNSET, ME);
  18. sig_array = (int *) RCCE_malloc(NUES * sizeof(int));
  19. if (ME == 0) sig_source = 0;
  20. else if (ME == 1) sig_source = 100;
  21. else if (ME == 2) sig_source = 200;
  22. else sig_source = 300;
  23. for (i=0; i<NUES; i++)
  24. RCCE_put((t_vcharp)(&sig_array[i]), (t_vcharp)(&sig_source), sizeof(int), ME);
  25. RCCE_barrier(&RCCE_COMM_WORLD);
  26. if (ME == 0) {
  27. for (i=0; i<100000; i++)
  28. dummy++;
  29. printf("I am 0 and i finished my first round my source is %d\n",sig_source);
  30. //RCCE_wait_until(flag_rec_sig, RCCE_FLAG_UNSET);
  31. //RCCE_wait_until(flag_send_sig, RCCE_FLAG_SET);
  32. RCCE_flag_write(&flag_rec_sig, RCCE_FLAG_UNSET, ME);
  33. for (i=0; i<NUES; i++) {
  34. RCCE_get((t_vcharp)(&sig_read), (t_vcharp)(&sig_array[i]), sizeof(int), ME);
  35. printf("I am %d and signal of %d is %d\n",ME,i,sig_read);
  36. }
  37. RCCE_flag_write(&flag_rec_sig, RCCE_FLAG_SET, ME);
  38. } else {
  39. RCCE_flag_read(flag_rec_sig, &receiver_status, 0);
  40. while (receiver_status == RCCE_FLAG_UNSET) {//unable to send sig
  41. //printf("I am %d and flag_rec_sig is taken");
  42. RCCE_flag_read(flag_rec_sig, &receiver_status, 0);
  43. }
  44. //RCCE_flag_write(&flag_rec_sig, RCCE_FLAG_SET, 0);
  45. RCCE_put((t_vcharp)(&sig_array[ME]),(t_vcharp)(&sig_source), sizeof(int), 0);
  46. //RCCE_flag_write(&flag_rec_sig, RCCE_FLAG_UNSET, 0);
  47. //RCCE_flag_write(&flag_send_sig, RCCE_FLAG_SET, 0);
  48. printf("I am %d and i have sent my signal %d\n",ME,sig_source);
  49. }
  50. RCCE_finalize();
  51. return(0);
  52. }