I'm working on some low-level optimization stuff... and one of the things I want to do is more vectorization when computing the value of variables and when computing residuals, etc. I'm using the variable groups stuff to be able to do large vector operations.
To that end... I think that the current choice for dof-ordering within variable groups could be changed to be more amenable to vectorization. Currently DofObject uses dof numbering based on this ordering for variable groups: id = base + var_in_vg*ncomp + comp The problem with this is that I would like to do a vector operation that is like this: phi_i * all_dofs_in_var_group_corresponding_to_i With any FE types that have more than one component the above ordering means that the dofs corresponding to that shape function are spread out in memory (i.e. they're NOT contiguous) and that would preclude vectorization of the above operation. Instead, if we use a dof ordering like this: id = base + comp*n_var_in_vg + var_in_vg All of the dofs that need to multiply the same shape function would be contiguous and easily vectorized. I don't think this change would effect anyone. We've never guaranteed this ordering (and it's fairly new anyway)... I think everyone is probably using the API instead of thinking of raw memory access like this (And I know I probably should be too... but I've been doing it that way for over 10 years and I have a few applications that have hundreds to tens-of-thousands of variables now that could really use this optimization). What say you? Derek
------------------------------------------------------------------------------
_______________________________________________ Libmesh-devel mailing list Libmesh-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/libmesh-devel