[Trilinos-Users] [EXTERNAL] Re: Best practice to modify elements of a Tpetra::Vector with openmp?
Hoemmen, Mark
mhoemme at sandia.gov
Thu Jun 8 18:58:31 EDT 2017
On 6/8/17, 3:04 PM, "Wen Yan" <wenyan4work at gmail.com> wrote:
> Could you please also confirm the following?
>
> 1. x_2d is a 2D Kokkos::View with Kokkos::LayoutLeft, and the entries x_2d(i,c) are continuous in memory for continuous index i. Here i ranges from 0 to local length - 1, and c ranges from 0 to the number of vectors in the Tpetra::MultiVector - 1
Yes.
>
> 2. x_2d is safe to use with openmp, like:
> for (int c = 0; c < x_2d.dimension_1(); c++) {
> #pragma omp parallel for
> for (int i = 0; i < x_2d.dimension_0(); i++) {
> const double temp = x_2d(i, c);
> x_2d(i, c) = temp < 0 ? 0 : temp;
> }
> }
Yes. Also, why not use Kokkos?
const int numCols = x_2d.dimension_1 ();
for (int c = 0; c < numCols; ++c) {
Kokkos::parallel_for (
Kokkos::RangePolicy<Kokkos::OpenMP, int> (0, x_2d.dimension_0 ()),
KOKKOS_LAMBDA (const int r) {
const double temp = x_2d(r,c);
x_2d(r,c) = temp < 0.0 ? 0.0 : temp;
});
}
> 3. For read-only access there is no need to call modify<Kokkos::HostSpace>()
That is correct. The example should explain.
mfh
More information about the Trilinos-Users
mailing list