Projet

Général

Profil

Install the platform » Historique » Version 48

Arnaud Sevin, 13/02/2017 14:29

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