Делимся опытом

warning: Creating default object from empty value in /wcmc/hpc/ani/modules/taxonomy/taxonomy.pages.inc on line 33.

BLAS и LAPACK в ESSL

Здравствуйте!
Не могу понять, установлены ли в системе библиотеки blas/lapack? Неужели нет?
Про blas я читал, что его функциональность покрывает essl.
Вот здесь http://www.hpcx.ac.uk/support/documentation/UserGuide/HPCxuser/Libraries...
есть фраза 'When using BLAS do not link with -lblas! .. Instead use -lessl.' essl я где-то в системе видел.
А как на счет lapack?

С уважением, Олег

BG/P: внутренняя реализация функции MPIX_Cart_comm_create()

Исходный текст реализации функции MPIX_Cart_comm_create():
http://dcmf.anl-external.org/docs/mpi:dcmfd/mpix_8c_source.html

1. Получить "физические" координаты процесса в трехмерном торе
2. На их основе вычислить будущий ранк процесса во вновь создаваемом декартовом коммуникаторе
3. Создать вспомогательный коммуникатор, в котором каждый процесс будет иметь вычисленный в пункте 2 ранк
4. Из вспомогательного коммуникатора создать декартов коммуникатор, отражающий "физические" размеры тора, запретив перенумерацию процессов.

Комментарии

1.
Для получения "физических" координат процесса и прочих "физических" характеристик применяется функция DCMF_Hardware().

2.
Так как нам нужно создать не просто виртуальную топологию, а такую виртуальную топологию, которая отражает "железо", на котором работает программа, требуется, чтобы "физические" координаты и прочие "физические" характеристики (размерность, замкнутость) совпадали со своими виртуальными аналогами.

В соответствии с документацией по MPI, в декартовом коммуникаторе процессы нумеруются "по строкам", т.е. последний индекс меняется быстрее всех. С учетом этого и порядка размерностей вычисляется будущий ранк процесса. В текущей версии будущий ранк будет таким, как если бы при запуске программы применялось размещение типа XYZT.

3.
Для перенумерации процессов из коммуникатора MPI_COMM_WORLD применяется функция MPI_Comm_split() с одним-единственным цветом.

4.
На основе этого нового коммуникатора и "физических" характеристик с помощью MPI_Cart_create() и создается требуемый декартов коммуникатор, отражающий архитектуру. Функции MPI_Cart_create() запрещается перенумеровывать процессы, поэтому "виртуальные" декартовы координаты процесса будут совпадать с "физическими".

"Быстрый" MPI для production-кода

Возможно материал для FAQ, при беглом просмотре сайта его не нашел. Если это уже есть -- стирайте.

Для наилучшей производительности рабочего кода нужно использовать MPI-реализацию из папки /bgsys/drivers/ppcfloor/comm/fast/, т.е. fast/bin/mpixlc, fast/bin/mpixlf. Делать это следует только при выходе на отлаженный код. "Using these shaves roughly a microsecond off of most communications calls (which can be 25% improvement)"

Поддержка файловых операций с большими файлами на BG/P

Уважаемые администраторы, если посчитаете нужным -- перенесите в какой-нибудь раздел FAQ.

По умолчанию, функции из fcntl.h на вычислительных узлах (да и на фронт-энде тоже) BlueGene/P используют 32-битные переменные, соответственно вызовы fcntl(), stat(), open(),creat() и другие для файлов размером > 2 Гб будут выдавать ошибки. Чтобы активировать поддержку больших файлов, необходимо компилировать исходный код с ключами -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64

Последовательная запись в файл

Подскажите, пожалуйста, как организовать последовательную запись в файл для N процессов? Следующий кусок кода на 64 узлах Blue Gene/P работает нормально, а на 128 узлах происходит что-то не то. Может быть это как-то связано с работой с увеличением количества i/o потоков?
               if(rank==0)
               {
               remove(name);
               }
               for(i=0;i<size;i++)
               {
                       if(rank==i)
                       {
                       output=fopen(name,"ab");
//                        fseek(output,sizeof(double)*rank*total,SEEK_SET);
                       fwrite((void *)ion5D1,sizeof(double),total,output);
                       fflush(output);
                       fclose(output);
                       }
                       MPI_Barrier(MPI_COMM_WORLD);
               }
Syndicate content