Adding all project files
This commit is contained in:
parent
6c9e127bdc
commit
cd4316ad0f
42289 changed files with 8009643 additions and 0 deletions
149
venv/Lib/site-packages/torch/include/ATen/miopen/Descriptors.h
Normal file
149
venv/Lib/site-packages/torch/include/ATen/miopen/Descriptors.h
Normal file
|
@ -0,0 +1,149 @@
|
|||
#pragma once
|
||||
|
||||
#include <ATen/miopen/Exceptions.h>
|
||||
|
||||
#include <ATen/miopen/miopen-wrapper.h>
|
||||
#include <ATen/core/Tensor.h>
|
||||
#include <ATen/TensorUtils.h>
|
||||
|
||||
namespace at { namespace native {
|
||||
|
||||
inline int dataSize(miopenDataType_t dataType)
|
||||
{
|
||||
switch (dataType) {
|
||||
case miopenHalf: return 2;
|
||||
case miopenFloat: return 4;
|
||||
case miopenBFloat16: return 2;
|
||||
default: return 8;
|
||||
}
|
||||
}
|
||||
|
||||
template <typename T, miopenStatus_t (*dtor)(T*)>
|
||||
struct DescriptorDeleter {
|
||||
void operator()(T* x) {
|
||||
if (x != nullptr) {
|
||||
MIOPEN_CHECK(dtor(x));
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// A generic class for wrapping MIOpen descriptor types. All you need
|
||||
// is to give the underlying type the Descriptor_t points to (usually,
|
||||
// if it's miopenTensorDescriptor_t it points to miopenTensorStruct),
|
||||
// the constructor and the destructor. Subclasses are responsible
|
||||
// for defining a set() function to actually set the descriptor.
|
||||
//
|
||||
// Descriptors default construct to a nullptr, and have a descriptor
|
||||
// initialized the first time you call set() or any other initializing
|
||||
// function.
|
||||
template <typename T, miopenStatus_t (*ctor)(T**), miopenStatus_t (*dtor)(T*)>
|
||||
class Descriptor
|
||||
{
|
||||
public:
|
||||
// Use desc() to access the underlying descriptor pointer in
|
||||
// a read-only fashion. Most client code should use this.
|
||||
// If the descriptor was never initialized, this will return
|
||||
// nullptr.
|
||||
T* desc() const { return desc_.get(); }
|
||||
T* desc() { return desc_.get(); }
|
||||
|
||||
// Use mut_desc() to access the underlying descriptor pointer
|
||||
// if you intend to modify what it points to (e.g., using
|
||||
// miopenSetFooDescriptor). This will ensure that the descriptor
|
||||
// is initialized. Code in this file will use this function.
|
||||
T* mut_desc() { init(); return desc_.get(); }
|
||||
protected:
|
||||
void init() {
|
||||
if (desc_ == nullptr) {
|
||||
T* raw_desc;
|
||||
MIOPEN_CHECK(ctor(&raw_desc));
|
||||
desc_.reset(raw_desc);
|
||||
}
|
||||
}
|
||||
private:
|
||||
std::unique_ptr<T, DescriptorDeleter<T, dtor>> desc_;
|
||||
};
|
||||
|
||||
class TensorDescriptor
|
||||
: public Descriptor<miopenTensorDescriptor,
|
||||
&miopenCreateTensorDescriptor,
|
||||
&miopenDestroyTensorDescriptor>
|
||||
{
|
||||
public:
|
||||
TensorDescriptor() {}
|
||||
explicit TensorDescriptor(const at::Tensor &t, size_t pad = 0) {
|
||||
set(t, pad);
|
||||
}
|
||||
|
||||
void set(const at::Tensor &t, size_t pad = 0);
|
||||
void set(miopenDataType_t dataType, IntArrayRef sizes, IntArrayRef strides, size_t pad = 0);
|
||||
|
||||
void print();
|
||||
|
||||
private:
|
||||
void set(miopenDataType_t dataType, int dim, int* size, int* stride) {
|
||||
MIOPEN_CHECK(miopenSetTensorDescriptor(mut_desc(), dataType, dim, size, stride));
|
||||
}
|
||||
};
|
||||
|
||||
std::ostream& operator<<(std::ostream & out, const TensorDescriptor& d);
|
||||
|
||||
class FilterDescriptor
|
||||
: public Descriptor<miopenTensorDescriptor,
|
||||
&miopenCreateTensorDescriptor,
|
||||
&miopenDestroyTensorDescriptor>
|
||||
{
|
||||
public:
|
||||
void set(const at::Tensor &t, int64_t pad = 0) {
|
||||
set(t, at::MemoryFormat::Contiguous, pad);
|
||||
}
|
||||
|
||||
void set(const at::Tensor &t, const at::MemoryFormat memory_format, int64_t pad = 0);
|
||||
|
||||
private:
|
||||
void set(miopenDataType_t dataType, int dim, int* size, int* stride) {
|
||||
MIOPEN_CHECK(miopenSetTensorDescriptor(mut_desc(), dataType, dim, size, stride));
|
||||
}
|
||||
};
|
||||
|
||||
struct ConvolutionDescriptor
|
||||
: public Descriptor<miopenConvolutionDescriptor,
|
||||
&miopenCreateConvolutionDescriptor,
|
||||
&miopenDestroyConvolutionDescriptor>
|
||||
{
|
||||
void set(miopenDataType_t dataType, miopenConvolutionMode_t c_mode, int dim, int* pad, int* stride, int * upscale /* aka dilation */, int groups, bool benchmark, bool deterministic) {
|
||||
MIOPEN_CHECK(miopenInitConvolutionNdDescriptor(mut_desc(), dim, pad, stride, upscale, c_mode));
|
||||
MIOPEN_CHECK(miopenSetConvolutionGroupCount(mut_desc(), groups));
|
||||
MIOPEN_CHECK(miopenSetConvolutionAttribute(mut_desc(), MIOPEN_CONVOLUTION_ATTRIB_DETERMINISTIC, deterministic ? 1 : 0));
|
||||
if (benchmark) {
|
||||
MIOPEN_CHECK(miopenSetConvolutionFindMode(mut_desc(), miopenConvolutionFindModeNormal));
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
struct RNNDescriptor
|
||||
: public Descriptor<miopenRNNDescriptor,
|
||||
&miopenCreateRNNDescriptor,
|
||||
&miopenDestroyRNNDescriptor>
|
||||
{
|
||||
void set(int64_t hidden_size, int64_t num_layers, miopenRNNInputMode_t input_mode, miopenRNNDirectionMode_t direction, miopenRNNMode_t rnn_mode,
|
||||
miopenRNNBiasMode_t bias_mode, miopenRNNAlgo_t algorithm, miopenDataType_t datatype) {
|
||||
MIOPEN_CHECK(miopenSetRNNDescriptor(mut_desc(), hidden_size, num_layers, input_mode, direction, rnn_mode, bias_mode, algorithm, datatype));
|
||||
}
|
||||
};
|
||||
|
||||
union Constant
|
||||
{
|
||||
float f;
|
||||
double d;
|
||||
Constant(miopenDataType_t dataType, double value) {
|
||||
if (dataType == miopenHalf || dataType == miopenFloat || dataType == miopenBFloat16) {
|
||||
f = static_cast<float>(value);
|
||||
} else {
|
||||
d = value;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
}} // namespace
|
|
@ -0,0 +1,41 @@
|
|||
#pragma once
|
||||
|
||||
#include <ATen/miopen/miopen-wrapper.h>
|
||||
#include <string>
|
||||
#include <stdexcept>
|
||||
#include <sstream>
|
||||
|
||||
namespace at { namespace native {
|
||||
|
||||
class miopen_exception : public std::runtime_error {
|
||||
public:
|
||||
miopenStatus_t status;
|
||||
miopen_exception(miopenStatus_t status, const char* msg)
|
||||
: std::runtime_error(msg)
|
||||
, status(status) {}
|
||||
miopen_exception(miopenStatus_t status, const std::string& msg)
|
||||
: std::runtime_error(msg)
|
||||
, status(status) {}
|
||||
};
|
||||
|
||||
inline void MIOPEN_CHECK(miopenStatus_t status)
|
||||
{
|
||||
if (status != miopenStatusSuccess) {
|
||||
if (status == miopenStatusNotImplemented) {
|
||||
throw miopen_exception(status, std::string(miopenGetErrorString(status)) +
|
||||
". This error may appear if you passed in a non-contiguous input.");
|
||||
}
|
||||
throw miopen_exception(status, miopenGetErrorString(status));
|
||||
}
|
||||
}
|
||||
|
||||
inline void HIP_CHECK(hipError_t error)
|
||||
{
|
||||
if (error != hipSuccess) {
|
||||
std::string msg("HIP error: ");
|
||||
msg += hipGetErrorString(error);
|
||||
throw std::runtime_error(msg);
|
||||
}
|
||||
}
|
||||
|
||||
}} // namespace at::native
|
|
@ -0,0 +1,9 @@
|
|||
#pragma once
|
||||
|
||||
#include <ATen/miopen/miopen-wrapper.h>
|
||||
|
||||
namespace at { namespace native {
|
||||
|
||||
miopenHandle_t getMiopenHandle();
|
||||
|
||||
}} // namespace
|
12
venv/Lib/site-packages/torch/include/ATen/miopen/Types.h
Normal file
12
venv/Lib/site-packages/torch/include/ATen/miopen/Types.h
Normal file
|
@ -0,0 +1,12 @@
|
|||
#pragma once
|
||||
|
||||
#include <ATen/miopen/miopen-wrapper.h>
|
||||
#include <ATen/Tensor.h>
|
||||
|
||||
namespace at { namespace native {
|
||||
|
||||
miopenDataType_t getMiopenDataType(const at::Tensor& tensor);
|
||||
|
||||
int64_t miopen_version();
|
||||
|
||||
}} // namespace at::miopen
|
18
venv/Lib/site-packages/torch/include/ATen/miopen/Utils.h
Normal file
18
venv/Lib/site-packages/torch/include/ATen/miopen/Utils.h
Normal file
|
@ -0,0 +1,18 @@
|
|||
#pragma once
|
||||
|
||||
#include <ATen/core/Tensor.h>
|
||||
#include <ATen/miopen/miopen-wrapper.h>
|
||||
#include <ATen/miopen/Handle.h>
|
||||
|
||||
namespace at { namespace native {
|
||||
|
||||
// This function makes tensors which have zero stride contiguous, by
|
||||
// setting the strides to 1.
|
||||
inline Tensor contiguousIfZeroInStrides(const Tensor& t) {
|
||||
for (auto s : t.strides()) {
|
||||
if (s == 0) return t.contiguous();
|
||||
}
|
||||
return t;
|
||||
}
|
||||
|
||||
}}
|
|
@ -0,0 +1,21 @@
|
|||
#pragma once
|
||||
|
||||
#include <miopen/miopen.h>
|
||||
#include <miopen/version.h>
|
||||
|
||||
#if MIOPEN_VERSION_MAJOR > 3 || (MIOPEN_VERSION_MAJOR == 3 && MIOPEN_VERSION_MINOR >= 4)
|
||||
// miopen 3.4 moved find mode from private header to public header
|
||||
#else
|
||||
// from miopen_internal.h
|
||||
extern "C" {
|
||||
|
||||
typedef enum
|
||||
{
|
||||
miopenConvolutionFindModeNormal = 1, /*!< Normal mode */
|
||||
} miopenConvolutionFindMode_t;
|
||||
|
||||
miopenStatus_t miopenSetConvolutionFindMode(
|
||||
miopenConvolutionDescriptor_t convDesc,
|
||||
miopenConvolutionFindMode_t findMode);
|
||||
}
|
||||
#endif
|
Loading…
Add table
Add a link
Reference in a new issue