Massively-parallel framework for maximum-likelihood fits, implemented in CUDA.
C++ Cuda TeX Other
Latest commit 6e9f07b Jan 7, 2016 @liang-sun liang-sun Merge pull request #19 from pseyfert/master
use root-config -- fixes absence of libCint.so in ROOT6
Permalink
Failed to load latest commit information.
PDFs Changes related to two reported issues #15 and #16 Oct 30, 2014
examples use root-config -- fixes absence of libCint.so in ROOT6 Jan 7, 2016
fakecuda Fake enough of CUDA to compile GooFit (including thrust headers and s… Oct 23, 2013
rootstuff Add GooFit support for OpenMP on Intel Xeon Phi (MIC) Nov 6, 2014
.gitignore Need trailing / to ignore a directory Oct 23, 2013
BinnedDataSet.cc Add names to datasets for debugging. Aug 14, 2013
BinnedDataSet.hh Add names to datasets for debugging. Aug 14, 2013
DataSet.cc Add names to datasets for debugging. Aug 14, 2013
DataSet.hh Add names to datasets for debugging. Aug 14, 2013
Doxyfile add Doxyfile Apr 5, 2013
Faddeeva.cc Initial framework commit Mar 25, 2013
Faddeeva.hh Initial framework commit Mar 25, 2013
FitControl.cc Changed FunctorBase to PdfBase Aug 30, 2013
FitControl.hh Changed FunctorBase to PdfBase Aug 30, 2013
FitManager.cc Remove old OMP_ON ifdefs. Oct 3, 2013
FitManager.hh Rename EngineCore to GooPdf. Aug 30, 2013
FitManagerMinuit1.cc Remove old OMP_ON ifdefs. Oct 3, 2013
FitManagerMinuit1.hh Remove all OMP_ON guarded fragments Nov 5, 2014
FitManagerMinuit2.cc Rename PdfFunctor to FitManager Aug 30, 2013
FitManagerMinuit2.hh FooThrustFunctor renamed FooPdf. Aug 30, 2013
FitManagerMinuit3.cc Remove old OMP_ON ifdefs. Oct 3, 2013
FitManagerMinuit3.hh Remove all OMP_ON guarded fragments Nov 5, 2014
FunctorWriter.cc Changed FunctorBase to PdfBase Aug 30, 2013
FunctorWriter.hh Changed FunctorBase to PdfBase Aug 30, 2013
GenVoigtian.cc Initial framework commit Mar 25, 2013
GlobalCudaDefines.hh Remove all OMP_ON guarded fragments Nov 5, 2014
HOWTO_Contribute.md Add HOWTO_Contribute.md Aug 6, 2013
LICENSE Add LICENSE file Mar 28, 2013
Makefile Remove CUDALIBDIR from the main GooFit Makefile Nov 6, 2014
PdfBase.cc Remove old OMP_ON ifdefs. Oct 3, 2013
PdfBase.cu CUDA's thrust is changing from THRUST_DEVICE_BACKEND to THRUST_DEVICE… Oct 23, 2013
PdfBase.hh Remove all OMP_ON guarded fragments Nov 5, 2014
README.md Changes related to two reported issues #15 and #16 Oct 30, 2014
README_DEV.md Use markdown, not RST formatting Apr 5, 2013
UnbinnedDataSet.cc Add names to datasets for debugging. Aug 14, 2013
UnbinnedDataSet.hh Add names to datasets for debugging. Aug 14, 2013
Variable.cc Create Indexable superclass of Variable, introduce Constant. Jul 11, 2013
Variable.hh Create Indexable superclass of Variable, introduce Constant. Jul 11, 2013
documentation.pdf Change __shared__ to MEM_SHARED Sep 30, 2013
documentation.tex Change cudaMalloc and cudaFree to gooMalloc and gooFree. Sep 30, 2013

README.md

GooFit is a massively-parallel framework, written in CUDA, for doing maximum-likelihood fits. It is also possible to build GooFit using OpenMP.

Requirements

  • If using CUDA:
    • CUDA 4.2 or 5.x
    • An nVidia GPU supporting compute capability at least 2.0
  • If building for OpenMP:
    • a compiler supporting OpenMP

Installation

  • Clone with git:

    git clone git://github.com/GooFit/GooFit.git
    
  • check that the path setting in Makefile for CUDALOCATION is correct for your system

    • If using OpenMP, CUDALOCATION should point at ./fakecuda
    • Set TARGET_OMP = 1 in the Makefile
    • Put ./fakcuda on your PATH, e.g. export PATH=$PATH:$HOME/GooFit/fakecuda (n.b. the use of g++ is hardwired in fakecuda/nvcc; this is bad)
    • Install a copy of CUDA's thrust in ./thrust (there's nothing to compile)
  • then compile with gmake.

As an alternative to modifying the Makefile, you can pass the values as e.g. gmake CUDALOCATION=$HOME/Src/GooFit/fakecuda TARGET_OMP=1

Building the Examples Fits

  • If you have Root on your system,
    • set the path to full root installation (bash syntax) export ROOTSYS=
  • If you don't have Root, do NOT set ROOTSYS

  • check that the path setting in examples/simpleFit/Makefile for CUDALOCATION is correct for your system

    • If using OpenMP, CUDALOCATION should point at ./fakecuda
    • Set TARGET_OMP = 1 in the Makefile
  • change to the examples/simpleFit directory and buid the program(s): cd examples/simpleFit ; gmake all (you'll recall that you can set CUDALOCATION and TARGET_OMP on the command line instead of modifying the Makefile)

Running the Example Fit

  • Setup the bin and library paths for root

    export PATH=$PATH:$ROOTSYS/bin:.
    # On Linux:
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ROOTSYS/lib:<GooFit path>/rootstuff
    # On Mac:
    export DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:$ROOTSYS/lib:<GooFit path>/rootstuff
    

    (If you don't have Root, don't modify the PATH and omit $ROOTSYS/lib:)

  • To run the simple fit example type: ./simpleFitExample (If you didn't define ROOTSYS the data and fits will be written to stdout)

Acknowledgement

GooFit's development has been supported by the National Science Foundation under grant number NSF-1005530. Any opinions, findings, and conclusions or recommendations expressed in this material are those of the developers and do not necessarily reflect the views of the National Science Foundation.