summaryrefslogtreecommitdiff
path: root/llama.cpp/ggml/src/ggml-sycl/outprod.cpp
diff options
context:
space:
mode:
authorMitja Felicijan <mitja.felicijan@gmail.com>2026-02-12 20:57:17 +0100
committerMitja Felicijan <mitja.felicijan@gmail.com>2026-02-12 20:57:17 +0100
commitb333b06772c89d96aacb5490d6a219fba7c09cc6 (patch)
tree211df60083a5946baa2ed61d33d8121b7e251b06 /llama.cpp/ggml/src/ggml-sycl/outprod.cpp
downloadllmnpc-b333b06772c89d96aacb5490d6a219fba7c09cc6.tar.gz
Engage!
Diffstat (limited to 'llama.cpp/ggml/src/ggml-sycl/outprod.cpp')
-rw-r--r--llama.cpp/ggml/src/ggml-sycl/outprod.cpp47
1 files changed, 47 insertions, 0 deletions
diff --git a/llama.cpp/ggml/src/ggml-sycl/outprod.cpp b/llama.cpp/ggml/src/ggml-sycl/outprod.cpp
new file mode 100644
index 0000000..f52b11f
--- /dev/null
+++ b/llama.cpp/ggml/src/ggml-sycl/outprod.cpp
@@ -0,0 +1,47 @@
+#include "outprod.hpp"
+
+void ggml_sycl_op_out_prod(ggml_backend_sycl_context& ctx, ggml_tensor* dst) {
+ scope_op_debug_print scope_dbg_print(__func__, dst, /*num_src=*/2);
+ const ggml_tensor *src0 = dst->src[0];
+ const ggml_tensor *src1 = dst->src[1];
+
+ GGML_ASSERT(src0->type == GGML_TYPE_F32);
+ GGML_ASSERT(src1->type == GGML_TYPE_F32);
+ GGML_ASSERT(dst->type == GGML_TYPE_F32);
+ GGML_ASSERT(ggml_is_contiguous(src0));
+ GGML_ASSERT(ggml_is_contiguous(dst));
+
+ GGML_TENSOR_BINARY_OP_LOCALS
+
+ // Get SYCL queue
+ dpct::queue_ptr stream = ctx.stream();
+
+ // Dimension checks
+ GGML_ASSERT(ne01 == ne11); // Inner dimensions must match
+ GGML_ASSERT(ne0 == ne00); // Output rows match src0 rows
+ GGML_ASSERT(ne1 == ne10); // Output cols match src1 cols
+
+ // Get data pointers
+ const float* src0_d = (const float*)src0->data;
+ const float* src1_d = (const float*)src1->data;
+ float* dst_d = (float*)dst->data;
+
+ // GEMM parameters
+ const float alpha = 1.0f;
+ const float beta = 0.0f;
+
+ // Handle transposition of src1
+ const bool src1_T = ggml_is_transposed(src1);
+ const oneapi::mkl::transpose src1_op = src1_T ? oneapi::mkl::transpose::nontrans : oneapi::mkl::transpose::trans;
+ const int64_t ldb = (src1_T ? nb10 : nb11) / sizeof(float);
+
+ try {
+ // Perform matrix multiplication using oneMKL GEMM
+ oneapi::mkl::blas::column_major::gemm(*stream, oneapi::mkl::transpose::nontrans, src1_op,
+ ne0, ne1, ne01, alpha, src0_d, ne00, src1_d, ldb, beta, dst_d, ne0);
+ }
+ catch (sycl::exception const& exc) {
+ std::cerr << exc.what() << std::endl;
+ GGML_ASSERT(false);
+ }
+}