Projet

Général

Profil

Install the platform » Historique » Version 53

Arnaud Sevin, 13/02/2017 14:49

1 14 Arnaud Sevin
{{toc}}
2 1 Damien Gratadour
3 48 Arnaud Sevin
h1. Install Anaconda with python2
4 1 Damien Gratadour
5 49 Arnaud Sevin
more info: https://www.continuum.io/downloads#linux
6
7 1 Damien Gratadour
h2. Download and installation
8 49 Arnaud Sevin
9 48 Arnaud Sevin
* wget https://repo.continuum.io/archive/Anaconda2-4.2.0-Linux-x86_64.sh
10
* bash ./Anaconda2-4.2.0-Linux-x86_64.sh
11
* update your .batchrc
12
  add anaconda2/bin into the $PATH
13
14 1 Damien Gratadour
h2. add more packets
15 49 Arnaud Sevin
16 52 Arnaud Sevin
To avoid any incompatibility this python modules, it's highly recommended to use the one provided with anaconda:
17
18 48 Arnaud Sevin
* conda install gcc pyqtgraph
19
20 1 Damien Gratadour
h1. Install MAGMA
21 24 pierre kestener
22 36 Damien Gratadour
h2. Why MAGMA ?
23 1 Damien Gratadour
24
The MAGMA project aims to develop a dense linear algebra library similar to LAPACK but for heterogeneous/hybrid architectures, starting with current "Multicore+GPU" systems.
25
26 26 Arnaud Sevin
Unlike CULA, MAGMA propose a dense linear algebra library handling double for free.
27
28 1 Damien Gratadour
But MAGMA needs a LAPACK and a BLAS implementation. Actually, we try two options : openBLAS (free, easy to install) and MKL (free, need a registration but better optimized on Intel processors)
29
30 28 Arnaud Sevin
h2. Configure MAGMA with openBLAS
31 1 Damien Gratadour
32 28 Arnaud Sevin
h3. Dependencies : openblas (http://www.openblas.net)
33 1 Damien Gratadour
34 28 Arnaud Sevin
First, clone the GIT repository:
35
<pre>
36
git clone https://github.com/xianyi/OpenBLAS.git
37 1 Damien Gratadour
</pre>
38 28 Arnaud Sevin
39
compile it:
40 1 Damien Gratadour
<pre>
41 28 Arnaud Sevin
cd OpenBLAS/
42
make
43 14 Arnaud Sevin
</pre>
44 1 Damien Gratadour
45 28 Arnaud Sevin
install it:
46
<pre>
47 48 Arnaud Sevin
sudo make install PREFIX=$HOME/local/openblas
48 28 Arnaud Sevin
</pre>
49
50 1 Damien Gratadour
add to you .bashrc:
51 51 Arnaud Sevin
<pre><code class="PHP">
52 48 Arnaud Sevin
export OPENBLAS_ROOT=$HOME/local/openblas
53 51 Arnaud Sevin
</code></pre>
54 1 Damien Gratadour
55
h3. extraction
56 14 Arnaud Sevin
57 1 Damien Gratadour
MAGMA is available here : http://icl.cs.utk.edu/magma/software/index.html
58 14 Arnaud Sevin
59
extract the tgz file and go into the new directory
60 48 Arnaud Sevin
> ~$ tar xf magma-2.1.0.tar.gz
61
> ~$ cd magma-2.1.0
62 14 Arnaud Sevin
63
h3. configuration
64 1 Damien Gratadour
65 28 Arnaud Sevin
You have to create your own make.inc based on make.inc.openblas:
66 1 Damien Gratadour
67 37 Damien Gratadour
example : *please verify GPU_TARGET, OPENBLASDIR, CUDADIR*
68 1 Damien Gratadour
69 50 Arnaud Sevin
<pre><code class="PHP">
70 1 Damien Gratadour
#//////////////////////////////////////////////////////////////////////////////
71 28 Arnaud Sevin
#   -- MAGMA (version 1.7.0) --
72 1 Damien Gratadour
#      Univ. of Tennessee, Knoxville
73
#      Univ. of California, Berkeley
74
#      Univ. of Colorado, Denver
75 28 Arnaud Sevin
#      @date September 2015
76 1 Damien Gratadour
#//////////////////////////////////////////////////////////////////////////////
77
78 28 Arnaud Sevin
# GPU_TARGET contains one or more of Tesla, Fermi, or Kepler,
79
# to specify for which GPUs you want to compile MAGMA:
80
#     Tesla  - NVIDIA compute capability 1.x cards (no longer supported in CUDA 6.5)
81
#     Fermi  - NVIDIA compute capability 2.x cards
82
#     Kepler - NVIDIA compute capability 3.x cards
83
# The default is "Fermi Kepler".
84 1 Damien Gratadour
# See http://developer.nvidia.com/cuda-gpus
85 28 Arnaud Sevin
#
86
GPU_TARGET ?= Kepler
87 1 Damien Gratadour
88 28 Arnaud Sevin
# --------------------
89
# programs
90 1 Damien Gratadour
91
CC        = gcc
92 28 Arnaud Sevin
CXX       = g++
93 1 Damien Gratadour
NVCC      = nvcc
94
FORT      = gfortran
95
96
ARCH      = ar
97
ARCHFLAGS = cr
98
RANLIB    = ranlib
99
100
101 28 Arnaud Sevin
# --------------------
102
# flags
103 1 Damien Gratadour
104 28 Arnaud Sevin
# Use -fPIC to make shared (.so) and static (.a) library;
105
# can be commented out if making only static library.
106
FPIC      = -fPIC
107 14 Arnaud Sevin
108 28 Arnaud Sevin
CFLAGS    = -O3 $(FPIC) -DADD_ -Wall -fopenmp 
109
FFLAGS    = -O3 $(FPIC) -DADD_ -Wall -Wno-unused-dummy-argument
110
F90FLAGS  = -O3 $(FPIC) -DADD_ -Wall -Wno-unused-dummy-argument -x f95-cpp-input
111
NVCCFLAGS = -O3         -DADD_       -Xcompiler "$(FPIC)"
112 14 Arnaud Sevin
LDFLAGS   =     $(FPIC)              -fopenmp
113 1 Damien Gratadour
114 28 Arnaud Sevin
115 53 Arnaud Sevin
# C++11 (gcc >= 4.7) is not required, but has benefits like atomic operations
116
CXXFLAGS := $(CFLAGS) -std=c++11
117
CFLAGS   += -std=c99
118
119 28 Arnaud Sevin
# --------------------
120 17 Arnaud Sevin
# libraries
121 1 Damien Gratadour
122 28 Arnaud Sevin
# gcc with OpenBLAS (includes LAPACK)
123
LIB       = -lopenblas
124 17 Arnaud Sevin
125 28 Arnaud Sevin
LIB      += -lcublas -lcudart
126 17 Arnaud Sevin
127
128 28 Arnaud Sevin
# --------------------
129
# directories
130 17 Arnaud Sevin
131 28 Arnaud Sevin
# define library directories preferably in your environment, or here.
132 48 Arnaud Sevin
OPENBLASDIR = $(HOME)/local/openblas
133 28 Arnaud Sevin
CUDADIR = /usr/local/cuda
134
-include make.check-openblas
135
-include make.check-cuda
136 17 Arnaud Sevin
137 28 Arnaud Sevin
LIBDIR    = -L$(CUDADIR)/lib64 \
138
            -L$(OPENBLASDIR)/lib
139 17 Arnaud Sevin
140
INC       = -I$(CUDADIR)/include
141
</code></pre>
142
143
h2. Configure MAGMA with MKL
144
145
h3. extraction
146
147
To download MKL, you have to create a account here : https://registrationcenter.intel.com/RegCenter/NComForm.aspx?ProductID=1517
148
149
extract l_ccompxe_2013_sp1.1.106.tgz and go into l_ccompxe_2013_sp1.1.106
150
151
install it with ./install_GUI.sh and add IPP stuff to default choices
152
153
h3. configuration
154
155 28 Arnaud Sevin
You have to create your own make.inc based on make.inc.mkl-gcc-ilp64:
156
157 50 Arnaud Sevin
example: *please verify GPU_TARGET, MKLROOT, CUDADIR*
158 17 Arnaud Sevin
<pre><code class="PHP">
159 1 Damien Gratadour
#//////////////////////////////////////////////////////////////////////////////
160 53 Arnaud Sevin
#   -- MAGMA (version 2.1.0) --
161 17 Arnaud Sevin
#      Univ. of Tennessee, Knoxville
162 1 Damien Gratadour
#      Univ. of California, Berkeley
163
#      Univ. of Colorado, Denver
164 53 Arnaud Sevin
#      @date August 2016
165 1 Damien Gratadour
#//////////////////////////////////////////////////////////////////////////////
166
167 53 Arnaud Sevin
# GPU_TARGET contains one or more of Fermi, Kepler, or Maxwell,
168 1 Damien Gratadour
# to specify for which GPUs you want to compile MAGMA:
169 53 Arnaud Sevin
#     Fermi   - NVIDIA compute capability 2.x cards
170
#     Kepler  - NVIDIA compute capability 3.x cards
171
#     Maxwell - NVIDIA compute capability 5.x cards
172
#     Pascal  - NVIDIA compute capability 6.x cards
173 28 Arnaud Sevin
# The default is "Fermi Kepler".
174 53 Arnaud Sevin
# Note that NVIDIA no longer supports 1.x cards, as of CUDA 6.5.
175 1 Damien Gratadour
# See http://developer.nvidia.com/cuda-gpus
176
#
177 14 Arnaud Sevin
#GPU_TARGET ?= Fermi Kepler
178 28 Arnaud Sevin
179
# --------------------
180
# programs
181 20 Arnaud Sevin
182 53 Arnaud Sevin
CC        = icc
183
CXX       = icpc
184 20 Arnaud Sevin
NVCC      = nvcc
185 53 Arnaud Sevin
FORT      = ifort
186 1 Damien Gratadour
187
ARCH      = ar
188
ARCHFLAGS = cr
189
RANLIB    = ranlib
190
191
192
# --------------------
193
# flags
194
195
# Use -fPIC to make shared (.so) and static (.a) library;
196
# can be commented out if making only static library.
197
FPIC      = -fPIC
198
199 53 Arnaud Sevin
CFLAGS    = -O3 $(FPIC) -openmp -DADD_ -Wall -Wshadow -DMAGMA_WITH_MKL
200
FFLAGS    = -O3 $(FPIC)         -DADD_ -warn all -warn nounused -nogen-interfaces
201
F90FLAGS  = -O3 $(FPIC)         -DADD_ -warn all -warn nounused
202
NVCCFLAGS = -O3                 -DADD_ -Xcompiler "$(FPIC) -Wall -Wno-unused-function"
203
LDFLAGS   =     $(FPIC) -openmp
204 1 Damien Gratadour
205
# Defining MAGMA_ILP64 or MKL_ILP64 changes magma_int_t to int64_t in include/magma_types.h
206
CFLAGS    += -DMKL_ILP64
207 53 Arnaud Sevin
FFLAGS    += -integer-size 64
208
F90FLAGS  += -integer-size 64
209 1 Damien Gratadour
NVCCFLAGS += -DMKL_ILP64
210
211
# Options to do extra checks for non-standard things like variable length arrays;
212
# it is safe to disable all these
213
CFLAGS   += -pedantic -Wno-long-long
214
#CFLAGS   += -Werror  # uncomment to ensure all warnings are dealt with
215 53 Arnaud Sevin
216
# C++11 (icc >= 13) is not required, but has benefits like atomic operations
217
CXXFLAGS := $(CFLAGS) -std=c++11
218 1 Damien Gratadour
CFLAGS   += -std=c99
219
220
221
# --------------------
222
# libraries
223
224 53 Arnaud Sevin
# IMPORTANT: these link lines are for 64-bit int !!!!
225 1 Damien Gratadour
# For regular 64-bit builds using 64-bit pointers and 32-bit int,
226
# use the lp64 library, not the ilp64 library. See make.inc.mkl-gcc or make.inc.mkl-icc.
227 53 Arnaud Sevin
228 1 Damien Gratadour
# see MKL Link Advisor at http://software.intel.com/sites/products/mkl/
229 53 Arnaud Sevin
# icc with MKL 10.3, Intel OpenMP threads, 64-bit int
230
# note -DMAGMA_ILP64 or -DMKL_ILP64, and -integer-size 64 in FLAGS above
231
LIB       = -lmkl_intel_ilp64 -lmkl_intel_thread -lmkl_core -lpthread -lstdc++ -lm
232 1 Damien Gratadour
233 53 Arnaud Sevin
LIB      += -lcublas -lcusparse -lcudart
234 1 Damien Gratadour
235
236
# --------------------
237
# directories
238
239
# define library directories preferably in your environment, or here.
240
# for MKL run, e.g.: source /opt/intel/composerxe/mkl/bin/mklvars.sh intel64
241
#MKLROOT ?= /opt/intel/composerxe/mkl
242
#CUDADIR ?= /usr/local/cuda
243
-include make.check-mkl
244
-include make.check-cuda
245
246
LIBDIR    = -L$(CUDADIR)/lib64 \
247
            -L$(MKLROOT)/lib/intel64
248
249
INC       = -I$(CUDADIR)/include \
250
            -I$(MKLROOT)/include
251
</code></pre>
252
253
In this example, I use gcc but with MKL, you can use icc instead of gcc. In this case, you have to compile yorick with icc. For this, you have to change the CC flag in Make.cfg  
254
255
h2. compilation and installation
256
257
h3. compilation
258
259
just compile the shared target (and test if you want)
260
> ~$ make -j 8 shared sparse
261
262
h3. installation
263 48 Arnaud Sevin
264 1 Damien Gratadour
To install libraries and include files in a given prefix, run:
265
> ~$ make install prefix=$HOME/local/magma
266
  
267 38 Damien Gratadour
The default prefix is /usr/local/magma. You can also set prefix in make.inc.
268 1 Damien Gratadour
269 38 Damien Gratadour
h3. tuning (not tested)
270 29 Arnaud Sevin
271
For multi-GPU functions, set $MAGMA_NUM_GPUS to set the number of GPUs to use.
272
For multi-core BLAS libraries, set $OMP_NUM_THREADS or $MKL_NUM_THREADS or $VECLIB_MAXIMUM_THREADS to set the number of CPU threads, depending on your BLAS library.
273
274
h1. Install the platform
275
276
The COMPASS platform is distributed as a single bundle of CArMA and SuTrA C++ / Cuda libraries and their Python extensions NAGA & SHESHA. 
277
278
h2. Hardware requirements
279 41 Arnaud Sevin
280 29 Arnaud Sevin
The system must contain at least an x86 CPU and a CUDA capable GPU. list of compatible GPUs can be found here http://www.nvidia.com/object/cuda_gpus.html. Specific requirements apply to clusters (to be updated).
281
282
h2. Environment requirements
283
284 47 Arnaud Sevin
The system must be running a 64 bit distribution of Linux with the latest NVIDIA drivers and "CUDA toolkit":https://developer.nvidia.com/cuda-downloads. The following installation instructions are valid if the default installation paths have been selected for these components.
285 29 Arnaud Sevin
286
Additionally, to benefit from the user-oriented features of the platform, Anaconda2 should be installed (https://www.continuum.io/downloads#_unix).
287
In the last versions of compass (r608+), Yorick is no more supported.
288
289
h2. Installation process
290
291 39 Arnaud Sevin
First check out the latest version from the svn repository :
292 1 Damien Gratadour
<pre>
293 29 Arnaud Sevin
svn co https://version-lesia.obspm.fr/repos/compass/trunk compass
294
</pre>
295 39 Arnaud Sevin
then go in the newly created directory and then trunk:
296 29 Arnaud Sevin
<pre>
297
cd compass
298 50 Arnaud Sevin
</pre>
299 29 Arnaud Sevin
once there, you need to modify system variables in our .bashrc :
300
<pre><code class="PHP">
301
# CUDA default definitions
302
export CUDA_ROOT=$CUDA_ROOT #/usr/local/cuda
303 1 Damien Gratadour
export CUDA_INC_PATH=$CUDA_ROOT/include
304 29 Arnaud Sevin
export CUDA_LIB_PATH=$CUDA_ROOT/lib
305 51 Arnaud Sevin
export CUDA_LIB_PATH_64=$CUDA_ROOT/lib64
306 50 Arnaud Sevin
export PATH=$CUDA_ROOT/bin:$PATH
307 1 Damien Gratadour
export LD_LIBRARY_PATH=$CUDA_LIB_PATH_64:$CUDA_LIB_PATH:$LD_LIBRARY_PATH
308 50 Arnaud Sevin
</code></pre>
309 33 Arnaud Sevin
in this file, you also have to indicate the proper architecture of your GPU so as the compiler will generate the appropriate code.
310 50 Arnaud Sevin
<pre><code class="PHP">
311 48 Arnaud Sevin
export GENCODE="arch=compute_52,code=sm_52"
312 43 Arnaud Sevin
</code></pre>
313 29 Arnaud Sevin
and change both 52 to your architecture : for instance a Tesla Fermi will have 2.0 computing capabilities so change 52 to 20, a Kepler GPU will have 3.0 or 3.5 (K20) computing capabilities, change 52 to 30 (or 35), a Maxwell GPU have 5.2 (M6000), a Pascal have 6.0 (P100). 
314
(more informations here: https://developer.nvidia.com/cuda-gpus)
315 50 Arnaud Sevin
316 29 Arnaud Sevin
If you are using CULA, you have to specify it:
317
<pre><code class="PHP">
318
# CULA default definitions
319 1 Damien Gratadour
export CULA_ROOT= /usr/local/cula
320 29 Arnaud Sevin
export CULA_INC_PATH= $CULA_ROOT/include
321 51 Arnaud Sevin
export CULA_LIB_PATH= $CULA_ROOT/lib
322 50 Arnaud Sevin
export CULA_LIB_PATH_64= $CULA_ROOT/lib64
323 29 Arnaud Sevin
export LD_LIBRARY_PATH=$CULA_LIB_PATH_64:$CULA_LIB_PATH:$LD_LIBRARY_PATH
324
</code></pre>
325 50 Arnaud Sevin
326 29 Arnaud Sevin
If you are using MAGMA, you have to specify it:
327 1 Damien Gratadour
<pre><code class="PHP">
328
# MAGMA definitions (uncomment this line if MAGMA is installed)
329
export MAGMA_ROOT=$HOME/local/magma
330 50 Arnaud Sevin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MAGMA_ROOT/lib
331 1 Damien Gratadour
export PKG_CONFIG_PATH=$MAGMA_ROOT/lib/pkgconfig
332
</code></pre>
333
334
Last variables to define:
335
<pre><code class="PHP">
336
export COMPASS_ROOT=/path/to/compass/trunk
337 51 Arnaud Sevin
export NAGA_ROOT=$COMPASS_ROOT/naga
338 50 Arnaud Sevin
export SHESHA_ROOT=$COMPASS_ROOT/shesha
339
export LD_LIBRARY_PATH=$COMPASS_ROOT/libcarma:$COMPASS_ROOT/libsutra:$LD_LIBRARY_PATH
340
</code></pre>
341
342
At the end, you .bashrc shoud containts all those informations:
343
<pre><code class="PHP">
344
# conda default definitions
345
export CONDA_ROOT=/your/path/anaconda2
346
export PATH=$CONDA_ROOT/bin:$PATH
347
348 1 Damien Gratadour
# CUDA default definitions
349 50 Arnaud Sevin
export CUDA_INC_PATH=$CUDA_ROOT/include
350
export CUDA_LIB_PATH=$CUDA_ROOT/lib
351 51 Arnaud Sevin
export CUDA_LIB_PATH_64=$CUDA_ROOT/lib64
352 50 Arnaud Sevin
export PATH=$CUDA_ROOT/bin:$PATH
353
export LD_LIBRARY_PATH=$CUDA_LIB_PATH_64:$CUDA_LIB_PATH:$LD_LIBRARY_PATH
354
export GENCODE="arch=compute_52,code=sm_52"
355
356
# MAGMA definitions
357
export MAGMA_ROOT=$HOME/local/magma
358
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MAGMA_ROOT/lib
359 1 Damien Gratadour
export PKG_CONFIG_PATH=$MAGMA_ROOT/lib/pkgconfig
360 50 Arnaud Sevin
361
# COMPASS default definitions
362
export COMPASS_ROOT=/your/path/compass
363 51 Arnaud Sevin
export NAGA_ROOT=$COMPASS_ROOT/naga
364 50 Arnaud Sevin
export SHESHA_ROOT=$COMPASS_ROOT/shesha
365 29 Arnaud Sevin
export LD_LIBRARY_PATH=$COMPASS_ROOT/libcarma:$COMPASS_ROOT/libsutra:$LD_LIBRARY_PATH
366
</code></pre>
367
368 44 Arnaud Sevin
Once this is done, you're ready to compile the whole library:
369 29 Arnaud Sevin
<pre>
370
make clean all
371
</pre>
372
373 45 Arnaud Sevin
If you did not get any error, CArMA, SuTrA, NAGA and SHESHA are now installed on your machine. You can check that everything is working by launching a GUI to test a simulation:
374 29 Arnaud Sevin
<pre>
375 1 Damien Gratadour
ipython -i $SHESHA_ROOT/widgets/widget_ao.py
376
</pre>