| 319 | return kernel_code |
| 320 | |
| 321 | def gen_transform_code(kernel_shape): |
| 322 | kernel_code = "\n\ |
| 323 | void ggml_bitnet_transform_tensor(struct ggml_tensor * tensor) {\n\ |
| 324 | if (!(is_type_supported(tensor->type) && tensor->backend == GGML_BACKEND_TYPE_CPU && tensor->extra == nullptr)) {\n\ |
| 325 | return;\n\ |
| 326 | }\n\ |
| 327 | \n\ |
| 328 | int k = tensor->ne[0];\n\ |
| 329 | int m = tensor->ne[1];\n\ |
| 330 | const int lut_scales_size = 1;\n\ |
| 331 | const int scales_size = 1;\n\ |
| 332 | int bk = 0;\n\ |
| 333 | int bm = 0;\n" |
| 334 | |
| 335 | kernel_code = "".join([kernel_code, "\n\ |
| 336 | if (m == {0} && k == {1}) {{\n\ |
| 337 | bm = BM{0}_{1};\n\ |
| 338 | bk = BBK{0}_{1};\n\ |
| 339 | }}\n".format(kernel_shapes[0][0], kernel_shapes[0][1])]) |
| 340 | |
| 341 | for i in range(1, len(kernel_shapes)): |
| 342 | kernel_code = "".join([kernel_code, "else if (m == {0} && k == {1}) {{\n\ |
| 343 | bm = BM{0}_{1};\n\ |
| 344 | bk = BBK{0}_{1};\n\ |
| 345 | }}\n".format(kernel_shapes[i][0], kernel_shapes[i][1])]) |
| 346 | |
| 347 | kernel_code = "".join([kernel_code, "\n\ |
| 348 | const int n_tile_num = m / bm;\n\ |
| 349 | const int BK = bk;\n\ |
| 350 | uint8_t * qweights;\n\ |
| 351 | bitnet_float_type * scales;\n\ |
| 352 | \n\ |
| 353 | scales = (bitnet_float_type *) aligned_malloc(sizeof(bitnet_float_type));\n\ |
| 354 | qweights = (uint8_t *) tensor->data;\n\ |
| 355 | float * i2_scales = (float * )(qweights + k * m / 4);\n\ |
| 356 | scales[0] = (bitnet_float_type) i2_scales[0];\n\ |
| 357 | \n\ |
| 358 | tensor->extra = bitnet_tensor_extras + bitnet_tensor_extras_index;\n\ |
| 359 | bitnet_tensor_extras[bitnet_tensor_extras_index++] = {\n\ |
| 360 | /* .lut_scales_size = */ lut_scales_size,\n\ |
| 361 | /* .BK = */ BK,\n\ |
| 362 | /* .n_tile_num = */ n_tile_num,\n\ |
| 363 | /* .qweights = */ qweights,\n\ |
| 364 | /* .scales = */ scales\n\ |
| 365 | };\n\ |
| 366 | }\n"]) |
| 367 | |
| 368 | return kernel_code |
| 369 | |
| 370 | if __name__ == "__main__": |
| 371 | ModelShapeDict = { |