vector.h
Go to the documentation of this file.
/***************************************************************************************************
* Copyright (c) 2017-2019, NVIDIA CORPORATION. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are permitted
* provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright notice, this list of
* conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
* * Neither the name of the NVIDIA CORPORATION nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NVIDIA CORPORATION BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TOR (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
**************************************************************************************************/
#pragma once
#include "cutlass/cutlass.h"
#include "cutlass/coord.h"
namespace cutlass {
namespace layout {
class PackedVectorLayout {
public:
static int const kRank = 1;
static int const kStrideRank = 1;
using Index = int32_t;
using LongIndex = int64_t;
using TensorCoord = Coord<kRank, Index>;
using Stride = Coord<kStrideRank, Index>;
private:
//
// No actual stride vector stored
//
public:
//
// Methods
//
CUTLASS_HOST_DEVICE
PackedVectorLayout() { }
CUTLASS_HOST_DEVICE
static PackedVectorLayout packed(TensorCoord const &size) {
return PackedVectorLayout();
}
CUTLASS_HOST_DEVICE
LongIndex operator()(TensorCoord const &coord) const {
return coord[0];
}
CUTLASS_HOST_DEVICE
Stride stride() const {
return make_Coord(1);
}
CUTLASS_HOST_DEVICE
LongIndex capacity(TensorCoord const &size) const {
return size[0];
}
};
} // namespace layout
} // 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