summaryrefslogtreecommitdiff
path: root/src/kernel.lisp
blob: 65bc06663239cd80a8df2a11571359ae34bb9f27 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
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