]> gitweb.factorcode.org Git - factor.git/commitdiff
cuda.libraries, cuda.syntax: factor generated CUDA-FUNCTION: word bodies into a ...
authorJoe Groff <arcata@gmail.com>
Thu, 20 May 2010 22:45:35 +0000 (15:45 -0700)
committerJoe Groff <arcata@gmail.com>
Thu, 20 May 2010 22:45:35 +0000 (15:45 -0700)
extra/cuda/libraries/libraries.factor
extra/cuda/syntax/syntax.factor

index 91c715b4c1162fab4e527ac016175f0aad144bf4..e0f4d9d01c388e684237e465123ac5332d5ec4fc 100644 (file)
@@ -155,17 +155,29 @@ MACRO: cuda-arguments ( c-types -- quot: ( args... function -- ) )
     [ cached-module ] dip
     2array cuda-functions get [ first2 get-function-ptr* ] cache ;
 
-: define-cuda-word ( word module-name function-name arguments -- )
-    [
-        '[
-            _ _ cached-function
-            [ nip _ cuda-arguments ]
-            [ run-grid ] 2bi
-        ]
-    ]
+MACRO: cuda-invoke ( module-name function-name arguments -- )
+    '[
+        _ _ cached-function
+        [ nip _ cuda-arguments ]
+        [ run-grid ] 2bi
+    ] ;
+
+: cuda-global* ( module-name symbol-name -- device-ptr size )
+    [ CUdeviceptr <c-object> c:uint <c-object> ] 2dip
+    [ cached-module ] dip 
+    '[ _ _ cuModuleGetGlobal cuda-error ] 2keep [ c:*uint ] bi@ ; inline
+
+: cuda-global ( module-name symbol-name -- device-ptr )
+    cuda-global* drop ; inline
+
+: define-cuda-function ( word module-name function-name arguments -- )
+    [ '[ _ _ _ cuda-invoke ] ]
     [ 2nip \ grid suffix c:void function-effect ]
     3bi define-declared ;
 
+: define-cuda-global ( word module-name symbol-name -- )
+    '[ _ _ cuda-global ] (( -- device-ptr )) define-declared ;
+
 TUPLE: cuda-library name path handle ;
 
 : <cuda-library> ( name path -- obj )
index 0e2dafc7902c86225fa385a03ba26b90bff1d317..b09fff4739239528b32c33ec4e3d5f4a18915579 100644 (file)
@@ -10,6 +10,9 @@ SYNTAX: CUDA-LIBRARY:
     [ drop current-cuda-library set-global ] 2bi ;
 
 SYNTAX: CUDA-FUNCTION:
-    scan [ create-in current-cuda-library get ] [ ] bi
-    ";" scan-c-args drop define-cuda-word ;
+    scan [ create-in current-cuda-library get ] keep
+    ";" scan-c-args drop define-cuda-function ;
 
+SYNTAX: CUDA-GLOBAL:
+    scan [ create-in current-cuda-library get ] keep
+    define-cuda-global ;