LINUX.ORG.RU

ATLAS+Octave

 , , ,


0

2

Уважаемые Linux-гении! Очень прошу, помогите разобраться с установкой и запуском системы ATLAS и Octave. Я по образованию химик, поэтому не судите строго! Я пытаюсь прорешивать термодинамические состояния кристаллических систем с помощью различных программных пакетов, которые работают под Linux (конкретно я использую Ubuntu), которые используют Octave как математический аппарат. Но появилась теперь необходимость раскидать Octave на несколько ядер. Через ваш сайт узнал про ATLAS, сделал все по инструкции, но сомневаюсь правильно ли получилось. В итоге не могу понять как им пользоваться, как и какие библиотеки надо/не надо загружать, как запускать. Буду очень благодарен за любую помощь!


Если я правильно понимаю, то речь идёт о сборке octave с ATLAS, которая не входит в стандартную поставку Ubuntu?

Что именно вы делали и в каком месте у вас это не получилось?

P.S. Попутно постарайтесь сформулировать для чего вам это нужно. В каком месте вам не хватает скорости вычислений. Может быть достаточно стандартной сборки Octave?

P.P.S. Опыта работы ни Octave ни с Atlac у меня нет. Задаю вопросы общего характера.

Evgueni ★★★★★
()
Последнее исправление: Evgueni (всего исправлений: 2)

http://stackoverflow.com/questions/11889118/get-gnu-octave-to-work-with-a-multicore-processor-multithreading

I ran the following octave core before and after ATLAS install:

tic
bigMatrixA = rand(3000000,80);
bigMatrixB = rand(80,30);
bigMatrixC = bigMatrixA * bigMatrixB;
toc
disp("done");

The matrix multiplication goes much faster using multiple processors, which was 3 times faster than before with single core:

Without Atlas: Elapsed time is 3.22819 seconds.
With Atlas:    Elapsed time is 0.529 seconds.

так можно проверить

anonymous
()

если по проще, можно воспользоваться системным монитором (gnome-system-monitor, top, htop) и наблюдать за загрузкой процессоров. если все процессоры заняты равномерно, значит хорошо. без ATLAS-а будет загружен только один процессор.

anonymous
()
Ответ на: комментарий от anonymous

Спасибо за ваш отклик на проблему! Буду отвечать поочереди. 1. Да, вы правильно меня поняли. Я хочу собрать ATLAS с Octave для распределения расчетов октава на несколько ядер (параллелизация). Дело в том, что без ATLASA расчеты идут, но они занимают 3-4 недели. Это очень долго. Поэтому принял решение, описанное ранее. В идеале было бы конечно взять Matlab, у которого не только есть собственная дополнительная функция параллелизации, но и бесплатное приложение MPIrun. Октав же ни с тем ни с другим не работает. Я скачал Атлас, прочитал инструкцию, сделал как там написано, а именно:

bunzip2 -c atlas3.10.x.tar.bz2 | tar xfm - #create SRCdir

mv ATLAS ATLAS3.10.x #get unique dir name

cd ATLAS3.10.x #enter SRCdir

mkdir Linux_C2D64SSE3 #create BLDdir

cd Linux_C2D64SSE3 #enter BLDdir

../configure -b 64 -D c -DPentiumCPS=2400 \ #configure command

--prefix=/home/whaley/lib/atlas \ #install dir --with-netlib-lapack-tarfile=/home/whaley/dload/lapack-3.4.1.tgz

make build # tune & build lib

make check # sanity check correct answer

make ptcheck # sanity check parallel

make time # check if lib is fast

make install # copy libs to install dir

