summaryrefslogtreecommitdiff
path: root/src/kernel.lisp
diff options
context:
space:
mode:
authorThomas Albers <thomas@thomaslabs.org>2023-03-04 22:47:28 +0100
committerThomas Albers <thomas@thomaslabs.org>2023-03-04 22:47:28 +0100
commit6fe823a614279cceb2d48507bd8e93b0efd87f94 (patch)
tree579e3c5db456667ce2aeda94f909703513179ce1 /src/kernel.lisp
Initial commit
Diffstat (limited to 'src/kernel.lisp')
-rw-r--r--src/kernel.lisp61
1 files changed, 61 insertions, 0 deletions
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