comm_test.c 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. //#include <string.h>
  2. #include <stdio.h>
  3. #include "RCCE.h"
  4. #define max(x,y) ((x)>(y)?(x):(y))
  5. #define LINE_SIZE 8 //number of bytes
  6. #define SIG_IDAG_FIND_IDAGS 123
  7. #define SIG_ACK 257
  8. int RCCE_APP(int argc, char **argv){
  9. int ME, NUES, i, dummy=0;
  10. int *sig_array, *sig_array_local, sig_source, *sig_read_ar, *data_array, *data_array_local;
  11. RCCE_FLAG flag_signals_enabled,flag_data_written;
  12. RCCE_FLAG_STATUS receiver_status;
  13. int error, str_len;
  14. char error_str[64];
  15. RCCE_init(&argc, &argv);
  16. // RCCE_debug_set(RCCE_DEBUG_ALL);
  17. ME = RCCE_ue();
  18. NUES = RCCE_num_ues();
  19. RCCE_flag_alloc(&flag_signals_enabled);
  20. RCCE_flag_alloc(&flag_data_written);
  21. RCCE_flag_write(&flag_signals_enabled, RCCE_FLAG_UNSET, ME);
  22. RCCE_flag_write(&flag_data_written, RCCE_FLAG_UNSET, ME);
  23. sig_array = (int *) RCCE_malloc(NUES * LINE_SIZE * sizeof(int));//NUES * NUES
  24. data_array = (int *) RCCE_malloc(LINE_SIZE * sizeof(int));
  25. sig_array_local = (int *) malloc(LINE_SIZE * sizeof(int));
  26. data_array_local = (int *) malloc(LINE_SIZE * sizeof(int));
  27. sig_read_ar = (int *) malloc(LINE_SIZE * sizeof(int));
  28. //for (i=0; i<LINE_SIZE; i++)
  29. // sig_array_local[i] = (ME+1) * 100;
  30. //for (i=0; i<NUES; i++) {
  31. //RCCE_get((t_vcharp)(&sig_read_ar), (t_vcharp)(&sig_array), NUES * sizeof(int), ME);
  32. //printf("I am %d and init signal of %d is %d\n",ME,i,sig_array_local[i]);
  33. //}
  34. /*
  35. if (ME == 0) sig_source = 0;
  36. else if (ME == 1) sig_source = 100;
  37. else if (ME == 2) sig_source = 200;
  38. else sig_source = 300;
  39. */
  40. //for (i=0; i<NUES; i++)
  41. if (ME == 0) {//ME*NUES
  42. for (i=0; i<LINE_SIZE; i++)
  43. sig_array_local[i] = SIG_ACK;
  44. //initial delay
  45. //for (i=0; i<10000; i++) dummy++;
  46. RCCE_flag_write(&flag_signals_enabled, RCCE_FLAG_SET, ME);
  47. for (i=0; i<500000; i++) dummy++;
  48. //RCCE_flag_write(&flag_signals_enabled, RCCE_FLAG_UNSET, ME);
  49. for (i=1; i<NUES; i++) {
  50. error = RCCE_get((t_vcharp)(&sig_read_ar[0]), (t_vcharp)(&sig_array[i*LINE_SIZE]), LINE_SIZE * sizeof(int), ME);
  51. if (error != RCCE_SUCCESS) {
  52. RCCE_error_string(error, error_str, &str_len);
  53. printf("I am 0 and i got an error in get from %d with descr %s\n",i,error_str);
  54. } else {
  55. while (sig_read_ar[0] != SIG_IDAG_FIND_IDAGS)
  56. error = RCCE_get((t_vcharp)(&sig_read_ar[0]), (t_vcharp)(&sig_array[i*LINE_SIZE]), LINE_SIZE * sizeof(int), ME);
  57. if (error != RCCE_SUCCESS) {
  58. RCCE_error_string(error, error_str, &str_len);
  59. printf("I am 0 and i got an error in get from %d with descr %s\n",i,error_str);
  60. }
  61. //if (sig_read_ar[0] == SIG_IDAG_FIND_IDAGS) {
  62. //} else printf("I am 0 and i did not get SIG_IDAG_FIND_IDAGS from %d\n",i);
  63. RCCE_flag_read(flag_signals_enabled, &receiver_status, i);
  64. if (receiver_status == RCCE_FLAG_UNSET) printf("I am %d kai signals of %d are disabled\n",ME,i);
  65. while (receiver_status == RCCE_FLAG_UNSET) {//unable to send sig
  66. //printf("I am %d and flag_rec_sig is taken");
  67. RCCE_flag_read(flag_signals_enabled, &receiver_status, i);
  68. }
  69. error = RCCE_put((t_vcharp)(&sig_array[ME*LINE_SIZE]), (t_vcharp)(&sig_array_local[0]), LINE_SIZE * sizeof(int), i);
  70. if (error != RCCE_SUCCESS) {
  71. RCCE_error_string(error, error_str, &str_len);
  72. printf("I am %d and i got an error in put with descr %s\n",ME,error_str);
  73. }
  74. RCCE_flag_write(&flag_data_written, RCCE_FLAG_UNSET, ME);
  75. RCCE_wait_until(flag_data_written, RCCE_FLAG_SET);
  76. error = RCCE_get((t_vcharp)(&data_array_local[0]), (t_vcharp)(&data_array[0]), LINE_SIZE * sizeof(int), ME);
  77. if (error != RCCE_SUCCESS) {
  78. RCCE_error_string(error, error_str, &str_len);
  79. printf("I am 0 and i got an error in get data from %d with descr %s\n",i,error_str);
  80. } else printf("Data from %d are %d\n",i,data_array_local[0]);
  81. }
  82. }
  83. //RCCE_flag_write(&flag_signals_enabled, RCCE_FLAG_SET, ME);
  84. //for (i=0; i<500000; i++) dummy++;
  85. } else {
  86. for (i=0; i<LINE_SIZE; i++) {
  87. sig_array_local[i] = SIG_IDAG_FIND_IDAGS;
  88. data_array_local[i] = ME * 100;
  89. }
  90. RCCE_flag_read(flag_signals_enabled, &receiver_status, 0);
  91. if (receiver_status == RCCE_FLAG_UNSET) printf("I am %d kai signals of 0 are disabled\n",ME);
  92. while (receiver_status == RCCE_FLAG_UNSET) {//unable to send sig
  93. //printf("I am %d and flag_rec_sig is taken");
  94. RCCE_flag_read(flag_signals_enabled, &receiver_status, 0);
  95. }
  96. printf("I am %d and i am going to write my signal\n",ME);
  97. error = RCCE_put((t_vcharp)(&sig_array[ME*LINE_SIZE]), (t_vcharp)(&sig_array_local[0]), LINE_SIZE * sizeof(int), 0);
  98. if (error != RCCE_SUCCESS) {
  99. RCCE_error_string(error, error_str, &str_len);
  100. printf("I am %d and i got an error in put with descr %s\n",ME,error_str);
  101. }
  102. printf("I am %d and i come here a\n",ME);
  103. RCCE_flag_write(&flag_signals_enabled, RCCE_FLAG_SET, ME);
  104. for (i=0; i<50000; i++) dummy++;
  105. printf("I am %d and i come here b\n",ME);
  106. //RCCE_flag_write(&flag_signals_enabled, RCCE_FLAG_UNSET, ME);
  107. error = RCCE_get((t_vcharp)(&sig_read_ar[0]), (t_vcharp)(&sig_array[0]), LINE_SIZE * sizeof(int), ME);
  108. if (error != RCCE_SUCCESS) {
  109. RCCE_error_string(error, error_str, &str_len);
  110. printf("I am 0 and i got an error in get from %d with descr %s\n",i,error_str);
  111. }
  112. while (sig_read_ar[0] != SIG_ACK) {
  113. error = RCCE_get((t_vcharp)(&sig_read_ar[0]), (t_vcharp)(&sig_array[0]), LINE_SIZE * sizeof(int), ME);
  114. if (error != RCCE_SUCCESS) {
  115. RCCE_error_string(error, error_str, &str_len);
  116. printf("I am 0 and i got an error in get from %d with descr %s\n",i,error_str);
  117. }
  118. }
  119. error = RCCE_put((t_vcharp)(&data_array[0]), (t_vcharp)(&data_array_local[0]), LINE_SIZE * sizeof(int), 0);
  120. if (error != RCCE_SUCCESS) {
  121. RCCE_error_string(error, error_str, &str_len);
  122. printf("I am %d and i got an error in put data with descr %s\n",ME,error_str);
  123. } else {
  124. printf("I am %d and data successfully written in 0\n",ME);
  125. RCCE_flag_write(&flag_data_written, RCCE_FLAG_SET, 0);
  126. }
  127. }
  128. /*error = RCCE_put((t_vcharp)(&sig_array[ME*LINE_SIZE]), (t_vcharp)(&sig_array_local[0]), LINE_SIZE * sizeof(int), ME);
  129. if (error != RCCE_SUCCESS) {
  130. RCCE_error_string(error, error_str, &str_len);
  131. printf("I am %d and i got an error in put with descr %s\n",ME,error_str);
  132. }
  133. //RCCE_put((t_vcharp)(sig_array), (t_vcharp)(&sig_source), NUES*sizeof(int), ME);
  134. RCCE_get((t_vcharp)(&sig_read_ar[0]), (t_vcharp)(&sig_array[ME*LINE_SIZE]), LINE_SIZE * sizeof(int), ME);
  135. for (i=0; i<LINE_SIZE; i++) {
  136. //RCCE_get((t_vcharp)(&sig_read_ar), (t_vcharp)(&sig_array), NUES * sizeof(int), ME);
  137. printf("I am %d and signal of %d is %d\n",ME,i,sig_read_ar[i]);
  138. }*/
  139. RCCE_barrier(&RCCE_COMM_WORLD);
  140. /*if (ME == 0) {
  141. for (i=0; i<100000; i++)
  142. dummy++;
  143. printf("I am 0 and i finished my first round my source is %d\n",sig_source);
  144. //RCCE_wait_until(flag_rec_sig, RCCE_FLAG_UNSET);
  145. //RCCE_wait_until(flag_send_sig, RCCE_FLAG_SET);
  146. RCCE_flag_write(&flag_rec_sig, RCCE_FLAG_UNSET, ME);
  147. for (i=0; i<NUES; i++) {
  148. RCCE_get((t_vcharp)(&sig_read), (t_vcharp)(&sig_array[i]), sizeof(int), ME);
  149. printf("I am %d and signal of %d is %d\n",ME,i,sig_read);
  150. }
  151. RCCE_flag_write(&flag_rec_sig, RCCE_FLAG_SET, ME);
  152. } else {
  153. RCCE_flag_read(flag_rec_sig, &receiver_status, 0);
  154. if (receiver_status == RCCE_FLAG_UNSET) printf("I am %d kai gamietai to sumpan\n",ME);
  155. while (receiver_status == RCCE_FLAG_UNSET) {//unable to send sig
  156. //printf("I am %d and flag_rec_sig is taken");
  157. RCCE_flag_read(flag_rec_sig, &receiver_status, 0);
  158. }
  159. //RCCE_flag_write(&flag_rec_sig, RCCE_FLAG_SET, 0);
  160. RCCE_put((t_vcharp)(&sig_array[ME]),(t_vcharp)(&sig_source), sizeof(int), 0);
  161. //RCCE_flag_write(&flag_rec_sig, RCCE_FLAG_UNSET, 0);
  162. //RCCE_flag_write(&flag_send_sig, RCCE_FLAG_SET, 0);
  163. printf("I am %d and i have sent my signal %d\n",ME,sig_source);
  164. }*/
  165. RCCE_finalize();
  166. return(0);
  167. }