/ print.cpp
print.cpp
  1  #include "nn.h"
  2  
  3  
  4  // %6.1f describes number at least six characters wide, with 1 digit after the decimal point
  5  // printf("%12.8f, ", t->data[i]);
  6  
  7  void sprint_2d(tensor* t){
  8      printf("\n%s:\n", t->name);
  9      printf("%s->shape: %i, %i\n", t->name, t->shape[0], t->shape[1]);
 10      printf("%s->strides: %i, %i\n", t->name, t->stride[0], t->stride[1]);
 11  }
 12  
 13  void sprint_3d(tensor* t){
 14      printf("\n%s:\n", t->name);
 15      printf("%s->shape: %i, %i, %i\n", t->name, t->shape[0], t->shape[1], t->shape[2]);
 16      printf("%s->strides: %i, %i, %i\n", t->name, t->stride[0], t->stride[1], t->stride[2]);
 17  }
 18  
 19  void sprint_4d(tensor* t){
 20      printf("\n%s:\n", t->name);
 21      printf("%s->shape: %i, %i, %i, %i\n", t->name, t->shape[0], t->shape[1],  t->shape[2],  t->shape[3]);
 22      printf("%s->strides: %i, %i, %i, %i\n", t->name, t->stride[0], t->stride[1],  t->stride[2],  t->stride[3]);
 23  }
 24  
 25  void sprint(tensor* t){
 26      if (t->num_dims==2) sprint_2d(t);
 27      else if (t->num_dims==3) sprint_3d(t);
 28      else if (t->num_dims==4) sprint_4d(t);
 29      else {
 30          printf("[sprint] Error");
 31          exit(1);
 32      }
 33  }
 34  
 35  
 36  void print_2d(tensor* t){
 37      tensor* t_copy = COPY_FROM_DEVICE(t);
 38      sprint_2d(t);
 39  
 40      int y = t->shape[0];
 41      int z = t->shape[1];
 42  
 43      for (int yi=0; yi<y; yi++){
 44          printf("[");
 45          for (int zi=0; zi<z; zi++){
 46              int idx = index(t_copy, yi, zi);
 47              printf("%12.8f, ", t_copy->data[idx]);
 48          }
 49          printf("],\n");
 50      }
 51      printf("\n");
 52  }
 53  
 54  void print_3d(tensor* t){
 55      tensor* t_copy = COPY_FROM_DEVICE(t);
 56      sprint_3d(t);
 57  
 58      int x = t->shape[0];
 59      int y = t->shape[1];
 60      int z = t->shape[2];
 61  
 62      for (int xi=0; xi<x; xi++){
 63          for (int yi=0; yi<y; yi++){
 64              printf("[");
 65              for (int zi=0; zi<z; zi++){
 66                  int idx = index(t_copy, xi, yi, zi);
 67                  printf("%12.8f, ", t_copy->data[idx]);
 68              }
 69              printf("],\n");
 70          }
 71          printf("\n");
 72      }
 73      printf("\n");
 74  }
 75  
 76  void print_4d(tensor* t){
 77      tensor* t_copy = COPY_FROM_DEVICE(t);
 78      sprint_4d(t);
 79  
 80      int o = t->shape[0];
 81      int x = t->shape[1];
 82      int y = t->shape[2];
 83      int z = t->shape[3];
 84  
 85      for (int oi=0; oi<o; oi++){
 86          for (int xi=0; xi<x; xi++){
 87              for (int yi=0; yi<y; yi++){
 88                  printf("[");
 89                  for (int zi=0; zi<z; zi++){
 90                      int idx = index(t_copy, oi, xi, yi, zi);
 91                      printf("%12.8f, ", t_copy->data[idx]);
 92                  }
 93                  printf("],\n");
 94              }
 95              printf("\n");
 96          }
 97          printf("\n");
 98      }
 99  }
