anchor.diff:  
   (defun memcpy-array-host-to-device (ary)
     (ecase (array-type ary)
  -    (:gpu (memcpy-host-to-device (raw-array ary)))
  +    ((:gpu :gpu/interop) (memcpy-host-to-device (raw-array ary)))
       (:cpu (error "invalid array type: cpu"))))
   
   (defun memcpy-array-device-to-host (ary)
     (ecase (array-type ary)
  -    (:gpu (memcpy-device-to-host (raw-array ary)))
  +    ((:gpu :gpu/interop) (memcpy-device-to-host (raw-array ary)))
       (:cpu (error "invalid array type: cpu"))))
   
   
  
positive.code:   (destructuring-bind (x y z w) val
      (destructuring-bind (type raw-ary) ary
        (ecase type
          (:gpu (setf (mem-aref raw-ary i) (make-float4 x y z w)))
          (:cpu (setf (vec3-aref raw-ary i :x) x
                      (vec3-aref raw-ary i :y) y
                      (vec3-aref raw-ary i :z) z))))))
  
negative.code: 
  #|
  (require :sb-sprof)
  (defun main/profile (&key (gpu t) (interop nil))
    (sb-sprof:with-profiling (:max-samples 1000
                              :report      :graph
                              :loop        nil)
      (main :gpu gpu :interop interop)))
  |#
  
  (defun main (&key (gpu t) (interop nil))
    (let ((glut:*run-main-loop-after-display* nil)
          (window (make-instance 'nbody-window)))
      (glut:display-window window) ; GLUT window must be created before initializing nbody-demo
      (with-nbody-demo (demo 2048 :gpu gpu :interop interop)
        (with-frame-rate-counter (counter)
          (setf (slot-value window 'nbody-demo) demo
                (slot-value window 'counter)    counter)
          (glut:main-loop)))))
  
  
  (defun not-implemented ()
    (error "not implemented."))
  