Presentation is loading. Please wait.

Presentation is loading. Please wait.

F RANZ I NC. Optimizing and Debugging Programs in Allegro CL By Duane Rettig April, 2007.

Similar presentations


Presentation on theme: "F RANZ I NC. Optimizing and Debugging Programs in Allegro CL By Duane Rettig April, 2007."— Presentation transcript:

1 F RANZ I NC. Optimizing and Debugging Programs in Allegro CL By Duane Rettig April, 2007

2 F RANZ I NC. Introduction Personal Tutorial will become available via ftp Some things available only in 8.1 Some concepts are from LUGM/1998

3 F RANZ I NC. Outline Debug Low Level Hacks Optimization

4 F RANZ I NC. Debug Zoom Niceties –[ run zoom.lisp] gdb/dbx/windbg interface –[ show manual demos]

5 F RANZ I NC. Low Level Hacks Intro: Structure of Allegro CL “ll” functions Lap code

6 F RANZ I NC. Structure of Allegro CL src/ c/*.c rs/*.cl code/*.cl compile asm *.s*.o *.fasl cc

7 F RANZ I NC. Structure (cont) *.o *.so ld *.fasl libacl*.so lisp (dumplisp) running lisp *.dxl

8 F RANZ I NC. Example rs code (def-runtime-q new-ratio (num den) (let ((rat (q-allocate-heap-other #md-ratio-type-code #md-ratio-size))) (setf (ls md-ratio num rat) num) (setf (ls md-ratio den rat) den) rat))

9 F RANZ I NC. Example lisp ll code [run “both-fixnum-p.lisp”]

10 F RANZ I NC. “ll” functions [see ll-doc.html]

11 F RANZ I NC. Another ll example Some compiler-macros expand to ll funcs –[run char-code.lisp]

12 F RANZ I NC. Lap code comp::*hack-compiler-output* –[run hack-compiler-output.lisp] comp::*assemble-function-body* –[run assemble-function-body.lisp]

13 F RANZ I NC. Optimization Compilation Boxing and unboxing Read-line Foreign types Memcpy String manipulation Aligned pointers Hashing Runtime Analyzer

14 F RANZ I NC. Optimization Methodology Get it right first Profile it –The time macro –The Allegro CL Runtime Analyzer Hit the high cost items –Implementations –Algorithms

15 F RANZ I NC. Compilation Adding declarations to code (declare (:explain :types :inlining)) –[run inlining-demos.lisp]

16 F RANZ I NC. Boxing and Unboxing Ensuring optimal unboxability –[run unboxing.lisp] Immediate args –[see immediate-args.html]

17 F RANZ I NC. read-line What's wrong with it?

18 F RANZ I NC. read-line It always conses! What to do? –read-line-into Never conses Must deal with overflowing lines –simple-stream-read-line Two modes –implementation for read-line –similar to read-line, handling overflows [see read-line-test.html]

19 F RANZ I NC. memcpy memcpy-up memcpy-down [see memcpy-demo.html]

20 F RANZ I NC. String Manipulation string+ and the standard, with concatenate [see string+.cl]

21 F RANZ I NC. Aligned Pointers Allow cons-free pointer manipulation Pointers look like fixnums Pointers must be aligned to: –32-bit: 4-byte boundaries –64-bit: 8-byte boundaries [see “aligned.html”]

22 F RANZ I NC. Aligned Pointers (cont) most-positive-fixnum most-negative-fixnum for 32-bit: signed fixnum unsigned 0 #x7ffffffc #x80000000 0 #xfffffffc-1 (fix)

23 F RANZ I NC. Foreign types (sorry, under construction): Foreign-types aren't just for foreign-functions We can combine disciplines –[run mapped-aligned-ftype.lisp]

24 F RANZ I NC. Hashing :test extensions :values [t] (may be nil or :weak) :weak-keys [nil] (may be non-nil) :hash-function [nil] (or fboundp symbol) –must return 24 bit value for 32-bit lisps 32 bit value for 64-bit lisps

25 F RANZ I NC. Hashing Rehash-issues excl::*default-rehash-size* excl::*allocate-large-hash-table-vectors-in-old-space* excl::convert-to-internal-fspec –example of weak-key, sans-value hash-table [run shared-cons-table.lisp]

26 F RANZ I NC. Hashing Hash tables are very efficient if hash codes are well-distributed excl::hash-table-stats –[run hash-table-stats.lisp]

27 F RANZ I NC. Runtime Analyzer (explain the name) Always compile top-level test functions Do not use time macro with profiler Avoid simultaneous time/call-count profiles When using time macro, beware of new closures Use prof:disassemble-profile

28 F RANZ I NC. Time macro: extra closures This driver is not as simple as it looks! (defun test-driver (n) (time (dotimes (i n) (test-it)))

29 F RANZ I NC. Time macro: avoiding extra closures Use this instead: (defun test-driver (n) (dotimes (i n) (test-it)) (time (test-driver 1000000))

30 F RANZ I NC. disassemble-profile Provides sample hit counts and percentages Multiple disassembles provide info similar to call-graph [show manual demo]

31 F RANZ I NC. Thank You.


Download ppt "F RANZ I NC. Optimizing and Debugging Programs in Allegro CL By Duane Rettig April, 2007."

Similar presentations


Ads by Google