100  
101  void print(tensor* t){
102      if (t->num_dims==2) print_2d(t);
103      else if (t->num_dims==3) print_3d(t);
104      else if (t->num_dims==4) print_4d(t);
105      else {
106          printf("[print] Error");
107          exit(1);
108      }
109  }
110  
111  
112  // todo-high: de duplicate lprint and lsprint:
113  
114  void lsprint_2d(tensor* t){
115      FILE *f = fopen("./generated/log.txt", "a");
116      if (!f) {
117          printf("Error opening file\n");
118          exit(1);
119      }
120      fprintf(f, "\n%s:\n", t->name);
121      fprintf(f, "%s->shape: %i, %i\n", t->name, t->shape[0], t->shape[1]);
122      fprintf(f, "%s->strides: %i, %i\n", t->name, t->stride[0], t->stride[1]);
123      fclose(f);
124  }
125  
126  void lsprint_3d(tensor* t){
127      FILE *f = fopen("./generated/log.txt", "a");
128      if (!f) {
129          printf("Error opening file\n");
130          exit(1);
131      }
132      fprintf(f, "\n%s:\n", t->name);
133      fprintf(f, "%s->shape: %i, %i, %i\n", t->name, t->shape[0], t->shape[1], t->shape[2]);
134      fprintf(f, "%s->strides: %i, %i, %i\n", t->name, t->stride[0], t->stride[1], t->stride[2]);
135      fclose(f);
136  }
137  
138  void lsprint_4d(tensor* t){
139      FILE *f = fopen("./generated/log.txt", "a");
140      if (!f) {
141          printf("Error opening file\n");
142          exit(1);
143      }
144      fprintf(f, "\n%s:\n", t->name);
145      fprintf(f, "%s->shape: %i, %i, %i, %i\n", t->name, t->shape[0], t->shape[1],  t->shape[2],  t->shape[3]);
146      fprintf(f, "%s->strides: %i, %i, %i, %i\n", t->name, t->stride[0], t->stride[1],  t->stride[2],  t->stride[3]);
147      fclose(f);
148  }
149  
150  void lsprint(tensor* t){
151      if (t->num_dims==2) lsprint_2d(t);
152      else if (t->num_dims==3) lsprint_3d(t);
153      else if (t->num_dims==4) lsprint_4d(t);
154      else {
155          printf("[lsprint] Error");
156          exit(1);
157      }
158  }
159  
160  
161  void lprint_2d(tensor* t){
162      tensor* t_copy = COPY_FROM_DEVICE(t);
163      lsprint_2d(t);
164  
165      FILE *f = fopen("./generated/log.txt", "a");
166      if (!f) {
167          printf("Error opening file\n");
168          exit(1);
169      }
170  
171      int y = t->shape[0];
172      int z = t->shape[1];
173  
174      for (int yi=0; yi<y; yi++){
175          fprintf(f, "    [");
176          for (int zi=0; zi<z; zi++){
177              int idx = index(t_copy, yi, zi);
178              fprintf(f, "%12.8f, ", t_copy->data[idx]);
179          }
180          fprintf(f, "],\n");
181      }
182      fprintf(f, "\n");
183      fclose(f);
184  }
185  
186  void lprint_3d(tensor* t){
187      tensor* t_copy = COPY_FROM_DEVICE(t);
188      lsprint_3d(t);
189  
190      FILE *f = fopen("./generated/log.txt", "a");
191      if (!f) {
192          printf("Error opening file\n");
193          exit(1);
194      }
195  
196      int x = t->shape[0];
197      int y = t->shape[1];
198      int z = t->shape[2];
199  
200      for (int xi=0; xi<x; xi++){
201          for (int yi=0; yi<y; yi++){
202              fprintf(f, "    [");
203              for (int zi=0; zi<z; zi++){
204                  int idx = index(t_copy, xi, yi, zi);
205                  fprintf(f, "%12.8f, ", t_copy->data[idx]);
206              }
207              fprintf(f, "],\n");
208          }
209          fprintf(f, "\n");
210      }
211      fprintf(f, "\n");
212      fclose(f);
213  }
214  
215  void lprint_4d(tensor* t){
216      tensor* t_copy = COPY_FROM_DEVICE(t);
217      lsprint_4d(t);
218  
219      FILE *f = fopen("./generated/log.txt", "a");
220      if (!f) {
221          printf("Error opening file\n");
222          exit(1);
223      }
224  
225      int o = t->shape[0];
226      int x = t->shape[1];
227      int y = t->shape[2];
228      int z = t->shape[3];
229  
230      for (int oi=0; oi<o; oi++){
231          for (int xi=0; xi<x; xi++){
232              for (int yi=0; yi<y; yi++){
233                  fprintf(f, "    [");
234                  for (int zi=0; zi<z; zi++){
235                      int idx = index(t_copy, oi, xi, yi, zi);
236                      fprintf(f, "%12.8f, ", t_copy->data[idx]);
237                  }
238                  fprintf(f, "],\n");
239              }
240              fprintf(f, "\n");
241          }
242          fprintf(f, "\n");
243      }
244      fclose(f);
245  }
246  
247  void lprint(tensor* t){
248      if (t->num_dims==2) lprint_2d(t);
249      else if (t->num_dims==3) lprint_3d(t);
250      else if (t->num_dims==4) lprint_4d(t);
251      else {
252          printf("[lprint] Error");
253          exit(1);
254      }
255  }