Skip to content
Philip Lykke Carlsen edited this page Nov 19, 2012 · 5 revisions

Project Health

How good is the project health? That is, we want to determine how likely is it that development on the language will continue and that it will keep getting funding and interest from developers.

Subquestions include:

  • (in report) Quality of documentation

    As Nikola is not published on Hackage, there is no automatically searchable generated documentation, and one has to manually generate haddock documentation.

    Further, Nikola is described in the paper:

    @inproceedings{mainland10nikola, author = {Geoffrey Mainland and Greg Morrisett}, title = {Nikola: Embedding Compiled {GPU} Functions in Haskell}, booktitle = {Proceedings of the third ACM SIGPLAN Symposium on Haskell}, series = {Haskell '10}, year = {2010}, pages = {67--78} }

    http://www.eecs.harvard.edu/~mainland/publications/mainland10nikola.pdf

  • Code review

    TODO

  • (in report) Portability

    Only runs(/builds even?) on machines with an NVidia CUDA card (of compute capability what?) and with the cuda drivers and sdk installed.

  • (in report) Installation process

    Requires running a classical "configure"-script to produce the binding to the cuda-backend.

  • (in report) Number of dependencies (incl. GHC extensions)

    Package dependencies:

    OpenGL base bytestring containers cuda exception-mtl exception-transformers language-c-quote mainland-pretty -- Mainlands own pretty printer. mersenne-random-pure64 -- pseudorandom generator (10 rev deps at least)

    mtl process primitive -- (By Roman Leshchinskiy. recently maintained. Many revdeps (including Vector)) random repa srcloc --? (small package by mainland himself) syb symbol --? (small package by mainland himself) text transformers

    • 20 packages in total. All but language-c-quote have a healthy user base in terms of other packages using them.

    GHC extensions:

    {-# LANGUAGE BangPatterns #-} {-# LANGUAGE CPP #-} {-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE EmptyDataDecls #-} {-# LANGUAGE ExistentialQuantification #-}

    {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE ForeignFunctionInterface #-} {-# LANGUAGE FunctionalDependencies #-} {-# LANGUAGE GADTs #-}

    {-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE ImpredicativeTypes #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE ParallelListComp #-} {-# LANGUAGE PatternGuards #-}

    {-# LANGUAGE QuasiQuotes #-} {-# LANGUAGE Rank2Types #-} {-# LANGUAGE RankNTypes #-} {-# LANGUAGE RebindableSyntax #-} {-# LANGUAGE ScopedTypeVariables #-}

    {-# LANGUAGE StandaloneDeriving #-} {-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE TypeOperators #-} {-# LANGUAGE TypeSynonymInstances #-}

    {-# LANGUAGE UndecidableInstances #-}

    • 26 in total
  • (in report) Number of users (reverse dependencies)

    Nikola does not yet appear on hackage, and as such we have no indications of the amount of users Nikola has.

    Since Nikola is not published on hackage, our method of counting users doesn't apply. Nikola is published on the github.com website however, where the project has 9 stars and zero forks\footnote{Gathered on 2012-11-15}, which is at least some measurable artifact of the existance of human interest in the language effort.

  • (in report) Number of contributors

    Only Geoffrey Mainland.

  • (in report) How easy is it to start contributing?

    The source code is hosted on github, so structurally/bureaucratically easy. Geoffrey appears to be interested/open in merging in contributions from other people.

    Since Nikola is still a work in progress that has yet to settle on a final form and direction, new contributions might only be accepted if they align with the author's own possibly unarticulated notion of what he wants with the project. \todo{This needs reassesment..}

  • Latest project activity (e.g. which version of GHC does it compile on?)

    Listed under "past projects" on Mainland's homepage, but received significant maintainance in August and October 2012.

  • (in report) Licensing

    Harvard College, appears BSD style.

  • (in report) Funding

    Appears to have been funded as part of phd research (or what?), but appears to be a spare-time project now.

Ease of use and expressiveness

How easy is the language to use? And how expressive is it? Our aim is to find a language that might be suitable for a financial engineer and we thus want a suitably high-level language. It should be near the complexity level of R. We still want the language to expressive enough to cover the domain of financial algorithms.

Subquestions include

  • (in report) Which programs can we write, and which can't we write?

    • Can we write nested loops?
    • Does it include all of: scans, folds, zip/map, stencils,

    Nikola is described as a "first-order language". Thus, any loops or loop-like structure must be unrolled at program compilation time to be executable.

  • How good are the error messages?

  • How high-level is it on the scale from R to CUDA?

Performance

How does the languages compare in a performance benchmark?

  • Benchmark of binomial pricer on expiry = 1,2,4,8,16,32,64,128 years.

  • Benchmark of Longstaff and Schwartz

  • How many in-code optimiser hints (inlining-statements, forcing of delayed arrays etc.) are necessary to get decent performance?

  • How does the performance of a naive implementation (no optimiser hints) compare to an optimised version?

Survey "VectorMARK" in progress

Clone this wiki locally