Неправильный вывод для `igebs2d`, `igebr2d` (матричная трансляция) в ScaLAPACK.C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Гость
 Неправильный вывод для `igebs2d`, `igebr2d` (матричная трансляция) в ScaLAPACK.

Сообщение Гость »

Я пытаюсь написать код C++, вызывающий ScaLAPACK, и столкнулся с этой проблемой.
После извлечения проблемы до минимального примера я хочу передать общую матрицу, которая здесь — это особый случай, то есть 1x1, к сетке процесса, применяемый к каждой строке этой сетки.
Например, сетка состоит из 2 строк x 1 столбца, и процесс 1 хочет передать значение для обработки 0.
И вот пример из примерно 50 строк, показывающий этот странный результат:

Код: Выделить всё

// build with: (but version does not matter I think)
// mpicxx --std=c++17 test.cpp -L/opt/scalapack-2.2.0 -L/opt/LAPACK/3.10.0/ -L/opt/OpenBLAS/0.3.19/lib64 -lscalapack -llapack -lopenblas -lgfortran -o test.x
// run with:
// OMP_NUM_THREADS=1 LD_LIBRARY_PATH=/opt/LAPACK/3.10.0:/opt/OpenBLAS/0.3.19/lib64:/opt/MPICH/4.0.2/lib:$LD_LIBRARY_PATH mpirun -np 2 ./test.x

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include "mpi.h"
#include 
#include 
#include 

extern "C" {

void Cblacs_get(const int ictxt, const int what, int *val);
void Cblacs_pinfo(int *myrank, int *nprocs);
void Cblacs_gridinit(int *ictxt, const char *order, const int nprow, const int npcol);
void Cblacs_gridinfo(const int ictxt, int *nprow, int *npcol, int *myrow, int *mycol);
void Cblacs_gridexit(const int ictxt);
void descinit_(int *desc,
const int *m, const int *n, const int *mb, const int *nb, const int *irsrc, const int *icsrc, const int *ictxt, const int *lld, int *info);

void Cigebs2d(
const int ConTxt, const char *scope, const char *top,
const int m, const int n, const int *A, const int lda);
void Cigebr2d(
const int ConTxt, const char *scope, const char *top,
const int m, const int n, int *A, const int lda,
const int rsrc, const int csrc);

// compute LOCr or LOCc (local size of data for distributed array)
int numroc_(const int *n, const int *nb, const int *iproc, const int *isrcproc, const int *nprocs);

}

int main(int argc, char **argv) {
MPI_Init(&argc, &argv);

int myid, numprocs;
int ictxt, myrow, mycol;
int nprow = 2, npcol = 1;
int magic = 4;
Cblacs_pinfo(&myid, &numprocs);
Cblacs_get(0, 0, &ictxt);
Cblacs_gridinit(&ictxt, "Row", nprow, npcol);
Cblacs_gridinfo(ictxt, &nprow, &npcol, &myrow, &mycol);
std::this_thread::sleep_for(std::chrono::seconds(magic-myid));
std::cout 

Подробнее здесь: [url]https://stackoverflow.com/questions/78296430/wrong-output-for-igebs2d-igebr2d-matrix-broadcast-in-scalapack[/url]
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Параметр для pdlapiv или pdlapv2 в ScaLAPACK
    Гость » » в форуме C++
    0 Ответы
    14 Просмотры
    Последнее сообщение Гость
  • Наименьшие квадраты с использованием scalaPACK
    Anonymous » » в форуме C++
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • 2D-матричная арифметическая операция C++ с использованием std::transform?
    Anonymous » » в форуме C++
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Точечный продукт векторов, матричная инверсия, расчет собственных значений в повышении
    Anonymous » » в форуме C++
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • Как создать пользовательский Gridview (например, матричная структура) в Android
    Anonymous » » в форуме Android
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C++»