TEUCHOS_UNIT_TEST_TEMPLATE_2_DECL( Kokkos_View_MP, Flatten, Storage, Layout ) { typedef typename Storage::execution_space Device; typedef typename Storage::value_type Scalar; typedef Sacado::MP::Vector<Storage> Vector; typedef typename ApplyView<Vector*,Layout,Device>::type ViewType; typedef typename ViewType::size_type size_type; typedef typename Kokkos::FlatArrayType<ViewType>::type flat_view_type; typedef typename flat_view_type::HostMirror host_flat_view_type; const size_type num_rows = global_num_rows; const size_type num_cols = Storage::is_static ? Storage::static_size : global_num_cols; ViewType v("view", num_rows, num_cols); // Create flattened view flat_view_type flat_v = v; host_flat_view_type h_flat_v = Kokkos::create_mirror_view(flat_v); for (size_type i=0; i<num_rows; ++i) for (size_type j=0; j<num_cols; ++j) h_flat_v(i*num_cols+j) = generate_vector_coefficient<Scalar>( num_rows, num_cols, i, j); Kokkos::deep_copy(flat_v, h_flat_v); success = checkVectorView(v, out); }
TEUCHOS_UNIT_TEST_TEMPLATE_2_DECL( Kokkos_View_MP, PartitionHost, Storage, Layout ) { typedef typename Storage::execution_space Device; typedef typename Storage::value_type Scalar; typedef Sacado::MP::Vector<Storage> Vector; typedef typename ApplyView<Vector*,Layout,Device>::type ViewType; typedef typename ViewType::size_type size_type; typedef typename ViewType::HostMirror host_view_type; const size_type num_rows = global_num_rows; const size_type num_cols = Storage::static_size; ViewType v("view", num_rows, num_cols); host_view_type h_v = Kokkos::create_mirror_view(v); const size_type num_cols_part = num_cols/2; auto h_v1 = Kokkos::partition<num_cols_part>(h_v, 0); auto h_v2 = Kokkos::partition<num_cols_part>(h_v, num_cols_part); for (size_type i=0; i<num_rows; ++i) { for (size_type j=0; j<num_cols_part; ++j) { h_v1(i).fastAccessCoeff(j) = generate_vector_coefficient<Scalar>( num_rows, num_cols, i, j); h_v2(i).fastAccessCoeff(j) = generate_vector_coefficient<Scalar>( num_rows, num_cols, i, j+num_cols_part); } } Kokkos::deep_copy(v, h_v); success = checkVectorView(v, out); }
TEUCHOS_UNIT_TEST_TEMPLATE_2_DECL( Kokkos_View_MP, DeepCopy_HostArray, Storage, Layout ) { typedef typename Storage::execution_space Device; typedef typename Storage::value_type Scalar; typedef Sacado::MP::Vector<Storage> Vector; typedef typename ApplyView<Vector*,Layout,Device>::type ViewType; typedef typename ViewType::size_type size_type; typedef typename ViewType::HostMirror host_view_type; typedef typename host_view_type::array_type host_array_type; const size_type num_rows = global_num_rows; const size_type num_cols = Storage::is_static ? Storage::static_size : global_num_cols; ViewType v("view", num_rows, num_cols); host_array_type h_a = Kokkos::create_mirror_view(v); bool is_right = Kokkos::Impl::is_same< typename ViewType::array_layout, Kokkos::LayoutRight >::value; if (is_right) { for (size_type i=0; i<num_rows; ++i) for (size_type j=0; j<num_cols; ++j) h_a(i,j) = generate_vector_coefficient<Scalar>( num_rows, num_cols, i, j); } else { for (size_type i=0; i<num_rows; ++i) for (size_type j=0; j<num_cols; ++j) h_a(j,i) = generate_vector_coefficient<Scalar>( num_rows, num_cols, i, j); } Kokkos::deep_copy(v, h_a); success = checkVectorView(v, out); }
TEUCHOS_UNIT_TEST_TEMPLATE_2_DECL( Kokkos_View_MP, DeepCopy_DeviceArray, Storage, Layout ) { typedef typename Storage::device_type Device; typedef typename Storage::value_type Scalar; typedef Sacado::MP::Vector<Storage> Vector; typedef typename ApplyView<Vector*,Layout,Device>::type ViewType; typedef typename ViewType::size_type size_type; typedef typename ViewType::HostMirror host_view_type; typedef typename host_view_type::array_type host_array_type; typedef typename ViewType::array_type array_type; const size_type num_rows = global_num_rows; const size_type num_cols = Storage::is_static ? Storage::static_size : global_num_cols; ViewType v("view", num_rows, num_cols); host_view_type h_v = Kokkos::create_mirror_view(v); host_array_type h_a = h_v; array_type a = v; for (size_type i=0; i<num_rows; ++i) for (size_type j=0; j<num_cols; ++j) h_a(i,j) = generate_vector_coefficient<Scalar>( num_rows, num_cols, i, j); Kokkos::deep_copy(a, h_v); success = checkVectorView(v, out); }
TEUCHOS_UNIT_TEST_TEMPLATE_2_DECL( Kokkos_View_MP, Unmanaged, Storage, Layout ) { typedef typename Storage::device_type Device; typedef typename Storage::value_type Scalar; typedef Sacado::MP::Vector<Storage> Vector; typedef typename ApplyView<Vector*,Layout,Device>::type ViewType; typedef typename ViewType::size_type size_type; typedef typename ViewType::HostMirror host_view_type; typedef typename host_view_type::array_type host_array_type; const size_type num_rows = global_num_rows; const size_type num_cols = Storage::is_static ? Storage::static_size : global_num_cols; ViewType v("view", num_rows, num_cols); host_view_type h_v = Kokkos::create_mirror_view(v); host_array_type h_a = h_v; bool is_right = Kokkos::Impl::is_same< typename ViewType::array_layout, Kokkos::LayoutRight >::value; if (is_right || !ViewType::is_contiguous) { for (size_type i=0; i<num_rows; ++i) for (size_type j=0; j<num_cols; ++j) h_a(i,j) = generate_vector_coefficient<Scalar>( num_rows, num_cols, i, j); } else { for (size_type i=0; i<num_rows; ++i) for (size_type j=0; j<num_cols; ++j) h_a(j,i) = generate_vector_coefficient<Scalar>( num_rows, num_cols, i, j); } Kokkos::deep_copy(v, h_v); // Create unmanaged view ViewType v2(Kokkos::view_without_managing, v.ptr_on_device(), num_rows, num_cols); success = checkVectorView(v2, out); }