CRU_MAPREDUCED (3)
CRU MANUAL
CRU_MAPREDUCED (3)

NAME

cru_mapreduced - compute a graph metric concurrently

SYNOPSIS

#include <cru/cru.h>

void *cru_mapreduced (
   cru_graph g ,
   cru_mapreducer m ,
   cru_kill_switch k ,
   unsigned lanes ,
   int *err )

DESCRIPTION

This function computes a metric about a graph g without modifying it according to user-defined criteria set by m following the usual cru_mapreducer calling conventions. All vertices are visited concurrently or in an unspecified order, and a partial result is computed independently for each. All partial results contribute to a global result computed in a subsequent concurrent reduction phase. Alternatively, a NULL value of m is allowed and causes a NULL value to be returned.

The value passed through k may be either a cru_kill_switch previously obtained by the cru_new_kill_switch function or a NULL pointer denoted alternatively by UNKILLABLE. If code running in another thread passes the kill switch to cru_kill while the operation is in progress, then the operation is interrupted. In this case, a NULL value is returned.

The lanes parameter specifies the number of worker threads to be used for the operation. Higher numbers up to the number of CPU cores on the host are conducive to higher performance.

For purposes of memory management, no parameters are consumed.

RETURN VALUE

On successful completion, the returned value the result computed for the graph g according to the cru_mapreducer specification m. In the event of any error, a NULL pointer is returned.

ERRORS

The err parameter is used to report any events preventing successful completion of the requested operation to the caller. If *err is zero on entry and the operation does not succeed, then *err is assigned a non-zero number. If the operation does not succeed because a user-defined callback function reports an error, then the number reported by the callback function is assigned to *err. Positive numbers are for POSIX or user-defined error codes, negative numbers down to -CRU_MAX_ERR are specific to cru, and other negative numbers are allowed as user-defined error codes.

Values of *err listed below refer to errors that are detected and handled. Unlisted values in the range of -CRU_INT_ERR through -CRU_MAX_ERR likely indicate internal errors attributable to bugs in cru. Any other unlisted values may indicate memory corruption, invalid usage of the API, or conditions relevant to user-defined callback functions.

ENOMEM

There is insufficient memory to allocate all necessary resources.

EAGAIN

Resources or permissions are insufficient to create a thread.

CRU_BADGPH

The parameter g refers to an invalid or corrupted graph.

CRU_BADKIL

The parameter k refers to an invalid or corrupted kill switch structure.

CRU_INTKIL

The operation was stopped by user intervention using the kill switch k.

CRU_INCINV

The field i->ma_zone.offset is non-zero but the vertex i->ma_zone.initial_vertex is not in the graph g.

CRU_TPCMPR

The m_free and r_free fields differ in the m->ma_prop.vertex structure, or they differ where the vacuous_case field is NULL in either of the m->ma_prop.incident or m->ma_prop.outgoing structures.

CRU_UNDMAP

The m->ma_prop.vertex.map field is NULL, or the map field in either of m->ma_prop.incident or m->ma_prop.outgoing is NULL but at least one other field in it is not NULL.

CRU_UNDRED

The m->ma_prop.vertex.reduction field is NULL or the reduction field is NULL in either of m->ma_prop.incident or m->ma_prop.outgoing whose other fields are not all NULL.

CRU_UNDVAC

The m->ma_prop.incident.vacuous_case field is NULL, at least one other field of m->ma_prop.incident is not NULL, and there is a vertex in the graph g with no incoming edges, or the m->ma_prop.outgoing.vacuous_case field is NULL, at least one other field of m->ma_prop.outgoing is not NULL, and there is a vertex in the graph with no outgoing edges.

FILES

/usr/local/include/cru/cru.h

/usr/local/include/cru/data_types.h

/usr/local/include/cru/error_codes.h

SEE ALSO

cru, cru_bop, cru_bpred, cru_builder, cru_built, cru_cbop, cru_classifier, cru_class_of, cru_class_size, cru_composed, cru_composer, cru_connect, cru_connector, cru_cqop, cru_crossed, cru_crosser, cru_ctop, cru_ctop_pair, cru_ctop_quad, cru_data_types, cru_deduplicated, cru_destructor, cru_destructor_pair, cru_edge_count, cru_fabricated, cru_fabricator, cru_filter, cru_filtered, cru_fold, cru_free_kill_switch, cru_free_later, cru_free_now, cru_free_partition, cru_function_types, cru_get, cru_hash, cru_induced, cru_inducer, cru_kernel, cru_kill, cru_killed, cru_mapreducer, cru_merged, cru_merger, cru_mutated, cru_mutator, cru_new_kill_switch, cru_nop, cru_order, cru_order_pair, cru_partition_of, cru_plan, cru_postponed, cru_postponer, cru_prop, cru_prop_pair, cru_pruner, cru_qop, cru_qpred, cru_set, cru_sig, cru_singleton, cru_split, cru_splitter, cru_spread, cru_strerror, cru_stretch, cru_stretched, cru_stretcher, cru_subconnector, cru_terminus_count, cru_top, cru_tpred, cru_united, cru_uop, cru_vertex_count, cru_zone

AUTHOR

Dennis Furey (milonga@delayinsensitive.com)

PROJECT PAGE

https://github.com/gueststar/cru

CRU VERSION 0.15.3
October 05, 2024
CRU_MAPREDUCED (3)