The LAPACK forum has moved to https://github.com/Reference-LAPACK/lapack/discussions.

scalapack block distribution

Open discussion regarding features, bugs, issues, vendors, etc.

scalapack block distribution

Postby utilisateur38 » Mon Apr 26, 2010 11:12 am

Hello everyone,
I want to parallelize the solution to a tridiagonal system A * X = B with the ScaLAPACK library
using the "PDGTSV" function.

For that we must then pass to each process a part of vectors 'dl','du' and 'd' of the global matrix A.
(The general tridiagonal matrix A is stored in tridiagonal storage mode in dl, d, and du.)

In my code I'm constrain to pass a number of elements to the process of rank (0) and rank (nb_procs-1) upper than those of other processes.
But I think this is not possible using ScaLAPACK.

For example if:
d=(1, 5 , -6 , 6, 8, 8 , 9, -14 , 5 , 0 , 3.5 , 11 , 66 , -4 , 7 , 9, 10, 33)
And I have:
process 0 has access to the part (1, 5, -6, 6, 8) ----> 5 elements
Process 1 has access to the part (8, 9, -14, 5) ----> 4 elements
Process 2 has access to the part (0, 3.5, 11, 66) ----> 4 elements
Process 3 has access to the part (-4, 7, 9, 10, 33): ----> 5 elements

So my question is how we can distribute this vector in this way?

If I use blocks of size 5 the processes of rank 1 and 2 have access only four elements (they do not have access to the fifth one)!
If I use blocks of size 4 processes of rank 0 and 3 must contain four elements and I do not know how to do to distribute teh more elements.

In ScaLAPACK, the block size is fixed once and for all and has the same value for all processes.

So if someone was in the same situation as me or know a solution for my problem, his help will be very useful to me...
Thank you!!!
utilisateur38
 
Posts: 1
Joined: Sun Apr 25, 2010 2:05 am

Return to User Discussion

Who is online

Users browsing this forum: No registered users and 7 guests