| 1236 | } |
| 1237 | |
| 1238 | size_t ggml_nbytes(const struct ggml_tensor * tensor) { |
| 1239 | for (int i = 0; i < GGML_MAX_DIMS; ++i) { |
| 1240 | if (tensor->ne[i] <= 0) { |
| 1241 | return 0; |
| 1242 | } |
| 1243 | } |
| 1244 | |
| 1245 | size_t nbytes; |
| 1246 | const size_t blck_size = ggml_blck_size(tensor->type); |
| 1247 | if (blck_size == 1) { |
| 1248 | nbytes = ggml_type_size(tensor->type); |
| 1249 | for (int i = 0; i < GGML_MAX_DIMS; ++i) { |
| 1250 | nbytes += (tensor->ne[i] - 1)*tensor->nb[i]; |
| 1251 | } |
| 1252 | } |
| 1253 | else { |
| 1254 | nbytes = tensor->ne[0]*tensor->nb[0]/blck_size; |
| 1255 | for (int i = 1; i < GGML_MAX_DIMS; ++i) { |
| 1256 | nbytes += (tensor->ne[i] - 1)*tensor->nb[i]; |
| 1257 | } |
| 1258 | } |
| 1259 | |
| 1260 | return nbytes; |
| 1261 | } |
| 1262 | |
| 1263 | size_t ggml_nbytes_pad(const struct ggml_tensor * tensor) { |
| 1264 | return GGML_PAD(ggml_nbytes(tensor), GGML_MEM_ALIGN); |