GCC Code Coverage Report


Directory: ./
File: src/sys/vec/pool.c
Date: 2025-10-04 04:19:13
Exec Total Coverage
Lines: 56 56 100.0%
Functions: 4 4 100.0%
Branches: 132 262 50.4%

Line Branch Exec Source
1 /*
2 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
3 SLEPc - Scalable Library for Eigenvalue Problem Computations
4 Copyright (c) 2002-, Universitat Politecnica de Valencia, Spain
5
6 This file is part of SLEPc.
7 SLEPc is distributed under a 2-clause BSD license (see LICENSE).
8 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
9 */
10 /*
11 Implementation of a pool of Vec using VecDuplicateVecs
12 */
13
14 #include <slepc/private/vecimplslepc.h> /*I "slepcvec.h" I*/
15
16 /*
17 SlepcVecPoolCreate - Create a pool of Vec.
18
19 Collective
20
21 Input Parameters:
22 + v - template vector.
23 - init_size - first guess of maximum vectors.
24
25 Output Parameter:
26 . p - the pool context.
27
28 Level: developer
29
30 .seealso: SlepcVecPoolGetVecs(), SlepcVecPoolDestroy()
31 */
32 205934 PetscErrorCode SlepcVecPoolCreate(Vec v,PetscInt init_size,VecPool *p)
33 {
34 205934 VecPool_ *pool;
35
36
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
205934 PetscFunctionBegin;
37
3/16
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
205934 PetscValidHeaderSpecific(v,VEC_CLASSID,1);
38
27/62
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✓ Branch 24 taken 2 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 2 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 2 times.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✓ Branch 50 taken 2 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✓ Branch 59 taken 2 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
205934 PetscValidLogicalCollectiveInt(v,init_size,2);
39
2/8
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
205934 PetscAssertPointer(p,3);
40
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
205934 PetscCheck(init_size>=0,PetscObjectComm((PetscObject)v),PETSC_ERR_ARG_WRONG,"init_size should be positive");
41
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
205934 PetscCall(PetscCalloc1(1,&pool));
42
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
205934 PetscCall(PetscObjectReference((PetscObject)v));
43 205934 pool->v = v;
44 205934 pool->guess = init_size;
45 205934 *p = pool;
46
6/12
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
205934 PetscFunctionReturn(PETSC_SUCCESS);
47 }
48
49 /*
50 SlepcVecPoolDestroy - Destroy the pool of Vec.
51
52 Collective
53
54 Input Parameters:
55 . p - pool of Vec.
56
57 Level: developer
58
59 .seealso: SlepcVecPoolGetVecs(), SlepcVecPoolCreate()
60 */
61 409628 PetscErrorCode SlepcVecPoolDestroy(VecPool *p)
62 {
63 409628 VecPool_ *pool = (VecPool_*)*p;
64
65
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
409628 PetscFunctionBegin;
66
8/14
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
409628 if (!*p) PetscFunctionReturn(PETSC_SUCCESS);
67
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
205934 PetscCall(VecDestroy(&pool->v));
68
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
205934 PetscCall(VecDestroyVecs(pool->n,&pool->vecs));
69 205934 pool->n = 0;
70 205934 pool->used = 0;
71 205934 pool->guess = 0;
72
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
205934 PetscCall(SlepcVecPoolDestroy((VecPool*)&pool->next));
73
6/8
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
205934 PetscCall(PetscFree(pool));
74 205934 *p = NULL;
75
6/12
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
205934 PetscFunctionReturn(PETSC_SUCCESS);
76 }
77
78 /*
79 SlepcVecPoolGetVecs - Get an array of Vec from the pool.
80
81 Collective
82
83 Input Parameters:
84 + p - pool of Vec.
85 - n - number of vectors.
86
87 Output Parameter:
88 . vecs - vectors
89
90 Level: developer
91
92 .seealso: SlepcVecPoolRestoreVecs()
93 */
94 1028715 PetscErrorCode SlepcVecPoolGetVecs(VecPool p,PetscInt n,Vec **vecs)
95 {
96 1028715 VecPool_ *pool = (VecPool_*)p;
97
98
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
1028715 PetscFunctionBegin;
99
2/8
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
1028715 PetscAssertPointer(p,1);
100
2/8
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
1028715 PetscAssertPointer(vecs,3);
101
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
1028715 PetscCheck(n>=0,PetscObjectComm((PetscObject)pool->v),PETSC_ERR_ARG_OUTOFRANGE,"n should be positive");
102
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
2401665 while (pool->next) pool = pool->next;
103
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
1028715 if (pool->n-pool->used < n) {
104 206706 pool->guess = PetscMax(p->guess,pool->used+n);
105
8/10
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 10 times.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 8 times.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
206706 if (pool->vecs && pool->used == 0) PetscCall(VecDestroyVecs(pool->n,&pool->vecs));
106
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
206706 if (pool->vecs) {
107
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
204954 PetscCall(SlepcVecPoolCreate(p->v,pool->guess-pool->used,&pool->next));
108 204954 pool = pool->next;
109 }
110 206706 pool->n = pool->guess;
111
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
206706 PetscCall(VecDuplicateVecs(p->v,pool->n,&pool->vecs));
112 }
113 1028715 *vecs = pool->vecs + pool->used;
114 1028715 pool->used += n;
115
6/12
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
1028715 PetscFunctionReturn(PETSC_SUCCESS);
116 }
117
118 /*
119 SlepcVecPoolRestoreVecs - Get back an array of Vec previously returned by
120 SlepcVecPoolGetVecs().
121
122 Collective
123
124 Input Parameters:
125 + p - pool of Vec.
126 . n - number of vectors.
127 - vecs - vectors
128
129 Level: developer
130
131 .seealso: SlepcVecPoolGetVecs()
132 */
133 1026027 PetscErrorCode SlepcVecPoolRestoreVecs(VecPool p,PetscInt n,Vec **vecs)
134 {
135 1026027 VecPool_ *pool = (VecPool_*)p, *pool0 = pool;
136
137
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
1026027 PetscFunctionBegin;
138
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
2803041 while (pool->next) pool = (pool0 = pool)->next;
139
3/4
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
1026027 if (pool->used == 0 && pool0 != pool) {
140 202714 pool0->guess = pool0->used + pool->guess;
141
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
202714 PetscCall(SlepcVecPoolDestroy((VecPool*)&pool));
142 202714 pool = pool0;
143 202714 pool->next = NULL;
144 }
145 1026027 pool->used -= n;
146
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
1026027 PetscCheck(pool->used>=0,PetscObjectComm((PetscObject)pool->v),PETSC_ERR_ARG_OUTOFRANGE,"Unmatched SlepcVecPoolRestoreVecs");
147
6/12
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
190452 PetscFunctionReturn(PETSC_SUCCESS);
148 }
149