Skip to content
This repository has been archived by the owner on Dec 3, 2019. It is now read-only.
st-- edited this page May 13, 2015 · 13 revisions

Outstanding Features

  • Kernels

    • Add Kernels
      • Periodic kernel: exp(-2sin(π*(x-y)/k.p)^2 / k.ell^2)
        • improve numeric accuracy - kernel_dxdy and kernel_dp tests don't run through entirely
      • Automatic Relevance Determination Kernel: one for each euclidean distance and scalar product kernel
        • kernel, kernel_dx, kernel_dy
        • kernel_dxdy
        • kernel_dp: derivatives w.r.t. elements of the weight vector
        • fast kernelmatrix_dx,_dy,_dxdy() methods
        • test coverage
    • Expand derivatives to the other kernels
    • Composites of composite kernels
      • Derivatives w.r.t. parameters of subkernels
  • Methods

    • Efficient computation of weighted squared norms/scalar products
      • Efficient computation of derivatives w.r.t. the weights
    • Efficient computation of kernel derivatives
    • Efficient computation of weighted gramians
    • Efficient kernel matrix approximation (this should be last and it's not a hurry)

Style Guide

  • First derivatives are named using the pattern function_d* and second derivatives function_d*d*. For example, kernel_dxdy. Since the name of a function does not change when it is differentiated with respect to a variable, it is redundant to write something like 'function_dfunction_dxdy'
  • Line lengths are variable - aim to keep lines of code under 80 characters but allow the definition of a function to be as long as needed as julia often has long function names/definitions

Optimisation Strategies

  • Don't construct intermediate objects (vectors, matrices) inside loops - this leads to a lot of memory allocation and then the GC slows everything down. Instead, need to write functions such that everything is done in-place.
  • When scanning an array, ensure that the innermost loop corresponds to the leftmost index when accessing an array - Julia's arrays are in column-major order
  • When a function contains two or more loops in succession (not composition) or some set-up code, try to break these into separate functions
  • Avoid operating on multiple arrays at once in Julia (eg. attempt to use BLAS where possible)
  • more?

Notes

Clone this wiki locally