Skip to content

Commit e40883e

Browse files
committed
...
1 parent 53b23ba commit e40883e

17 files changed

+99
-517
lines changed

Doxyfile

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@ PROJECT_NUMBER = 3.0.0
33

44
STRIP_FROM_PATH = /home/augalves/Development/Release/Hydra
55

6-
INPUT = /home/augalves/Development/Release/Hydra/hydra /home/augalves/Development/Release/Hydra/doxydefs /home/augalves/Development/Release/Hydra/examples /home/augalves/Development/Release/Hydra/README.md
6+
INPUT = /home/augalves/Development/Release/Hydra/hydra /home/augalves/Development/Release/Hydra/doxydefs /home/augalves/Development/Release/Hydra/examples
77

88

99
USE_MDFILE_AS_MAINPAGE = /home/augalves/Development/Release/Hydra/doxydefs/README.md
10-
#PROJECT_LOGO = /home/augalves/Development/Release/Hydra/logo_Hydra.png
10+
PROJECT_LOGO = /home/augalves/Development/Release/Hydra/doxydefs/logo_Hydra2.png
1111
OUTPUT_DIRECTORY = /home/augalves/Development/Release/HydraEclipseProj/doc
1212

1313
# Doxyfile 1.8.11
@@ -17,7 +17,6 @@ OUTPUT_DIRECTORY = /home/augalves/Development/Release/HydraEclipseProj/doc
1717
#---------------------------------------------------------------------------
1818
DOXYFILE_ENCODING = UTF-8
1919
PROJECT_NAME = Hydra
20-
#PROJECT_NUMBER = 2.0.0
2120
PROJECT_BRIEF = "A header-only templated C++ framework to perform data analysis on massively parallel platforms."
2221
CREATE_SUBDIRS = NO
2322
ALLOW_UNICODE_NAMES = NO
@@ -172,7 +171,7 @@ RECURSIVE = YES
172171
EXCLUDE =
173172
EXCLUDE_SYMLINKS = NO
174173
EXCLUDE_PATTERNS = *detail/external*
175-
EXCLUDE_SYMBOLS =
174+
EXCLUDE_SYMBOLS = *detail::*,hydra::detail::*
176175
EXAMPLE_PATH = /home/augalves/Development/Release/Hydra/examples
177176
EXAMPLE_PATTERNS = *
178177
EXAMPLE_RECURSIVE = YES

Doxyfile.in

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@ PROJECT_NUMBER = @HYDRA_VERSION@
33

44
STRIP_FROM_PATH = @CMAKE_CURRENT_SOURCE_DIR@
55

6-
INPUT = @CMAKE_CURRENT_SOURCE_DIR@/hydra @CMAKE_CURRENT_SOURCE_DIR@/doxydefs @CMAKE_CURRENT_SOURCE_DIR@/examples @CMAKE_CURRENT_SOURCE_DIR@/README.md
6+
INPUT = @CMAKE_CURRENT_SOURCE_DIR@/hydra @CMAKE_CURRENT_SOURCE_DIR@/doxydefs @CMAKE_CURRENT_SOURCE_DIR@/examples
77

88

99
USE_MDFILE_AS_MAINPAGE = @CMAKE_CURRENT_SOURCE_DIR@/doxydefs/README.md
10-
#PROJECT_LOGO = @CMAKE_CURRENT_SOURCE_DIR@/logo_Hydra.png
10+
PROJECT_LOGO = @CMAKE_CURRENT_SOURCE_DIR@/doxydefs/logo_Hydra2.png
1111
OUTPUT_DIRECTORY = @CMAKE_CURRENT_BINARY_DIR@/doc
1212

1313
# Doxyfile 1.8.11
@@ -17,7 +17,6 @@ OUTPUT_DIRECTORY = @CMAKE_CURRENT_BINARY_DIR@/doc
1717
#---------------------------------------------------------------------------
1818
DOXYFILE_ENCODING = UTF-8
1919
PROJECT_NAME = Hydra
20-
#PROJECT_NUMBER = 2.0.0
2120
PROJECT_BRIEF = "A header-only templated C++ framework to perform data analysis on massively parallel platforms."
2221
CREATE_SUBDIRS = NO
2322
ALLOW_UNICODE_NAMES = NO
@@ -172,7 +171,7 @@ RECURSIVE = YES
172171
EXCLUDE =
173172
EXCLUDE_SYMLINKS = NO
174173
EXCLUDE_PATTERNS = *detail/external*
175-
EXCLUDE_SYMBOLS =
174+
EXCLUDE_SYMBOLS = *detail::*,hydra::detail::*
176175
EXAMPLE_PATH = @CMAKE_CURRENT_SOURCE_DIR@/examples
177176
EXAMPLE_PATTERNS = *
178177
EXAMPLE_RECURSIVE = YES