Сам октав скачал через Ubuntu store. Я боюсь, что что-то не правильно сделал с библиотеками (c пункта #install dir). Скачал и библиотеки Лапака, но как все их вместе правильно собрать и заставить работать в октаве понять не могу. P.S. Самим октавом как оболочкой я не пользуюсь, т.к. не математик. Я использую чисто его ядро, вызывая его из bash командой «octave<USPEX.m>log &».

2. Я тоже видел этот сайт, я как раз по нему и делал. После сборки время составило 4.7362 seconds. К сожалению, до сборки замерить не додумался. Как можно проверить по другому? Может быть есть расчет который его затормозит хотя бы на секунд 15, чтобы я успел посмотреть нагрузку?

GIROM
() автор топика
Ответ на: комментарий от GIROM

Может быть есть расчет который его затормозит хотя бы на секунд 15, чтобы я успел посмотреть нагрузку?

да нет ничего проще, увеличить размеры матриц и все.

tic
bigMatrixA = rand(3000000,800);
bigMatrixB = rand(800,30);
bigMatrixC = bigMatrixA * bigMatrixB;
toc
disp("done");

anonymous
()
Ответ на: комментарий от GIROM

Сам октав скачал через Ubuntu store

то есть он просто установлен как пакет, а не собран из исходников? тогда на него не действует ATLAS

anonymous
()
Ответ на: комментарий от GIROM

и ещё, про читаемость кода. если сделать вот так:

[code]
bunzip2 -c atlas3.10.x.tar.bz2 | tar xfm - #create SRCdir
mv ATLAS ATLAS3.10.x #get unique dir name
[/code]
то получится вот так:
bunzip2 -c atlas3.10.x.tar.bz2 | tar xfm - #create SRCdir
mv ATLAS ATLAS3.10.x #get unique dir name

anonymous
()
Ответ на: комментарий от anonymous

Извиняюсь за некорректное написание! Сделал как вы предложили. Выдал ошибку:

>>> tic
bigMatrixA = rand(300000,8000);
bigMatrixB = rand(800,300);
bigMatrixC = bigMatrixA * bigMatrixB;
toc
disp("done");
>>>error: memory exhausted or requested size too large for range of Octave's in
dex type -- trying to return to prompt
>>>Elapsed time is 12.3676 seconds.
>>>done

GIROM
() автор топика
Ответ на: комментарий от GIROM

Запустил вот такую вещь:

>>> tic
bigMatrixA = rand(3000,8000);
bigMatrixB = rand(8000,3000);
bigMatrixC = bigMatrixA*bigMatrixB;
toc
disp("done");
>>>Elapsed time is 19.1001 seconds.
>>>done
Не понятно... Во-первых я наконец увидел в htop как грузится все 4 ядра!!! Походу ATLAS всё таки работает. Но по факту он считал секунд 7, а написал, как это видно, 19.1. Почему? Когда тоже самое запустил второй раз, выдал:
>>> tic
bigMatrixA = rand(3000,8000);
bigMatrixB = rand(8000,3000);
bigMatrixC = bigMatrixA*bigMatrixB;
toc
disp("done");
>>>Elapsed time is 12.7718 seconds.
>>>done
На большую размерность ругается:(

GIROM
() автор топика
Ответ на: комментарий от GIROM

И по поводу сборки. Советуете удалить и собрать с нуля самому? А где его тогда достать? И как собирать? А если я так понимаю его надо будет компилировать, то чем?

GIROM
() автор топика
Ответ на: комментарий от GIROM

по той же ссылке есть указание, где можно взять исходники октавы:

I used these two links: ftp://ftp.gnu.org/gnu/octave/

если списать архив octave-3.6.4.tar.gz, то внутри будет файл INSTALL. это руководство к установке. цитата из этого файла:

Briefly, the shell commands `./configure; make; make install' should configure, build, and install this package.

ещё можно заглянуть в файл INSTALL.OCTAVE.

больше мне про сборку Octave нечего рассказать. я только запускал ./configure

А если я так понимаю его надо будет компилировать, то чем?

да. можно gcc скажем, потом можно попробовать clang-ом собрать.

цитата из файла: INSTALL.OCTAVE.

C++, C, and Fortran compilers

The Octave sources are primarily written in C++, but some portions are also written in C and Fortran. The Octave sources are intended to be portable. Recent versions of the GNU compiler collection (GCC) should work (`http://gcc.gnu.org'). If you use GCC, you should avoid mixing versions. For example, be sure that you are not using the obsolete `g77' Fortran compiler with modern versions of `gcc' and `g++

остальное по мелочи попросит при конфигурировании.

anonymous
()
Ответ на: комментарий от anonymous

Ясно. В принципе у меня уже установлен Intel Fortran 95, поэтому попробую им собрать. Как соберу, отпишусь:)

А что по поводу времени расчета? Почему то, которое он сам пишет, больше фактического?

GIROM
() автор топика
Ответ на: комментарий от GIROM

попробуйте запустить у себя следующий скрипт

#!/bin/bash -x

for i in 1 2; do

time octave -q << EOF
tic;
bigMatrixA = rand(3000,8000);
bigMatrixB = rand(8000,3000);
bigMatrixC = bigMatrixA*bigMatrixB;
toc
exit
EOF

time octave -q << EOF
exit
EOF

done
у меня Octave без ATLAS, двухядерный процессор, результаты такие:
$ ./run.sh
+ for i in 1 2
+ octave -q
Elapsed time is 24.7306 seconds.


real	0m25.240s
user	0m24.670s
sys	0m0.553s
+ octave -q


real	0m0.416s
user	0m0.359s
sys	0m0.055s
+ for i in 1 2
+ octave -q
Elapsed time is 24.6333 seconds.


real	0m25.105s
user	0m24.544s
sys	0m0.546s
+ octave -q


real	0m0.428s
user	0m0.368s
sys	0m0.055s
загрузка только одного ядра происходит. и время выполнения получается равным времени почитанному в Octave. а если у вас загрузка нескольких ядер происходит, то значит время в функции tic/toc рассчитывается как сумма времени работы каждого из процессоров, а не время выполнения кода.

anonymous
()
Ответ на: комментарий от anonymous

Я начал собирать октав. Он попросил библиотеки prce, я скачал установил. Теперь он просит библиотеки BLAS и LAPACKE. Я их скачал, но не пойму как устанавливать...Библиотеку BLAS я вроде скомпилировал, потом сказано что нужно отдельно скомпилировать еще библиотеку LAPACKE, но при компиляции он выдает ошибку:

icc -c -O3 -I ../include -o lapacke_cbbcsd.o lapacke_cbbcsd.c
make[1]: icc: Command not found
make[1]: *** [lapacke_cbbcsd.o] Error 127
make[1]: Leaving directory `/home/k101/Downloads/lapack-3.4.2/lapacke/src'
make: *** [lapacke] Error 2
Подскажите пожалуйста что делать?..

GIROM
() автор топика
Ответ на: комментарий от GIROM

icc: Command not found

найти эту команду и устранить.

а расскажите, откуда, что списано. какая команда для запуска сборки использовалась.

anonymous
()
Ответ на: комментарий от anonymous

Для сборки использую ifort, BLAS им собрался, а вот lapacke не хочет. При разархивации скаченного пакета там есть README: LAPACK INSTALLATION:

- LAPACK can be installed with make. Configuration haev to be set in the make.inc file. A make.inc.example for a Linux mahcine running GNU compilers is given in the main directory. Some specific make.inc are also available in the INSTALL directory

- LAPACK includes also the CMAKE build. You will need to have CMAKE installed on your machine (CMAKE is available at http://www.cmake.org/). CMAKE will allow an easy installation on a Windows Machine.

На сколько я понял нужно было выбрать подходящий под ifort make.inc, который находился в папке INSTALL. Я выбрал, написал make, пошла компиляция, но остановилась с ошибкой, ссылаясь на отсутствие библиотек двух. Тогда я пошел в папку BLAS, где я так понял создается одна из них. У него README нет, но собрал без проблем также с помощью make. После вышел из этой папки и пошел в папку lapacke, где я как понял создается вторая библиотека. В его README написано:

Installation

The reference code for the C interface to LAPACK is built similarly to the Basic Linear Algebra Subprograms (BLAS) and LAPACK. The build system produces a static binary lapacke.a.

You need to provide a make.inc file in the top directory that defines the compiler, compiler flags, names for binaries to be created/linked to. You may choose the appropriate LP64/ILP64 model, convenient complex type style, LAPACKE name pattern, and/or redefine system malloc/free in make.inc. Several examples of make.inc are provided.

After setting up the make.inc, you can build C interface to LAPACK by typing

make lapacke

-------------------------------------------------------------- Handling Complex Types --------------------------------------------------------------

The interface uses complex types lapack_complex_float/lapack_complex_double. You have several options to define them: 1) C99 complex types (default):

#define lapack_complex_float float _Complex

#define lapack_complex_double double _Complex

2) C structure option (set by enabling in the configuration file):

-DHAVE_LAPACK_CONFIG_H -DLAPACK_COMPLEX_STRUCTURE

typedef struct { float real, imag; } _lapack_complex_float;

typedef struct { double real, imag; } _lapack_complex_double;

#define lapack_complex_float _lapack_complex_float

#define lapack_complex_double _lapack_complex_double

3) C++ complex types (set by enabling in the configuration file):

-DHAVE_LAPACK_CONFIG_H -DLAPACK_COMPLEX_CPP

#define lapack_complex_float std::complex<float>

#define lapack_complex_double std::complex<double>

You have to compile the interface with C++ compiler with C++ types.

4) Custom complex types:

-DLAPACK_COMPLEX_CUSTOM

To use custom complex types, you need to:

- Define lapack_complex_float/lapack_complex_double types on your own.

- Optionally define lapack_make_complex_float/lapack_make_complex_double_real functions if you want to build the testing suite supplied. Use these functions for the testing system. Their purpose is to make a complex value of a real part re, imaginary part im. The prototypes are as follows:

lapack_complex_float lapack_make_complex_float( float re, float im );

lapack_complex_double lapack_make_complex_double( double re, double im );

-------------------------------------------------------------- Choosing ILP64 Data Model --------------------------------------------------------------

To choose ILP64 data model (set by enabling in the configuration file), use the following options:

-DHAVE_LAPACK_CONFIG_H -DLAPACK_ILP64

-------------------------------------------------------------- Using Predicate Functions --------------------------------------------------------------

The functions

lapacke_?gees/lapacke_?gees_work

lapacke_?geesx/lapacke_?geesx_work

lapacke_?geev/lapacke_?geev_work

lapacke_?geevx/lapacke_?geevx_work

require the pointer to a predicate function as an argument of a predefined type such as:

typedef lapack_logical (*LAPACK_S_SELECT2) ( const float*, const float* );

The purpose and format of these predicate functions are described in the LAPACK documentation. This interface passes the pointer to the corresponding LAPACK routine as it is.

Be cautious with return values of the logical type if you link against LAPACK compiled with Fortran compiler. Whereas all non-zero values are treated as TRUE generally, some Fortran compilers may rely on a certain TRUE value, so you will have to use the same TRUE value in the predicate function to be consistent with LAPACK implementation.

-------------------------------------------------------------- Implementation Details --------------------------------------------------------------

The current C interface implementation consists of wrappers to LAPACK routines. The row-major matrices are transposed on entry to and on exit from the LAPACK routine, if needed. Top-level interfaces additionally allocate/deallocate working space on entry to and on exit from the LAPACK routine.

Because of possible additional transpositions, a routine called with this interface may require more memory space and run slower than the corresponding LAPACK routine.

Попытался и здесь с помощью make сделать, выдает ошибку:

k101@k101-System-Product-Name:~$ cd ./Downloads/lapack-3.4.2/lapacke/
k101@k101-System-Product-Name:~/Downloads/lapack-3.4.2/lapacke$ make
cd include && cp lapacke_mangling_with_flags.h lapacke_mangling.h
cd src && make
make[1]: Entering directory `/home/k101/Downloads/lapack-3.4.2/lapacke/src'
icc -c -O3 -I ../include -o lapacke_cbbcsd.o lapacke_cbbcsd.c
make[1]: icc: Command not found
make[1]: *** [lapacke_cbbcsd.o] Error 127
make[1]: Leaving directory `/home/k101/Downloads/lapack-3.4.2/lapacke/src'
make: *** [lapacke] Error 2
Вот...

GIROM
() автор топика
Ответ на: комментарий от GIROM

А разве ATLAS не предоставляет BLAS и LAPACK?

http://ubuntuguide.org/wiki/Ubuntu_Raring_Science_and_Technology#Octave

Вроде всё должно работать и так (хотя сам пакет ATLAS вообще-то рекомендуется собирать на целевой машине).

greenman ★★★★★
()
Последнее исправление: greenman (всего исправлений: 1)
Ответ на: комментарий от GIROM

Ещё любопытное — OpenBLAS: better than ATLAS

http://www.stat.cmu.edu/~nmv/2013/07/09/for-faster-r-use-openblas-instead-bet...

In this post, I’ll show you how to install ATLAS and OpenBLAS, demonstrate how you can switch between them...

В общем, в Ubuntu софт не надо компилировать (в 99% случаев).

greenman ★★★★★
()
Последнее исправление: greenman (всего исправлений: 2)
Ответ на: комментарий от greenman

А OpenBLAS также, как и ATLAS, подключает библиотеки lapack? Я так понимаю без них octave не соберется..

GIROM
() автор топика
Ответ на: комментарий от GIROM

Кстати, на счет ATLAS. Пытаюсь его установить заново. Я удалил все заранее собранные бинарники и папки, а также скачанный и установленный из Ubuntu store Octave. Начал собирать Атлас, но мне выдается ошибка:

k101@k101-System-Product-Name:~/ATLAS3.11.17/BLDdir$ ./xconfig 

OS configured as Linux (1)

Assembly configured as GAS_x8664 (2)

Vector ISA Extension configured as  AVX (5,480)

Architecture configured as  Corei2 (27)

Clock rate configured as 3300Mhz

Maximum number of threads configured as  4
Parallel make command configured as '$(MAKE) -j 4'
Cannot detect CPU throttling.
rm -f config1.out
make atlas_run atldir=/home/k101/ATLAS3.11.17/BLDdir exe=xprobe_comp redir=config1.out \
                args="-v 0 -o atlconf.txt -O 1 -A 27 -Si nof77 0 -V 480   -b 64 -d b /home/k101/ATLAS3.11.17/BLDdir"
make[1]: Entering directory `/home/k101/ATLAS3.11.17/BLDdir'
cd /home/k101/ATLAS3.11.17/BLDdir ; ./xprobe_comp -v 0 -o atlconf.txt -O 1 -A 27 -Si nof77 0 -V 480   -b 64 -d b /home/k101/ATLAS3.11.17/BLDdir > config1.out
sh: 2: Syntax error: EOF in backquote substitution
sh: 2: Syntax error: EOF in backquote substitution
sh: 2: Syntax error: EOF in backquote substitution
make[1]: Leaving directory `/home/k101/ATLAS3.11.17/BLDdir'
Как думаете, что может быть такое?..

GIROM
() автор топика
Ответ на: комментарий от GIROM

Вы пробовали бы сделать всё так, как написано в ссылке — поставить пакеты «правильным» способом

$ sudo apt-get install libopenblas-base libatlas3gf-base
затем выбрать библиотеку
$ sudo update-alternatives --config libblas.so.3gf
и погонять какой-нибудь тест.

Самосборные программы и пакеты не нужны, они могут только мешать.

greenman ★★★★★
()
Ответ на: комментарий от greenman

Пропустил — лапаковскую либу тоже надо конфигурировать.

$ sudo update-alternatives --config liblapack.so.3gf
В общем, внимательно следуйте тексту по ссылке. И не смотрите, что там идёт речь о R.

greenman ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.