1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
|
//------------------------------------------------------------------------------
// GB_task_struct.h: parallel task descriptor
//------------------------------------------------------------------------------
// SuiteSparse:GraphBLAS, Timothy A. Davis, (c) 2017-2025, All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
//------------------------------------------------------------------------------
#ifndef GB_TASK_STRUCT_H
#define GB_TASK_STRUCT_H
// The element-wise computations (GB_add, GB_emult, and GB_mask) compute
// C(:,j)<M(:,j)> = op (A (:,j), B(:,j)). They are parallelized by slicing the
// work into tasks, described by the GB_task_struct.
// There are two kinds of tasks. For a coarse task, kfirst <= klast, and the
// task computes all vectors in C(:,kfirst:klast), inclusive. None of the
// vectors are sliced and computed by other tasks. For a fine task, klast is
// -1. The task computes part of the single vector C(:,kfirst). It starts at
// pA in Ai,Ax, at pB in Bi,Bx, and (if M is present) at pM in Mi,Mx. It
// computes C(:,kfirst), starting at pC in Ci,Cx.
// GB_subref also uses the TaskList. It has 12 kinds of fine tasks,
// corresponding to each of the 12 methods used in GB_subref_template. For
// those fine tasks, method = -TaskList [taskid].klast defines the method to
// use.
// The GB_subassign functions use the TaskList, in many different ways.
typedef struct // task descriptor
{
int64_t kfirst ; // C(:,kfirst) is the first vector in this task.
int64_t klast ; // C(:,klast) is the last vector in this task.
int64_t pC ; // fine task starts at Ci, Cx [pC]
int64_t pC_end ; // fine task ends at Ci, Cx [pC_end-1]
int64_t pM ; // fine task starts at Mi, Mx [pM]
int64_t pM_end ; // fine task ends at Mi, Mx [pM_end-1]
int64_t pA ; // fine task starts at Ai, Ax [pA]
int64_t pA_end ; // fine task ends at Ai, Ax [pA_end-1]
int64_t pB ; // fine task starts at Bi, Bx [pB]
int64_t pB_end ; // fine task ends at Bi, Bx [pB_end-1]
int64_t len ; // fine task handles a subvector of this length
}
GB_task_struct ;
#endif
|