From 6fe823a614279cceb2d48507bd8e93b0efd87f94 Mon Sep 17 00:00:00 2001 From: Thomas Albers Date: Sat, 4 Mar 2023 22:47:28 +0100 Subject: Initial commit --- src/kernel.lisp | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 src/kernel.lisp (limited to 'src/kernel.lisp') diff --git a/src/kernel.lisp b/src/kernel.lisp new file mode 100644 index 0000000..65bc066 --- /dev/null +++ b/src/kernel.lisp @@ -0,0 +1,61 @@ +(in-package #:ocl) + +(defun create-kernel (program kernel-name) + (check-error-arg (%create-kernel program kernel-name))) + +(get-cl-objects create-kernels-in-program (program) + %create-kernels-in-program 'cl-kernel) + +(defun clone-kernel (source-kernel) + (check-error-arg (%clone-kernel source-kernel))) + +(defun retain-kernel (kernel) + (check-error (%retain-kernel kernel))) + +(defun release-kernel (kernel) + (check-error (%release-kernel kernel))) + +(defmacro with-kernel ((kernel program name) &body body) + `(let ((,kernel (create-kernel ,program ,name))) + (unwind-protect + (progn ,@body) + (release-kernel ,kernel)))) + +(defun set-kernel-arg (kernel arg-index arg-type arg-value) + (cffi:with-foreign-pointer (value (cffi:foreign-type-size arg-type) size) + (setf (cffi:mem-ref value arg-type) arg-value) + (check-error (%set-kernel-arg kernel arg-index size value)))) + +(defparameter +kernel-info-type-alist+ + '((:kernel-function-name . :string) + (:kernel-num-args . cl-uint) + (:kernel-reference-count . cl-uint) + (:kernel-context . cl-context) + (:kernel-program . cl-program) + (:kernel-attributes . :string))) + +(wrap-get-info-function get-kernel-info %get-kernel-info +kernel-info-type-alist+) + +(defparameter +kernel-arg-info-type-alist+ + '((:kernel-arg-address-qualifier . cl-kernel-arg-address-qualifier) + (:kernel-arg-access-qualifier . cl-kernel-arg-access-qualifier) + (:kernel-arg-type-name . :string) + (:kernel-arg-type-qualifier . cl-kernel-arg-type-qualifier) + (:kernel-arg-name . :string))) + +;; %get-kernel-arg-info + +(defparameter +kernel-work-group-info-type-alist+ + '((:kernel-global-work-size . (:pointer :size)) + (:kernel-work-group-size . :size) + (:kernel-compile-work-group-size . (:pointer :size)) + (:kernel-local-mem-size . cl-ulong) + (:kernel-preferred-work-group-size-multiple . :size) + (:kernel-private-mem-size . cl-ulong))) + +;; %get-kernel-work-group-info + +;; (defparameter +kernel-sub-group-info-type-alist+ +;; '(())) + +;; %get-kernel-sub-group-info -- cgit v1.2.3