Hi,
I use below macro to allocate foreign vectors.
(defmacro with-foreign-vectors ((&rest bindings) &body body) "Convenient macro to create foreign vector bindings. `BINDIGS' are of `(NAME TYPE INITIAL-CONTENTS)' format." `(let* ,(loop with val = (gensym) for (name type initial-contents) in bindings collect `(,name (let ((,val ,initial-contents)) ; (let ((*print-length* 10)) ; (format *trace-output* "~S => ~D ~S (~A)~%" ; ',name (when ,val (length ,val)) ; ,val (find nil ,val))) (foreign-alloc ,type :count (length ,val) :initial-contents ,val)))) (unwind-protect (progn ,@body) ,@(mapcar (lambda (name) `(foreign-free ,name)) (mapcar #'car bindings)))))
But while running the program, it throws below error message. (I experience same situation in both SBCL and CCL.)
NALP> (compare-partitionings "/home/vy/bilkent/projects/xml/t/xmark-1024-20091006-1314-small/" "/home/vy/bilkent/projects/xml/t/xmark-1024-20091006-1314-small/sanitized-logs.out" "/home/vy/bilkent/projects/xml/t/xmark-1024-20091006-1314-small/weights.out" 40 16 0.2) N-PTR => 1 #(7536) (NIL) XADJ-PTR => 7537 #(0 1 3 5 6 8 10 12 14 16 ...) (NIL) ADJNCY-PTR => 8011 #(1 80 2 5666 3 4 2044 5 2292 6 ...) (NIL) ; Evaluation aborted.
; The value NIL is not of type (SIGNED-BYTE 32). ; [Condition of type TYPE-ERROR] ; ; Restarts: ; 0: [RETRY] Retry SLIME REPL evaluation request. ; 1: [ABORT] Return to SLIME's top level. ; 2: [TERMINATE-THREAD] Terminate this thread (#<THREAD "repl-thread" RUNNING {AA75079}>) ; ; Backtrace: ; 0: (CFFI-SYS:%MEM-SET NIL #.(SB-SYS:INT-SAP #X080C8850) :INT 16620) ; Locals: ; CFFI-SYS::OFFSET = 16620 ; CFFI-SYS::PTR = #.(SB-SYS:INT-SAP #X080C8850) ; TYPE = :INT ; CFFI-SYS::VALUE = NIL ; 1: (FOREIGN-ALLOC :INT)[:EXTERNAL] ; Locals: ; SB-DEBUG::ARG-0 = 5 ; SB-DEBUG::ARG-1 = :INT ; 2: (METIS-BIPARTITION-GRAPH-FFI #(0 1 3 5 6 8 ...) #(1 80 2 5666 3 4 ...) #(1 1 1 1 1 1 ...) #(20 7 13 1 19 20 ...) 0.2) ; Locals: ; SB-DEBUG::ARG-0 = #(0 1 3 5 6 8 ...) ; SB-DEBUG::ARG-1 = #(1 80 2 5666 3 4 ...) ; SB-DEBUG::ARG-2 = #(1 1 1 1 1 1 ...) ; SB-DEBUG::ARG-3 = #(20 7 13 1 19 20 ...) ; SB-DEBUG::ARG-4 = 0.2
When I look at the printed results, there doesn't appear any `NIL' values in any of the `:INITIAL-CONTENTS' vectors. But error tells that one of the `VALUE' arguments passed to `CFFI-SYS:%MEM-SET' is `NIL'.
Below are some of the detailed macroexpansions related to `CFFI-SYS:%MEM-SET'.
(define-mem-accessors (:char sb-sys:signed-sap-ref-8) (:unsigned-char sb-sys:sap-ref-8) (:short sb-sys:signed-sap-ref-16) (:unsigned-short sb-sys:sap-ref-16) (:int sb-sys:signed-sap-ref-32) (:unsigned-int sb-sys:sap-ref-32) (:long sb-sys:signed-sap-ref-word) (:unsigned-long sb-sys:sap-ref-word) (:long-long sb-sys:signed-sap-ref-64) (:unsigned-long-long sb-sys:sap-ref-64) (:float sb-sys:sap-ref-single) (:double sb-sys:sap-ref-double) (:pointer sb-sys:sap-ref-sap))
Which turns into below form if I macroexpand the `DEFINE-MEM-ACCESSORS'.
... (DEFUN %MEM-SET (VALUE PTR TYPE &OPTIONAL (OFFSET 0)) (ECASE TYPE (:CHAR (SETF (SB-SYS:SIGNED-SAP-REF-8 PTR OFFSET) VALUE)) (:UNSIGNED-CHAR (SETF (SB-SYS:SAP-REF-8 PTR OFFSET) VALUE)) (:SHORT (SETF (SB-SYS:SIGNED-SAP-REF-16 PTR OFFSET) VALUE)) (:UNSIGNED-SHORT (SETF (SB-SYS:SAP-REF-16 PTR OFFSET) VALUE)) (:INT (SETF (SB-SYS:SIGNED-SAP-REF-32 PTR OFFSET) VALUE)) (:UNSIGNED-INT (SETF (SB-SYS:SAP-REF-32 PTR OFFSET) VALUE)) (:LONG (SETF (SB-SYS:SIGNED-SAP-REF-WORD PTR OFFSET) VALUE)) (:UNSIGNED-LONG (SETF (SB-SYS:SAP-REF-WORD PTR OFFSET) VALUE)) (:LONG-LONG (SETF (SB-SYS:SIGNED-SAP-REF-64 PTR OFFSET) VALUE)) (:UNSIGNED-LONG-LONG (SETF (SB-SYS:SAP-REF-64 PTR OFFSET) VALUE)) (:FLOAT (SETF (SB-SYS:SAP-REF-SINGLE PTR OFFSET) VALUE)) (:DOUBLE (SETF (SB-SYS:SAP-REF-DOUBLE PTR OFFSET) VALUE)) (:POINTER (SETF (SB-SYS:SAP-REF-SAP PTR OFFSET) VALUE)))) ...
To be honest, I need some urgent assistance. Any helps will be really appreciated.
Regards.
Hi,
I've attached[1] a small subset of the actual program to reproduce the problem. You'll need cl-fad, cffi, and binomial-heap packages to compile and load the node-access-log-parser.lisp file. After loading the file, just issue below command while in `NALP' package.
(compare-partitionings "/tmp/cffi-foreign-alloc-test/" "/tmp/cffi-foreign-alloc-test/sanitized-logs.out" "/tmp/cffi-foreign-alloc-test/weights.out" 40 16 0.2)
Regards.
[1] http://www.students.itu.edu.tr/~yazicivo/tmp/cffi-foreign-alloc-test.tar.bz2
On Mon, 07 Sep 2009, Volkan YAZICI yazicivo@ttmail.com writes:
I use below macro to allocate foreign vectors.
(defmacro with-foreign-vectors ((&rest bindings) &body body) "Convenient macro to create foreign vector bindings. `BINDIGS' are of `(NAME TYPE INITIAL-CONTENTS)' format." `(let* ,(loop with val = (gensym) for (name type initial-contents) in bindings collect `(,name (let ((,val ,initial-contents)) ; (let ((*print-length* 10)) ; (format *trace-output* "~S => ~D ~S (~A)~%" ; ',name (when ,val (length ,val)) ; ,val (find nil ,val))) (foreign-alloc ,type :count (length ,val) :initial-contents ,val)))) (unwind-protect (progn ,@body) ,@(mapcar (lambda (name) `(foreign-free ,name)) (mapcar #'car bindings)))))
But while running the program, it throws below error message. (I experience same situation in both SBCL and CCL.)
NALP> (compare-partitionings "/home/vy/bilkent/projects/xml/t/xmark-1024-20091006-1314-small/" "/home/vy/bilkent/projects/xml/t/xmark-1024-20091006-1314-small/sanitized-logs.out" "/home/vy/bilkent/projects/xml/t/xmark-1024-20091006-1314-small/weights.out" 40 16 0.2) N-PTR => 1 #(7536) (NIL) XADJ-PTR => 7537 #(0 1 3 5 6 8 10 12 14 16 ...) (NIL) ADJNCY-PTR => 8011 #(1 80 2 5666 3 4 2044 5 2292 6 ...) (NIL) ; Evaluation aborted.
; The value NIL is not of type (SIGNED-BYTE 32). ; [Condition of type TYPE-ERROR] ; ; Restarts: ; 0: [RETRY] Retry SLIME REPL evaluation request. ; 1: [ABORT] Return to SLIME's top level. ; 2: [TERMINATE-THREAD] Terminate this thread (#<THREAD "repl-thread" RUNNING {AA75079}>) ; ; Backtrace: ; 0: (CFFI-SYS:%MEM-SET NIL #.(SB-SYS:INT-SAP #X080C8850) :INT 16620) ; Locals: ; CFFI-SYS::OFFSET = 16620 ; CFFI-SYS::PTR = #.(SB-SYS:INT-SAP #X080C8850) ; TYPE = :INT ; CFFI-SYS::VALUE = NIL ; 1: (FOREIGN-ALLOC :INT)[:EXTERNAL] ; Locals: ; SB-DEBUG::ARG-0 = 5 ; SB-DEBUG::ARG-1 = :INT ; 2: (METIS-BIPARTITION-GRAPH-FFI #(0 1 3 5 6 8 ...) #(1 80 2 5666 3 4 ...) #(1 1 1 1 1 1 ...) #(20 7 13 1 19 20 ...) 0.2) ; Locals: ; SB-DEBUG::ARG-0 = #(0 1 3 5 6 8 ...) ; SB-DEBUG::ARG-1 = #(1 80 2 5666 3 4 ...) ; SB-DEBUG::ARG-2 = #(1 1 1 1 1 1 ...) ; SB-DEBUG::ARG-3 = #(20 7 13 1 19 20 ...) ; SB-DEBUG::ARG-4 = 0.2
When I look at the printed results, there doesn't appear any `NIL' values in any of the `:INITIAL-CONTENTS' vectors. But error tells that one of the `VALUE' arguments passed to `CFFI-SYS:%MEM-SET' is `NIL'.
Below are some of the detailed macroexpansions related to `CFFI-SYS:%MEM-SET'.
(define-mem-accessors (:char sb-sys:signed-sap-ref-8) (:unsigned-char sb-sys:sap-ref-8) (:short sb-sys:signed-sap-ref-16) (:unsigned-short sb-sys:sap-ref-16) (:int sb-sys:signed-sap-ref-32) (:unsigned-int sb-sys:sap-ref-32) (:long sb-sys:signed-sap-ref-word) (:unsigned-long sb-sys:sap-ref-word) (:long-long sb-sys:signed-sap-ref-64) (:unsigned-long-long sb-sys:sap-ref-64) (:float sb-sys:sap-ref-single) (:double sb-sys:sap-ref-double) (:pointer sb-sys:sap-ref-sap))
Which turns into below form if I macroexpand the `DEFINE-MEM-ACCESSORS'.
... (DEFUN %MEM-SET (VALUE PTR TYPE &OPTIONAL (OFFSET 0)) (ECASE TYPE (:CHAR (SETF (SB-SYS:SIGNED-SAP-REF-8 PTR OFFSET) VALUE)) (:UNSIGNED-CHAR (SETF (SB-SYS:SAP-REF-8 PTR OFFSET) VALUE)) (:SHORT (SETF (SB-SYS:SIGNED-SAP-REF-16 PTR OFFSET) VALUE)) (:UNSIGNED-SHORT (SETF (SB-SYS:SAP-REF-16 PTR OFFSET) VALUE)) (:INT (SETF (SB-SYS:SIGNED-SAP-REF-32 PTR OFFSET) VALUE)) (:UNSIGNED-INT (SETF (SB-SYS:SAP-REF-32 PTR OFFSET) VALUE)) (:LONG (SETF (SB-SYS:SIGNED-SAP-REF-WORD PTR OFFSET) VALUE)) (:UNSIGNED-LONG (SETF (SB-SYS:SAP-REF-WORD PTR OFFSET) VALUE)) (:LONG-LONG (SETF (SB-SYS:SIGNED-SAP-REF-64 PTR OFFSET) VALUE)) (:UNSIGNED-LONG-LONG (SETF (SB-SYS:SAP-REF-64 PTR OFFSET) VALUE)) (:FLOAT (SETF (SB-SYS:SAP-REF-SINGLE PTR OFFSET) VALUE)) (:DOUBLE (SETF (SB-SYS:SAP-REF-DOUBLE PTR OFFSET) VALUE)) (:POINTER (SETF (SB-SYS:SAP-REF-SAP PTR OFFSET) VALUE)))) ...
To be honest, I need some urgent assistance. Any helps will be really appreciated.
On Tue, 08 Sep 2009, Volkan YAZICI yazicivo@ttmail.com writes:
I've attached[1] a small subset of the actual program to reproduce the problem. You'll need cl-fad, cffi, and binomial-heap packages to compile and load the node-access-log-parser.lisp file. After loading the file, just issue below command while in `NALP' package.
(compare-partitionings "/tmp/cffi-foreign-alloc-test/" "/tmp/cffi-foreign-alloc-test/sanitized-logs.out" "/tmp/cffi-foreign-alloc-test/weights.out" 40 16 0.2)
Nevermind. Execuse me for the mess.
Regards.