diff options
| author | Thomas Albers <thomas@thomaslabs.org> | 2023-03-04 22:47:28 +0100 | 
|---|---|---|
| committer | Thomas Albers <thomas@thomaslabs.org> | 2023-03-04 22:47:28 +0100 | 
| commit | 6fe823a614279cceb2d48507bd8e93b0efd87f94 (patch) | |
| tree | 579e3c5db456667ce2aeda94f909703513179ce1 /t | |
Initial commit
Diffstat (limited to 't')
| -rw-r--r-- | t/test.cl | 10 | ||||
| -rw-r--r-- | t/test.lisp | 51 | 
2 files changed, 61 insertions, 0 deletions
| diff --git a/t/test.cl b/t/test.cl new file mode 100644 index 0000000..89ed7eb --- /dev/null +++ b/t/test.cl @@ -0,0 +1,10 @@ +kernel void vecAdd(global float *a, +                   global float *b, +                   global float *c, +                   const unsigned int n) +{ +    int id = get_global_id(0); +    if(id < n) { +        c[id] = a[id] + b[id]; +    } +} diff --git a/t/test.lisp b/t/test.lisp new file mode 100644 index 0000000..98e9a89 --- /dev/null +++ b/t/test.lisp @@ -0,0 +1,51 @@ +(asdf:load-systems :slynk :opencl :alexandria) + +(in-package #:ocl) + +;; (slynk:create-server) + +(defun print-platform (platform) +  (loop :for info :in '(:platform-profile +                        :platform-version +                        :platform-name +                        :platform-vendor +                        :platform-extensions +                        :platform-host-timer-resolution) +        :do +        (format t "~A: ~A~%" info (get-platform-info platform info)))) + +(defun main (context kernel queue) +  (let* ((a (make-array 3 :element-type 'single-float :initial-contents '(1.0 2.0 3.0))) +         (b (make-array 3 :element-type 'single-float :initial-contents '(2.0 2.0 3.0))) +         (c (make-array 3 :element-type 'single-float)) +         (size (* (cffi:foreign-type-size :float) 3))) +    (with-buffer-from-array (a-buffer context '(:mem-copy-host-ptr :mem-read-only) a) +      (with-buffer-from-array (b-buffer context '(:mem-copy-host-ptr :mem-read-only) b) +        (with-buffer (c-buffer context :mem-write-only size) + +          (set-kernel-arg kernel 0 'cl-mem a-buffer) +          (set-kernel-arg kernel 1 'cl-mem b-buffer) +          (set-kernel-arg kernel 2 'cl-mem c-buffer) +          (set-kernel-arg kernel 3 :unsigned-int 3) + +          (enqueue-nd-range-kernel queue kernel 0 3 1) + +          (finish queue) + +          (copy-buffer-to-array queue c-buffer c) + +          (dotimes (i 3) +            (format t "~A~%" (aref c i)))))))) + +(let ((platforms (get-platform-ids))) +  (format t "~&Found ~A OpenCL platforms!~%" (length platforms)) +  (print-platform (first platforms)) +  (let ((devices (get-device-ids (first platforms) :device-type-cpu))) +    (format t "Found ~A devices!~%Type: ~A~%" (length devices) +            (get-device-info (first devices) :device-type)) +    (with-context (context devices :platform (first platforms)) +      (with-program-from-source (program context (alexandria:read-file-into-string "test.cl")) +        (build-program program (first devices)) +        (with-command-queue (queue context (first devices)) +          (with-kernel (kernel program "vecAdd") +            (main context kernel queue))))))) | 
