anchor.diff:      :initform '()
       :reader memory-children
       :accessor memory-children-slot
  +    :type list)
  +   ;; The processors with access to this piece of memory.
  +   (%processors
  +    :initarg :processors
  +    :initform '()
  +    :reader memory-processors
  +    :accessor memory-processors-slot
       :type list)
      ;; The memory size in bytes.
      (%size
  
positive.code:              :granularity 64
               :latency 40
               :bandwidth 64
               :parent-bandwidth 8)))
      (make-instance 'machine
        :processors
        (loop for id below n-cpus
              collect
              (make-instance 'processor
                :name (format nil "CPU-~D" id)
                :memory
                (make-instance 'memory
                  :name "L1"
                  ;; We assume  32 KB of L1 cache per CPU.
                  :size (* 32 1024)
                  :granularity 64
                  :latency 5
                  :bandwidth 128
                  :parent-bandwidth 32
                  :parent
                  (make-instance 'memory
                    :name "L2"
                    :parent l3-cache
                    ;; We assume  512 KB of L2 cache per CPU.
                    :size (* n-cpus 512 1024)
                    :granularity 64
                    :latency 15
                    :bandwidth 64
                    :parent-bandwidth 16)))))))
  
negative.code: 
  ;;; Returns the list memories that have this one as their parent.
  (defgeneric memory-children (memory))
  
  ;;; Returns the list of processors with access to this piece of memory.
  (defgeneric memory-processors (memory))
  
  ;;; Returns the memory size in bytes.
  (defgeneric memory-size (memory))
  