[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