CUTLASS: vector.h Source File

| CUTLASS CUDA Templates for Linear Algebra Subroutines and Solvers

- Main Page
- Modules
- Namespaces
- Classes
- Files

- File List
- File Members

vector.h
Go to the documentation of this file.
1 /***************************************************************************************************
2 * Copyright (c) 2017-2019, NVIDIA CORPORATION. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without modification, are permitted
5 * provided that the following conditions are met:
6 * * Redistributions of source code must retain the above copyright notice, this list of
7 * conditions and the following disclaimer.
8 * * Redistributions in binary form must reproduce the above copyright notice, this list of
9 * conditions and the following disclaimer in the documentation and/or other materials
10 * provided with the distribution.
11 * * Neither the name of the NVIDIA CORPORATION nor the names of its contributors may be used
12 * to endorse or promote products derived from this software without specific prior written
13 * permission.
14 *
15 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
16 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
17 * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NVIDIA CORPORATION BE LIABLE
18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
19 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
20 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
21 * STRICT LIABILITY, OR TOR (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
22 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23 *
24 **************************************************************************************************/
28 #pragma once
29
30 #include "cutlass/cutlass.h"
31 #include "cutlass/coord.h"
32
33 namespace cutlass {
34 namespace layout {
35
37 class PackedVectorLayout {
38 public:
40 static int const kRank = 1;
41
43 static int const kStrideRank = 1;
44
46 using Index = int32_t;
47
49 using LongIndex = int64_t;
50
52 using TensorCoord = Coord<kRank, Index>;
53
55 using Stride = Coord<kStrideRank, Index>;
56
57 private:
58
59 //
60 // No actual stride vector stored
61 //
62
63 public:
64
65 //
66 // Methods
67 //
68
69 CUTLASS_HOST_DEVICE
70 PackedVectorLayout() { }
71
73 CUTLASS_HOST_DEVICE
74 static PackedVectorLayout packed(TensorCoord const &size) {
75 return PackedVectorLayout();
76 }
77
79 CUTLASS_HOST_DEVICE
80 LongIndex operator()(TensorCoord const &coord) const {
81 return coord[0];
82 }
83
85 CUTLASS_HOST_DEVICE
86 Stride stride() const {
87 return make_Coord(1);
88 }
89
91 CUTLASS_HOST_DEVICE
92 LongIndex capacity(TensorCoord const &size) const {
93 return size[0];
94 }
95 };
96
97 } // namespace layout
98 } // namespace cutlass
cutlass::layout::PackedVectorLayout::LongIndex
int64_t LongIndex
Long index type used for offsets.
Definition: vector.h:49
cutlass::layout::PackedVectorLayout::kStrideRank
static int const kStrideRank
Rank of stride vector.
Definition: vector.h:43
cutlass
Definition: aligned_buffer.h:35
coord.h
A Coord is a coordinate of arbitrary rank into a tensor or matrix.
cutlass::make_Coord
CUTLASS_HOST_DEVICE Coord< 1 > make_Coord(int _0)
Helper to make a 2-element coordinate.
Definition: coord.h:387
cutlass::layout::PackedVectorLayout::PackedVectorLayout
CUTLASS_HOST_DEVICE PackedVectorLayout()
Definition: vector.h:70
cutlass::layout::PackedVectorLayout::stride
CUTLASS_HOST_DEVICE Stride stride() const
Returns the stride of the layout.
Definition: vector.h:86
cutlass::layout::PackedVectorLayout::kRank
static int const kRank
Logical rank of tensor.
Definition: vector.h:40
cutlass::layout::PackedVectorLayout::Index
int32_t Index
Index type used for coordinates.
Definition: vector.h:46
cutlass::layout::PackedVectorLayout::packed
static CUTLASS_HOST_DEVICE PackedVectorLayout packed(TensorCoord const &size)
Helper returns a layout to a tightly packed tensor.
Definition: vector.h:74
CUTLASS_HOST_DEVICE
#define CUTLASS_HOST_DEVICE
Definition: cutlass.h:89
cutlass::layout::PackedVectorLayout::operator()
CUTLASS_HOST_DEVICE LongIndex operator()(TensorCoord const &coord) const
Returns the offset of a coordinate in linear memory.
Definition: vector.h:80
cutlass::Coord
Statically-sized array specifying Coords within a tensor.
Definition: coord.h:43
cutlass::layout::PackedVectorLayout
Tensor layout for densely packed vectors.
Definition: vector.h:37
cutlass.h
Basic include for CUTLASS.
cutlass::layout::PackedVectorLayout::capacity
CUTLASS_HOST_DEVICE LongIndex capacity(TensorCoord const &size) const
Compute the number of contiguous elements needed to store a tensor with the given size...
Definition: vector.h:92