| TORCH_LIBRARY_EXPAND(TORCH_EXTENSION_NAME, ops) { | |
| ops.def("dequantize(Tensor blocks, int ggml_type, int rows, int cols, ScalarType dtype) -> Tensor"); | |
| ops.def("mul_mat_vec(Tensor blocks, Tensor x, int ggml_type, int out_features) -> Tensor"); | |
| // Takes no tensor, so it has no device to dispatch on and is registered as a catch-all. Each | |
| // backend's shared object is its own library namespace, so there is one implementation per build. | |
| ops.def("gemv_types() -> int[]"); | |
| ops.impl("gemv_types", &gemv_types); | |
| // The schema is the same for every backend; only the implementation differs. | |
| ops.impl("dequantize", torch::kCUDA, &dequantize); | |
| ops.impl("mul_mat_vec", torch::kCUDA, &mul_mat_vec); | |
| ops.impl("dequantize", torch::kMPS, &dequantize); | |
| ops.impl("mul_mat_vec", torch::kMPS, &mul_mat_vec); | |
| } | |
| REGISTER_EXTENSION(TORCH_EXTENSION_NAME) | |