Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

vec/qf - initial valid/borrowed/owned split for data #853

Merged
merged 36 commits into from
Dec 17, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
caee039
vec/qf - initial valid/borrowed/owned split for data
jeremylt Dec 7, 2021
cacf5be
vec/qf - tidy logic for checking active/stale data
jeremylt Dec 7, 2021
996b89c
minor - add missing NULL
jeremylt Dec 7, 2021
85509fa
doc - explain VectorTakeArray update
jeremylt Dec 7, 2021
16e7618
minor - update error messages
jeremylt Dec 9, 2021
bbe7d78
test - update error message in junit/tap
jeremylt Dec 9, 2021
6f133d9
gpu - fix stray CeedScalar vs void for QFunctionContext
jeremylt Dec 9, 2021
0d1a96d
vec/qf - clarify/simplify access logic
jeremylt Dec 10, 2021
62422d1
vec - calloc host arrays when no value set to make empty
jeremylt Dec 10, 2021
61b8241
style - minor
jeremylt Dec 10, 2021
1501cb3
style - minor
jeremylt Dec 10, 2021
12138f0
minor - fix error messages
jeremylt Dec 10, 2021
b353686
vec/qf - move data validity checking to backend interface
jeremylt Dec 10, 2021
b843194
gpu - add missing sync error checking for qfcontext
jeremylt Dec 13, 2021
2617b09
gpu - homogonize use of impl for backend data to reduce confusion
jeremylt Dec 13, 2021
0614609
vec - clarify access conditions
jeremylt Dec 14, 2021
090d146
python - update test for stricter vector access
jeremylt Dec 14, 2021
0e2d4f2
vec - minor fixes
jeremylt Dec 14, 2021
2cbd6bd
minor - fix ipython change
jeremylt Dec 14, 2021
68a3e28
vec - add missing declarations in ceed/backend.h
jeremylt Dec 14, 2021
21a9631
ctx - mirror vector borrowed data check in ctx interface
jeremylt Dec 14, 2021
ff3978c
vec - add CeedVectorGetArrayWrite
jeremylt Dec 14, 2021
7a2cb2d
vec - consistent use of CeedVectorGetArray vs CeedVectorGetArrayWrite
jeremylt Dec 14, 2021
098ee4a
python - small vec fixes
jeremylt Dec 14, 2021
4353007
doc - describe vector data semantics
jeremylt Dec 14, 2021
c7df0e5
magma - update restriction
jeremylt Dec 14, 2021
7b1c546
gpu - fix restr bug I added, need to sum into target
jeremylt Dec 14, 2021
44211aa
magma - fix restriction bug
jeremylt Dec 15, 2021
cbc8319
cpu - fix restriction bug here too
jeremylt Dec 15, 2021
137f2ef
op - fix evec allocations
jeremylt Dec 15, 2021
dc2457c
julia - fix ElemRestriction for new vector access rules
jeremylt Dec 15, 2021
97b3d79
op - double check GetArray vs Read vs Write usage
jeremylt Dec 15, 2021
01e02ac
doc - small fix
jeremylt Dec 15, 2021
6bb2089
restr - clean up read/write logic for restr
jeremylt Dec 15, 2021
2abadb7
python - add vec.array_write
jeremylt Dec 15, 2021
3b62776
magma - typo fix
jeremylt Dec 15, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 6 additions & 4 deletions backends/blocked/ceed-blocked-operator.c
Original file line number Diff line number Diff line change
Expand Up @@ -483,8 +483,9 @@ static int CeedOperatorApplyAdd_Blocked(CeedOperator op, CeedVector in_vec,

// Output Evecs
for (CeedInt i=0; i<num_output_fields; i++) {
ierr = CeedVectorGetArray(impl->e_vecs_full[i+impl->num_inputs], CEED_MEM_HOST,
&e_data_full[i + num_input_fields]); CeedChkBackend(ierr);
ierr = CeedVectorGetArrayWrite(impl->e_vecs_full[i+impl->num_inputs],
CEED_MEM_HOST, &e_data_full[i + num_input_fields]);
CeedChkBackend(ierr);
}

// Loop through elements
Expand Down Expand Up @@ -524,7 +525,8 @@ static int CeedOperatorApplyAdd_Blocked(CeedOperator op, CeedVector in_vec,
for (CeedInt i=0; i<num_output_fields; i++) {
// Restore evec
ierr = CeedVectorRestoreArray(impl->e_vecs_full[i+impl->num_inputs],
&e_data_full[i + num_input_fields]); CeedChkBackend(ierr);
&e_data_full[i + num_input_fields]);
CeedChkBackend(ierr);
// Get output vector
ierr = CeedOperatorFieldGetVector(op_output_fields[i], &vec);
CeedChkBackend(ierr);
Expand Down Expand Up @@ -652,7 +654,7 @@ static inline int CeedOperatorLinearAssembleQFunctionCore_Blocked(
&l_vec); CeedChkBackend(ierr);
impl->qf_l_vec = l_vec;
}
ierr = CeedVectorGetArray(l_vec, CEED_MEM_HOST, &a); CeedChkBackend(ierr);
ierr = CeedVectorGetArrayWrite(l_vec, CEED_MEM_HOST, &a); CeedChkBackend(ierr);

// Build objects if needed
CeedInt strides[3] = {1, Q, num_active_in *num_active_out*Q};
Expand Down
2 changes: 1 addition & 1 deletion backends/cuda-shared/ceed-cuda-shared-basis.c
Original file line number Diff line number Diff line change
Expand Up @@ -788,7 +788,7 @@ int CeedBasisApplyTensor_Cuda_shared(CeedBasis basis, const CeedInt nelem,
if (emode != CEED_EVAL_WEIGHT) {
ierr = CeedVectorGetArrayRead(u, CEED_MEM_DEVICE, &d_u); CeedChkBackend(ierr);
}
ierr = CeedVectorGetArray(v, CEED_MEM_DEVICE, &d_v); CeedChkBackend(ierr);
ierr = CeedVectorGetArrayWrite(v, CEED_MEM_DEVICE, &d_v); CeedChkBackend(ierr);

// Clear v for transpose mode
if (tmode == CEED_TRANSPOSE) {
Expand Down
4 changes: 2 additions & 2 deletions backends/cuda/ceed-cuda-basis.c
Original file line number Diff line number Diff line change
Expand Up @@ -349,7 +349,7 @@ int CeedBasisApply_Cuda(CeedBasis basis, const CeedInt nelem,
if (emode != CEED_EVAL_WEIGHT) {
ierr = CeedVectorGetArrayRead(u, CEED_MEM_DEVICE, &d_u); CeedChkBackend(ierr);
}
ierr = CeedVectorGetArray(v, CEED_MEM_DEVICE, &d_v); CeedChkBackend(ierr);
ierr = CeedVectorGetArrayWrite(v, CEED_MEM_DEVICE, &d_v); CeedChkBackend(ierr);

// Clear v for transpose operation
if (tmode == CEED_TRANSPOSE) {
Expand Down Expand Up @@ -438,7 +438,7 @@ int CeedBasisApplyNonTensor_Cuda(CeedBasis basis, const CeedInt nelem,
if (emode != CEED_EVAL_WEIGHT) {
ierr = CeedVectorGetArrayRead(u, CEED_MEM_DEVICE, &d_u); CeedChkBackend(ierr);
}
ierr = CeedVectorGetArray(v, CEED_MEM_DEVICE, &d_v); CeedChkBackend(ierr);
ierr = CeedVectorGetArrayWrite(v, CEED_MEM_DEVICE, &d_v); CeedChkBackend(ierr);

// Clear v for transpose operation
if (tmode == CEED_TRANSPOSE) {
Expand Down
29 changes: 15 additions & 14 deletions backends/cuda/ceed-cuda-operator.c
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ static int CeedOperatorDestroy_Cuda(CeedOperator op) {
// Setup infields or outfields
//------------------------------------------------------------------------------
static int CeedOperatorSetupFields_Cuda(CeedQFunction qf, CeedOperator op,
bool inOrOut, CeedVector *evecs,
bool isinput, CeedVector *evecs,
CeedVector *qvecs, CeedInt starte,
CeedInt numfields, CeedInt Q,
CeedInt numelements) {
Expand All @@ -97,15 +97,15 @@ static int CeedOperatorSetupFields_Cuda(CeedQFunction qf, CeedOperator op,
bool strided;
bool skiprestrict;

if (inOrOut) {
ierr = CeedOperatorGetFields(op, NULL, NULL, NULL, &opfields);
if (isinput) {
ierr = CeedOperatorGetFields(op, NULL, &opfields, NULL, NULL);
CeedChkBackend(ierr);
ierr = CeedQFunctionGetFields(qf, NULL, NULL, NULL, &qffields);
ierr = CeedQFunctionGetFields(qf, NULL, &qffields, NULL, NULL);
CeedChkBackend(ierr);
} else {
ierr = CeedOperatorGetFields(op, NULL, &opfields, NULL, NULL);
ierr = CeedOperatorGetFields(op, NULL, NULL, NULL, &opfields);
CeedChkBackend(ierr);
ierr = CeedQFunctionGetFields(qf, NULL, &qffields, NULL, NULL);
ierr = CeedQFunctionGetFields(qf, NULL, NULL, NULL, &qffields);
CeedChkBackend(ierr);
}

Expand All @@ -125,7 +125,7 @@ static int CeedOperatorSetupFields_Cuda(CeedQFunction qf, CeedOperator op,
// CEED_STRIDES_BACKEND.

// First, check whether the field is input or output:
if (!inOrOut) {
if (isinput) {
// Check for passive input:
ierr = CeedOperatorFieldGetVector(opfields[i], &fieldvec); CeedChkBackend(ierr);
if (fieldvec != CEED_VECTOR_ACTIVE) {
Expand Down Expand Up @@ -225,13 +225,13 @@ static int CeedOperatorSetup_Cuda(CeedOperator op) {

// Set up infield and outfield evecs and qvecs
// Infields
ierr = CeedOperatorSetupFields_Cuda(qf, op, 0,
ierr = CeedOperatorSetupFields_Cuda(qf, op, true,
impl->evecs, impl->qvecsin, 0,
numinputfields, Q, numelements);
CeedChkBackend(ierr);

// Outfields
ierr = CeedOperatorSetupFields_Cuda(qf, op, 1,
ierr = CeedOperatorSetupFields_Cuda(qf, op, false,
impl->evecs, impl->qvecsout,
numinputfields, numoutputfields, Q,
numelements); CeedChkBackend(ierr);
Expand Down Expand Up @@ -435,8 +435,8 @@ static int CeedOperatorApplyAdd_Cuda(CeedOperator op, CeedVector invec,
CeedChkBackend(ierr);
if (emode == CEED_EVAL_NONE) {
// Set the output Q-Vector to use the E-Vector data directly.
ierr = CeedVectorGetArray(impl->evecs[i + impl->numein], CEED_MEM_DEVICE,
&edata[i + numinputfields]); CeedChkBackend(ierr);
ierr = CeedVectorGetArrayWrite(impl->evecs[i + impl->numein], CEED_MEM_DEVICE,
&edata[i + numinputfields]); CeedChkBackend(ierr);
ierr = CeedVectorSetArray(impl->qvecsout[i], CEED_MEM_DEVICE,
CEED_USE_POINTER, edata[i + numinputfields]);
CeedChkBackend(ierr);
Expand Down Expand Up @@ -1148,10 +1148,11 @@ static inline int CeedOperatorAssembleDiagonalCore_Cuda(CeedOperator op,
ierr = CeedVectorSetValue(elemdiag, 0.0); CeedChkBackend(ierr);

// Assemble element operator diagonals
CeedScalar *elemdiagarray, *assembledqfarray;
CeedScalar *elemdiagarray;
const CeedScalar *assembledqfarray;
ierr = CeedVectorGetArray(elemdiag, CEED_MEM_DEVICE, &elemdiagarray);
CeedChkBackend(ierr);
ierr = CeedVectorGetArray(assembledqf, CEED_MEM_DEVICE, &assembledqfarray);
ierr = CeedVectorGetArrayRead(assembledqf, CEED_MEM_DEVICE, &assembledqfarray);
CeedChkBackend(ierr);
CeedInt nelem;
ierr = CeedElemRestrictionGetNumElements(diagrstr, &nelem);
Expand All @@ -1177,7 +1178,7 @@ static inline int CeedOperatorAssembleDiagonalCore_Cuda(CeedOperator op,

// Restore arrays
ierr = CeedVectorRestoreArray(elemdiag, &elemdiagarray); CeedChkBackend(ierr);
ierr = CeedVectorRestoreArray(assembledqf, &assembledqfarray);
ierr = CeedVectorRestoreArrayRead(assembledqf, &assembledqfarray);
CeedChkBackend(ierr);

// Assemble local operator diagonal
Expand Down
2 changes: 1 addition & 1 deletion backends/cuda/ceed-cuda-qfunction.c
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ static int CeedQFunctionApply_Cuda(CeedQFunction qf, CeedInt Q,
CeedChkBackend(ierr);
}
for (CeedInt i = 0; i < numoutputfields; i++) {
ierr = CeedVectorGetArray(V[i], CEED_MEM_DEVICE, &data->fields.outputs[i]);
ierr = CeedVectorGetArrayWrite(V[i], CEED_MEM_DEVICE, &data->fields.outputs[i]);
CeedChkBackend(ierr);
}

Expand Down
Loading