Download presentation
Presentation is loading. Please wait.
Published byCathleen Barker Modified over 9 years ago
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.
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.