OverviewFilesCommitsIssuesDocsReleasesPeers

hypercore-kb / opencog-kb / language-learning / mvp / test-pmfg-cache.scm

62 lines · scm ref:
#!/usr/bin/env guile
!#
;;
;; test-pmfg-cache.scm - Test binary caching with the real PMFG kernel
;;

(use-modules (opencog) (opencog exec))
(use-modules (opencog sensory) (opencog opencl))
(use-modules (ice-9 format))

(define (get-time-ms)
  (let ((t (gettimeofday)))
    (+ (* (car t) 1000.0) (/ (cdr t) 1000.0))))

(display "\n")
(display "═══════════════════════════════════════════════════════════════\n")
(display "  PMFG Kernel Binary Cache Test\n")
(display "═══════════════════════════════════════════════════════════════\n\n")

;; Copy PMFG kernel to /tmp
(system "cp /storage/projects/code/hypercore-kb/opencog-kb/language-learning/mvp/pmfg-kernel.cl /tmp/pmfg-kernel.cl")
(display "Using kernel: /tmp/pmfg-kernel.cl\n\n")

;; First open - should compile (takes a long time)
(display "=== FIRST OPEN (cold - should compile) ===\n")
(display "This may take 30-200 seconds...\n")
(define t0 (get-time-ms))

(define gpu1 (OpenclNode "opencl://:/tmp/pmfg-kernel.cl"))
(cog-execute! (SetValue gpu1 (Predicate "*-open-*") (Type 'FloatValue)))

(define t1 (get-time-ms))
(format #t "First open took: ~,1f seconds\n\n" (/ (- t1 t0) 1000.0))

;; Close
(cog-execute! (SetValue gpu1 (Predicate "*-close-*") (StringValue "bye")))

;; Second open - should use cache
(display "=== SECOND OPEN (warm - should use cache) ===\n")
(define t2 (get-time-ms))

(define gpu2 (OpenclNode "opencl://:/tmp/pmfg-kernel.cl"))
(cog-execute! (SetValue gpu2 (Predicate "*-open-*") (Type 'FloatValue)))

(define t3 (get-time-ms))
(format #t "Second open took: ~,1f seconds\n\n" (/ (- t3 t2) 1000.0))

;; Results
(define first-time (/ (- t1 t0) 1000.0))
(define second-time (/ (- t3 t2) 1000.0))
(define speedup (/ first-time (max 0.001 second-time)))

(display "═══════════════════════════════════════════════════════════════\n")
(format #t "  First open:  ~,1f seconds (compilation)\n" first-time)
(format #t "  Second open: ~,1f seconds (from cache)\n" second-time)
(format #t "  Speedup:     ~,0fx\n" speedup)
(display "═══════════════════════════════════════════════════════════════\n")

;; Show cache
(display "\nCache files:\n")
(system "ls -lah ~/.cache/opencog/opencl/*/")