Fill faces.neighbors and nodes.coordinates along columns (i.e., unit stride in MATLAB). This means non-unit (but constant, 2 or 3) stride in C whence memory pre-fetching will typically be helpful. The cost is a (large) memory "rewind" operation at the end of each column.
Signed-off-by: Bård Skaflestad <Bard.Skaflestad@sintef.no>
This commit is contained in:
committed by
Bård Skaflestad
parent
982c04bcdb
commit
a740a15d35
@@ -89,9 +89,9 @@ fill_nodes(mxArray *nodes, struct processed_grid *grid)
|
|||||||
nnodes = grid->number_of_nodes;
|
nnodes = grid->number_of_nodes;
|
||||||
coords = mxGetPr(mxGetField(nodes, 0, "coords"));
|
coords = mxGetPr(mxGetField(nodes, 0, "coords"));
|
||||||
|
|
||||||
for (i = 0; i < nnodes; ++i) {
|
|
||||||
for (j = 0; j < 3; ++j) {
|
for (j = 0; j < 3; ++j) {
|
||||||
coords[i + j*nnodes] = grid->node_coordinates[3*i + j];
|
for (i = 0; i < nnodes; ++i) {
|
||||||
|
*coords++ = grid->node_coordinates[3*i + j];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -152,10 +152,11 @@ fill_faces(mxArray *faces, struct processed_grid *grid)
|
|||||||
|
|
||||||
/* Fill faces.neighbors */
|
/* Fill faces.neighbors */
|
||||||
pi = mxGetData(mxGetField(faces, 0, "neighbors"));
|
pi = mxGetData(mxGetField(faces, 0, "neighbors"));
|
||||||
|
for (i = 0; i < 2; i++) {
|
||||||
for (f = 0; f < nf; f++) {
|
for (f = 0; f < nf; f++) {
|
||||||
/* Add one for one-based indexing in M */
|
/* Add one for one-based indexing in M */
|
||||||
pi[f + 0*nf] = grid->face_neighbors[2*f + 0] + 1;
|
*pi++ = grid->face_neighbors[2*f + i] + 1;
|
||||||
pi[f + 1*nf] = grid->face_neighbors[2*f + 1] + 1;
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Fill faces.nodePos */
|
/* Fill faces.nodePos */
|
||||||
|
|||||||
Reference in New Issue
Block a user