![]() |
(git:858b7a1)
|
#include <assert.h>
#include <math.h>
#include <omp.h>
#include <stdbool.h>
#include <stddef.h>
#include <stdlib.h>
#include <string.h>
#include "dbm_hyperparams.h"
#include "dbm_matrix.h"
Go to the source code of this file.
Functions | |
void | dbm_create (dbm_matrix_t **matrix_out, dbm_distribution_t *dist, const char name[], const int nrows, const int ncols, const int row_sizes[nrows], const int col_sizes[ncols]) |
Creates a new matrix. | |
void | dbm_release (dbm_matrix_t *matrix) |
Releases a matrix and all its ressources. | |
void | dbm_copy (dbm_matrix_t *matrix_a, const dbm_matrix_t *matrix_b) |
Copies content of matrix_b into matrix_a. Matrices must have the same row/col block sizes and distribution. | |
void | dbm_redistribute (const dbm_matrix_t *matrix, dbm_matrix_t *redist) |
Copies content of matrix_b into matrix_a. Matrices may have different distributions. | |
void | dbm_get_block_p (dbm_matrix_t *matrix, const int row, const int col, double **block, int *row_size, int *col_size) |
Looks up a block from given matrics. This routine is thread-safe. If the block is not found then a null pointer is returned. | |
void | dbm_put_block (dbm_matrix_t *matrix, const int row, const int col, const bool summation, const double *block) |
Adds a block to given matrix. This routine is thread-safe. If block already exist then it gets overwritten (or summed). | |
void | dbm_clear (dbm_matrix_t *matrix) |
Remove all blocks from matrix, but does not release underlying memory. | |
void | dbm_filter (dbm_matrix_t *matrix, const double eps) |
Removes all blocks from the matrix whose norm is below the threshold. Blocks of size zero are always kept. | |
void | dbm_reserve_blocks (dbm_matrix_t *matrix, const int nblocks, const int rows[], const int cols[]) |
Adds list of blocks efficiently. The blocks will be filled with zeros. This routine must always be called within an OpenMP parallel region. | |
void | dbm_scale (dbm_matrix_t *matrix, const double alpha) |
Multiplies all entries in the given matrix by the given factor alpha. | |
void | dbm_zero (dbm_matrix_t *matrix) |
Sets all blocks in the given matrix to zero. | |
void | dbm_add (dbm_matrix_t *matrix_a, const dbm_matrix_t *matrix_b) |
Adds matrix_b to matrix_a. | |
void | dbm_iterator_start (dbm_iterator_t **iter_out, const dbm_matrix_t *matrix) |
Creates an iterator for the blocks of the given matrix. The iteration order is not stable. This routine must always be called within an OpenMP parallel region. | |
int | dbm_iterator_num_blocks (const dbm_iterator_t *iter) |
Returns number of blocks the iterator will provide to calling thread. | |
bool | dbm_iterator_blocks_left (const dbm_iterator_t *iter) |
Tests whether the given iterator has any block left. | |
void | dbm_iterator_next_block (dbm_iterator_t *iter, int *row, int *col, double **block, int *row_size, int *col_size) |
Returns the next block from the given iterator. | |
void | dbm_iterator_stop (dbm_iterator_t *iter) |
Releases the given iterator. | |
static double | kahan_sum (double value, double *accumulator, double *compensation) |
Private routine to accumulate using Kahan's summation. | |
double | dbm_checksum (const dbm_matrix_t *matrix) |
Computes a checksum of the given matrix. | |
double | dbm_maxabs (const dbm_matrix_t *matrix) |
Returns the largest absolute value of all matrix elements. | |
const char * | dbm_get_name (const dbm_matrix_t *matrix) |
Returns the name of the matrix of the given matrix. | |
int | dbm_get_nze (const dbm_matrix_t *matrix) |
Returns the number of local Non-Zero Elements of the given matrix. | |
int | dbm_get_num_blocks (const dbm_matrix_t *matrix) |
Returns the number of local blocks of the given matrix. | |
void | dbm_get_row_sizes (const dbm_matrix_t *matrix, int *nrows, const int **row_sizes) |
Returns the row block sizes of the given matrix. | |
void | dbm_get_col_sizes (const dbm_matrix_t *matrix, int *ncols, const int **col_sizes) |
Returns the column block sizes of the given matrix. | |
void | dbm_get_local_rows (const dbm_matrix_t *matrix, int *nlocal_rows, const int **local_rows) |
Returns the local row block sizes of the given matrix. | |
void | dbm_get_local_cols (const dbm_matrix_t *matrix, int *nlocal_cols, const int **local_cols) |
Returns the local column block sizes of the given matrix. | |
int | dbm_get_stored_coordinates (const dbm_matrix_t *matrix, const int row, const int col) |
Returns the MPI rank on which the given block should be stored. | |
const dbm_distribution_t * | dbm_get_distribution (const dbm_matrix_t *matrix) |
Returns the distribution of the given matrix. | |
void dbm_create | ( | dbm_matrix_t ** | matrix_out, |
dbm_distribution_t * | dist, | ||
const char | name[], | ||
const int | nrows, | ||
const int | ncols, | ||
const int | row_sizes[nrows], | ||
const int | col_sizes[ncols] | ||
) |
Creates a new matrix.
Definition at line 23 of file dbm_matrix.c.
void dbm_release | ( | dbm_matrix_t * | matrix | ) |
Releases a matrix and all its ressources.
Definition at line 73 of file dbm_matrix.c.
void dbm_copy | ( | dbm_matrix_t * | matrix_a, |
const dbm_matrix_t * | matrix_b | ||
) |
Copies content of matrix_b into matrix_a. Matrices must have the same row/col block sizes and distribution.
Definition at line 91 of file dbm_matrix.c.
void dbm_redistribute | ( | const dbm_matrix_t * | matrix, |
dbm_matrix_t * | redist | ||
) |
Copies content of matrix_b into matrix_a. Matrices may have different distributions.
Definition at line 116 of file dbm_matrix.c.
void dbm_get_block_p | ( | dbm_matrix_t * | matrix, |
const int | row, | ||
const int | col, | ||
double ** | block, | ||
int * | row_size, | ||
int * | col_size | ||
) |
Looks up a block from given matrics. This routine is thread-safe. If the block is not found then a null pointer is returned.
Definition at line 214 of file dbm_matrix.c.
void dbm_put_block | ( | dbm_matrix_t * | matrix, |
const int | row, | ||
const int | col, | ||
const bool | summation, | ||
const double * | block | ||
) |
Adds a block to given matrix. This routine is thread-safe. If block already exist then it gets overwritten (or summed).
Definition at line 236 of file dbm_matrix.c.
void dbm_clear | ( | dbm_matrix_t * | matrix | ) |
Remove all blocks from matrix, but does not release underlying memory.
Definition at line 266 of file dbm_matrix.c.
void dbm_filter | ( | dbm_matrix_t * | matrix, |
const double | eps | ||
) |
Removes all blocks from the matrix whose norm is below the threshold. Blocks of size zero are always kept.
Definition at line 285 of file dbm_matrix.c.
void dbm_reserve_blocks | ( | dbm_matrix_t * | matrix, |
const int | nblocks, | ||
const int | rows[], | ||
const int | cols[] | ||
) |
Adds list of blocks efficiently. The blocks will be filled with zeros. This routine must always be called within an OpenMP parallel region.
Definition at line 339 of file dbm_matrix.c.
void dbm_scale | ( | dbm_matrix_t * | matrix, |
const double | alpha | ||
) |
Multiplies all entries in the given matrix by the given factor alpha.
Definition at line 370 of file dbm_matrix.c.
void dbm_zero | ( | dbm_matrix_t * | matrix | ) |
Sets all blocks in the given matrix to zero.
Definition at line 393 of file dbm_matrix.c.
void dbm_add | ( | dbm_matrix_t * | matrix_a, |
const dbm_matrix_t * | matrix_b | ||
) |
Adds matrix_b to matrix_a.
Definition at line 409 of file dbm_matrix.c.
void dbm_iterator_start | ( | dbm_iterator_t ** | iter_out, |
const dbm_matrix_t * | matrix | ||
) |
Creates an iterator for the blocks of the given matrix. The iteration order is not stable. This routine must always be called within an OpenMP parallel region.
Definition at line 442 of file dbm_matrix.c.
int dbm_iterator_num_blocks | ( | const dbm_iterator_t * | iter | ) |
Returns number of blocks the iterator will provide to calling thread.
Definition at line 462 of file dbm_matrix.c.
bool dbm_iterator_blocks_left | ( | const dbm_iterator_t * | iter | ) |
Tests whether the given iterator has any block left.
Definition at line 476 of file dbm_matrix.c.
void dbm_iterator_next_block | ( | dbm_iterator_t * | iter, |
int * | row, | ||
int * | col, | ||
double ** | block, | ||
int * | row_size, | ||
int * | col_size | ||
) |
Returns the next block from the given iterator.
Definition at line 484 of file dbm_matrix.c.
void dbm_iterator_stop | ( | dbm_iterator_t * | iter | ) |
Releases the given iterator.
Definition at line 514 of file dbm_matrix.c.
|
static |
Private routine to accumulate using Kahan's summation.
Definition at line 520 of file dbm_matrix.c.
double dbm_checksum | ( | const dbm_matrix_t * | matrix | ) |
Computes a checksum of the given matrix.
Definition at line 535 of file dbm_matrix.c.
double dbm_maxabs | ( | const dbm_matrix_t * | matrix | ) |
Returns the largest absolute value of all matrix elements.
Returns the absolute value of the larges element of the entire matrix.
Definition at line 552 of file dbm_matrix.c.
const char * dbm_get_name | ( | const dbm_matrix_t * | matrix | ) |
Returns the name of the matrix of the given matrix.
Definition at line 568 of file dbm_matrix.c.
int dbm_get_nze | ( | const dbm_matrix_t * | matrix | ) |
Returns the number of local Non-Zero Elements of the given matrix.
Definition at line 574 of file dbm_matrix.c.
int dbm_get_num_blocks | ( | const dbm_matrix_t * | matrix | ) |
Returns the number of local blocks of the given matrix.
Definition at line 586 of file dbm_matrix.c.
void dbm_get_row_sizes | ( | const dbm_matrix_t * | matrix, |
int * | nrows, | ||
const int ** | row_sizes | ||
) |
Returns the row block sizes of the given matrix.
Definition at line 598 of file dbm_matrix.c.
void dbm_get_col_sizes | ( | const dbm_matrix_t * | matrix, |
int * | ncols, | ||
const int ** | col_sizes | ||
) |
Returns the column block sizes of the given matrix.
Definition at line 608 of file dbm_matrix.c.
void dbm_get_local_rows | ( | const dbm_matrix_t * | matrix, |
int * | nlocal_rows, | ||
const int ** | local_rows | ||
) |
Returns the local row block sizes of the given matrix.
Definition at line 618 of file dbm_matrix.c.
void dbm_get_local_cols | ( | const dbm_matrix_t * | matrix, |
int * | nlocal_cols, | ||
const int ** | local_cols | ||
) |
Returns the local column block sizes of the given matrix.
Definition at line 628 of file dbm_matrix.c.
int dbm_get_stored_coordinates | ( | const dbm_matrix_t * | matrix, |
const int | row, | ||
const int | col | ||
) |
Returns the MPI rank on which the given block should be stored.
Definition at line 638 of file dbm_matrix.c.
const dbm_distribution_t * dbm_get_distribution | ( | const dbm_matrix_t * | matrix | ) |
Returns the distribution of the given matrix.
Definition at line 647 of file dbm_matrix.c.