doxydefs/README.md

Lines changed: 60 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.1206261.svg)](https://doi.org/10.5281/zenodo.1206261)
2+
[![Documentation Status](https://readthedocs.org/projects/hydra-documentation/badge/?version=latest)](http://hydra-documentation.readthedocs.io/en/latest/?badge=latest)
3+
[![latest version](https://badge.fury.io/gh/MultithreadCorner%2FHydra.svg)](https://github.com/MultithreadCorner/Hydra/releases/latest)
4+
5+
-----------------------------
6+
7+
<img src="logo_Hydra.png" width="500">
18

29
Table of Contents
310
=================
@@ -24,46 +31,51 @@ Table of Contents
2431
What is it?
2532
-----------
2633

27-
Hydra is a C++11 compliant and header only framework designed to perform commom data analysis tasks on massively parallel platforms. Hydra provides a collection of containers and algorithms commonly used in HEP data analysis, which can deploy transparently OpenMP, CUDA and TBB enabled devices, allowing the user to re-use the same code across a large range of available multi-core CPU and accelerators. The framework design is focused on performance and precision.
34+
Hydra is a C++14 compliant and header only framework designed to perform common data analysis tasks on massively parallel platforms. Hydra provides a collection of containers and algorithms commonly used in HEP data analysis, which can deploy transparently OpenMP, CUDA and TBB enabled devices, allowing the user to re-use the same code across a large range of available multi-core CPU and accelerators. The framework design is focused on performance and precision.
2835

29-
The core algorithms follow as close as possible the implementations widely used in framworks like ROOT and libraries
36+
The core algorithms follow as close as possible the implementations widely used in frameworks like ROOT and libraries
3037
like GSL.
3138

3239
Main features
3340
-------------
3441

3542
Currently Hydra supports:
3643

37-
* Generation of phase-space Monte Carlo samples with any number of particles in the final states. Sequential decays, calculation of integrals of models
38-
over the corresponding phase-space and production of weighted and unweighted samples, which can be flat or distributed following a model provided by the user.
44+
* Generation of phase-space Monte Carlo samples with any number of particles in the final states. Sequential decays, calculation of integrals of models over the corresponding phase-space and production of weighted and unweighted samples, which can be flat or distributed following a model provided by the user.
3945
* Sampling of multidimensional pdfs.
4046
* Multidimensional maximum likelihood fits using binned and unbinned data sets.
41-
* Calculation of S-Plots, a popular technique for statistical unfolding of populations contributing to a sample.
42-
* Evaluation of multidimensional functions over heterogeneos data sets.
47+
* Multi-layered simultaneous fit of different models, over different datasets, deploying different parallelization strategies for each model.
48+
* Calculation of S-Plots, a popular technique for statistical unfolding of populations contributing to a sample.
49+
* Evaluation of multidimensional functions over heterogeneous data sets.
4350
* Numerical integration of multidimensional functions using self-adaptive Monte Carlo and quadrature methods.
44-
* Multidimensional sparse and dense histogramming of large samples.
51+
* Multidimensional sparse and dense histogramming of large samples.
52+
* Object-based interface to FFTW and CuFFT for performing Fast Fourier Transform in CPU and GPU.
53+
* FFT based one-dimensional convolution for arbitrary signal and kernel shapes.
54+
* Booststrap and real cubic spiline for datasets on CPU and GPU.
55+
* Sobol low discrepance sequences up to 3667 dimensions.
4556

46-
Hydra also provides a bunch of custom types, optimized containers and a number of algorithms and constructs to maximaze performance, avoiding unecessary usage of memory and without losing the flexibility and portability to compile and run the same code across different platforms and deployment scenarios.
57+
Hydra also provides a bunch of custom types, optimized containers and a number of algorithms and constructs to maximize performance, avoiding unnecessary usage of memory and without losing the flexibility and portability to compile and run the same code across different platforms and deployment scenarios.
4758

4859

49-
For example, just changing .cu to .cpp in any source code writen only using the Hydra and standard C++11 is enough
60+
For example, just changing .cu to .cpp in any source code written only using the Hydra and standard C++14 is enough
5061
to compile your application for OpenMP or TBB compatible devices using GCC or other compiler in a machine without a NVIDIA GPU installed.
5162

52-
In summary, by using Hydra the user can transparently typical bottle-neck calculations to a suitable parallel device and get speed-up factors ranging from dozens to hundreds.
63+
In summary, by using Hydra the user can transparently implement and dispatch typical bottle-neck calculations to a suitable parallel device and get speed-up factors ranging from dozens to hundreds.
5364

5465

5566

5667
Hydra and Thrust
5768
----------------
5869

59-
Hydra is implemented on top of the [Thrust library](https://thrust.github.io/) and relies strongly on Thrust's containers, algorithms and backend managment systems.
60-
The official version of Thrust supports tuples with maximum ten elements. In order to overcome this limitation, Hydra uses the
70+
Hydra is implemented on top of the [Thrust library](https://thrust.github.io/) and relies strongly on Thrust's containers, algorithms and backend management systems.
71+
The official version of Thrust supports tuples with maximum ten elements. In order to overcome this limitation, Hydra uses an
6172
[unofficial version, forked from the original, by Andrew Currigan and collaborators](https://github.com/andrewcorrigan/thrust-multi-permutation-iterator).
62-
This version implements variadic tuples and related classes, as well as provides some additional functionalities, which are missing in the official Thrust.
73+
This version implements variadic tuples and related classes, as well as provides some additional functionality, which are missing in the official Thrust.
74+
In order to keep Hydra uptodated with the latest bug-fixes and architetural improvements in Thrust, at each Hydra release, the official [Thrust library](https://thrust.github.io/) is patched with the Currigan's variadic tuple implementation.
6375

64-
The version of Thrust distributed with Hydra is maintained by [MultithreadCorner](https://github.com/MultithreadCorner). It is basically a fork of Currigan's repository, which was merged with the latest official release available in github (Thrust 1.8.3).
76+
So, version of Thrust distributed with Hydra is maintained by [MultithreadCorner](https://github.com/MultithreadCorner). It is basically a fork of Currigan's repository, which was merged with the latest official release available in GitHub (Thrust 1.9.7).
6577

66-
***Hydra does not depend or conflits with the official Thrust library distributed with the CUDA-SDK.***
78+
***Hydra does not depend or conflict with the official Thrust library distributed with the CUDA-SDK.***
6779

6880

6981
Supported Parallel Backends
@@ -87,12 +99,13 @@ nvcc -I/path/to/Hydra -Xcompiler -fopenmp -DHYDRA_HOST_SYSTEM=OMP -DHYDRA_DEVIC
8799
The available "host" and "device" backends can be freely combined.
88100
Two important features related to Hydra's design and the backend configuration:
89101

90-
* If CUDA backend is not used, [NVCC and the CUDA runtime](https://developer.nvidia.com/cuda-toolkit) are not necessary. The programs can be compiled with GCC, CLang or other host compiler compatible with C++11 directly.
102+
* If CUDA backend is not used, [NVCC and the CUDA runtime](https://developer.nvidia.com/cuda-toolkit) are not necessary. The programs can be compiled with GCC, Clang or other host compiler compatible with C++14 support directly.
91103
* Programs written using only Hydra, Thrust, STL and standard c++ constructs, it means programs without any raw CUDA code or calls to the CUDA runtime API, can be compiled with NVCC, to run on CUDA backends, or a suitable host compiler to run on OpenMP , TBB and CPP backends. **Just change the source file extension from .cu to .cpp, or something else the host compiler understands.**
92104

93105

94106
The Latest Version
95107
------------------
108+
The latest release can be downloaded [here](https://github.com/MultithreadCorner/Hydra/releases/latest).
96109

97110
Documentation
98111
-------------
@@ -110,7 +123,7 @@ It is also possible to browse the documentation by class, file or name using the
110123
3.[names](http://multithreadcorner.github.io/Hydra/namespacemembers.html)
111124

112125

113-
### User's Guide
126+
### User's guide
114127

115128
The Hydra User's Guide is available in the following formats:
116129

@@ -123,11 +136,12 @@ Installation and requirements
123136

124137
Hydra is a header only library, so no build process is necessary to install it.
125138
Just place the `hydra` folder and its contents where your system can find it.
126-
The library run on Linux systems and requires at least a host compiler supporting C++11. To use NVidia's GPUs, CUDA 8 or higher is required.
127-
A suite of examples demonstrating the basic features of the library are included in the `examples` folder.
139+
The framework runs on Linux systems and requires at least a host compiler supporting C++14. To use NVidia's GPUs, CUDA 9.2 or higher is required.
140+
A suite of examples demonstrating the basic features of the framework is included in the `examples` folder.
128141
All the examples are organized in .inl files, which implements the `main()` function. These files are included by .cpp and .cu
129142
files, which are compiled according with the availability of backends. TBB and CUDA backends requires the installation of the corresponding libraries and runtimes.
130143
These code samples uses, but does not requires [ROOT](https://root.cern.ch/) for graphics, and [TCLAP](http://tclap.sourceforge.net/) library for process command line arguments.
144+
Some functionality in Hydra requires Eigen, GSL, CuFFT and FFTW.
131145

132146
Examples
133147
--------
@@ -141,7 +155,7 @@ The examples are built using [CMAKE](https://cmake.org/) with the following inst
141155
6. `make`
142156

143157

144-
The compiled examples will be placed in the build/examples folder. The sub-directories are named according to the functionalities they ilustrates.
158+
The compiled examples will be placed in the build/examples folder. The sub-directories are named according to the functionalities they illustrate.
145159

146160
The examples are listed below:
147161

@@ -151,10 +165,12 @@ The examples are listed below:
151165
4. __misc__ : multiarray_container, multivector_container, variant_types
152166
5. __numerical_integration__ : adaptive_gauss_kronrod, gauss_kronrod, plain_mc, vegas
153167
6. __phase_space__ : phsp_averaging_functor, phsp_evaluating_functor, phsp_reweighting, phsp_basic, phsp_unweighting, phsp_chain, phsp_unweighting_functor
154-
7. __random__ : basic_distributions, sample_distribution
155-
8. __root_macros__ : macros to run examples in ROOT
168+
7. __phys__ : breit_wigner_plus_chebychev, breit_wigner_plus_polynomial, crystal_ball_plus_exponential, dalitz_plot, double_gaussian_plus_exponential, gaussian_plus_argus,
169+
ipatia_plus_argus, particle_mass, pseudo_experiment
170+
8. __random__ : basic_distributions, sample_distribution
171+
9. __root_macros__ : macros to run examples in ROOT
156172

157-
Each compiled example executable will have an postfix (ex.: _cuda, _omp, _tbb) to indicate the deployed device backend.
173+
Each compiled example executable will have an postfix (ex.:_cpp, _cuda, _omp, _tbb) to indicate the deployed device backend.
158174
All examples use CPP as host backend.
159175

160176

@@ -167,6 +183,24 @@ Recent publications and presentations at conferences and workshops
167183
4. [A. A. Alves Junior, *Hydra* - HSF-HEP analysis ecosystem workshop, 22-24 May 2017 Amsterdam, Netherlands](https://indico.cern.ch/event/613842/)
168184
5. [A. A. Alves Junior, *MCBooster and Hydra: two libraries for high performance computing and data analysis in massively parallel platforms* -Perspectives of GPU computing in Science September 2016, Rome, Italy](http://www.roma1.infn.it/conference/GPU2016/pdf/talks/AlvesJr.pdf)
169185

186+
How to cite Hydra
187+
-----------------
188+
189+
[1]Alves Junior, A.A. - MultithreadCorner/Hydra, (2018). doi:10.5281/zenodo.1206261
190+
191+
bibtex:
192+
```
193+
@misc{hydra,
194+
195+
author = {Alves Junior, A A},
196+
title = {MultithreadCorner/Hydra},
197+
month = March,
198+
year = 2018,
199+
doi = {10.5281/zenodo.1206261},
200+
url = {https://doi.org/10.5281/zenodo.1206261}
201+
}
202+
```
203+
170204
Licensing
171205
---------
172206

@@ -179,18 +213,18 @@ Here’s what you should do if you need help or would like to contribute:
179213

180214
1. If you need help or would like to ask a general question, subscribe and use https://groups.google.com/forum/#!forum/hydra-library-users.
181215
2. If you found a bug, use GitHub issues.
182-
3. If you have an idea, suggestion of whatever, use GitHub issues.
216+
3. If you have an idea, suggestion or whatever, use GitHub issues.
183217
4. If you want to contribute, submit a pull request https://github.com/MultithreadCorner/Hydra.
184218

185219
Author
186220
--------
187221

188-
Hydra was created and is mantained by [Antonio Augusto Alves Jr](@AAAlvesJr).
222+
Hydra was created and is maintained by [Antonio Augusto Alves Jr](https://github.com/AAAlvesJr).
189223

190224
Acknowledgement
191225
---------------
192226

193-
Hydra's development has been supported by the [National Science Foundation](http://nsf.gov/index.jsp)
227+
Initial Hydra's development was supported by the [National Science Foundation](http://nsf.gov/index.jsp)
194228
under the grant number [PHY-1414736](http://nsf.gov/awardsearch/showAward?AWD_ID=1414736).
195229
Any opinions, findings, and conclusions or recommendations expressed in this material are those of
196230
the developers and do not necessarily reflect the views of the National Science Foundation.

examples/convolution/convolute_functions.inl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,9 @@
3131
#define CONVOLUTE_FUNCTIONS_INL_
3232

3333

34+
/**
35+
* \example convolute_functions.inl
36+
*/
3437

3538
#include <iostream>
3639
#include <assert.h>

examples/convolution/cufft.inl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@
3030
#ifndef CUFFT_INL_
3131
#define CUFFT_INL_
3232

33+
/**
34+
* \example cufft.inl
35+
*/
3336

3437
#include <iostream>
3538
#include <assert.h>

examples/convolution/fft.inl

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,11 @@
2929
#ifndef FFT_INL_
3030
#define FFT_INL_
3131

32+
33+
/**
34+
* \example fft.inl
35+
*/
36+
3237
#include <iostream>
3338
#include <assert.h>
3439
#include <time.h>

examples/convolution/fit_convoluted_pdfs.inl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@
2929
#ifndef FIT_CONVOLUTED_PDFS_INL_
3030
#define FIT_CONVOLUTED_PDFS_INL_
3131

32+
/**
33+
* \example fit_convoluted_pdfs.inl
34+
*/
3235

3336
#include <iostream>
3437
#include <assert.h>

examples/fit/basic_fit_range_semantics.inl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
* \example basic_fit_range_semantics.inl
3535
*
3636
* This example shows how to generate a normal distributed dataset
37-
* and fit a hydra::Gaussian distribution.
37+
* and fit a hydra::Gaussian distribution using hydra's range semantics.
3838
*
3939
*/
4040

examples/misc/CMakeLists.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ project(examples)
55
#+++++++++++++++++++++++++++++++++
66
ADD_HYDRA_EXAMPLE(multivector_container BUILD_CUDA_TARGETS BUILD_TBB_TARGETS BUILD_OMP_TARGETS BUILD_CPP_TARGETS)
77
ADD_HYDRA_EXAMPLE(multiarray_container BUILD_CUDA_TARGETS BUILD_TBB_TARGETS BUILD_OMP_TARGETS BUILD_CPP_TARGETS)
8-
#ADD_HYDRA_EXAMPLE(caching_functors BUILD_CUDA_TARGETS BUILD_TBB_TARGETS BUILD_OMP_TARGETS BUILD_CPP_TARGETS)
98
ADD_HYDRA_EXAMPLE(range_semantics BUILD_CUDA_TARGETS BUILD_TBB_TARGETS BUILD_OMP_TARGETS BUILD_CPP_TARGETS)
109
ADD_HYDRA_EXAMPLE(zipping_iterables BUILD_CUDA_TARGETS BUILD_TBB_TARGETS BUILD_OMP_TARGETS BUILD_CPP_TARGETS)
1110
ADD_HYDRA_EXAMPLE(spiline_interpolation BUILD_CUDA_TARGETS BUILD_TBB_TARGETS BUILD_OMP_TARGETS BUILD_CPP_TARGETS)

examples/misc/caching_functors.cpp

Lines changed: 0 additions & 30 deletions
This file was deleted.

0 commit comments

Comments
 (0)