/ 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 }