|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#include "coordinate_map.hpp" |
|
|
#include "coordinate_map_cpu.hpp" |
|
|
#include "coordinate_map_key.hpp" |
|
|
#include "coordinate_map_manager.hpp" |
|
|
#include "errors.hpp" |
|
|
#include "types.hpp" |
|
|
#include "utils.hpp" |
|
|
|
|
|
#include <torch/extension.h> |
|
|
|
|
|
#include <pybind11/pybind11.h> |
|
|
#include <pybind11/stl.h> |
|
|
|
|
|
namespace minkowski { |
|
|
|
|
|
template <typename coordinate_type> |
|
|
at::Tensor |
|
|
ConvolutionForwardCPU(at::Tensor const &in_feat, |
|
|
at::Tensor const &kernel, |
|
|
default_types::stride_type const &kernel_size, |
|
|
default_types::stride_type const &kernel_stride, |
|
|
default_types::stride_type const &kernel_dilation, |
|
|
RegionType::Type const region_type, |
|
|
at::Tensor const &offset, |
|
|
CoordinateMapKey *p_in_map_key, |
|
|
CoordinateMapKey *p_out_map_key, |
|
|
cpu_manager_type<coordinate_type> *p_map_manager); |
|
|
|
|
|
template <typename coordinate_type> |
|
|
std::pair<at::Tensor, at::Tensor> |
|
|
ConvolutionBackwardCPU(at::Tensor const &in_feat, |
|
|
at::Tensor const &grad_out_feat, |
|
|
at::Tensor const &kernel, |
|
|
default_types::stride_type const &kernel_size, |
|
|
default_types::stride_type const &kernel_stride, |
|
|
default_types::stride_type const &kernel_dilation, |
|
|
RegionType::Type const region_type, |
|
|
at::Tensor const &offsets, |
|
|
CoordinateMapKey *p_in_map_key, |
|
|
CoordinateMapKey *p_out_map_key, |
|
|
cpu_manager_type<coordinate_type> *p_map_manager); |
|
|
|
|
|
} |
|
|
|
|
|
PYBIND11_MODULE(TORCH_EXTENSION_NAME, m) { |
|
|
py::enum_<minkowski::GPUMemoryAllocatorBackend::Type>(m, "GPUMemoryAllocator") |
|
|
.value("PYTORCH", minkowski::GPUMemoryAllocatorBackend::Type::PYTORCH) |
|
|
.value("CUDA", minkowski::GPUMemoryAllocatorBackend::Type::CUDA) |
|
|
.export_values(); |
|
|
|
|
|
py::enum_<minkowski::CoordinateMapBackend::Type>(m, "CoordinateMap") |
|
|
.value("CPU", minkowski::CoordinateMapBackend::Type::CPU) |
|
|
.value("PYTORCH", minkowski::CoordinateMapBackend::Type::CUDA) |
|
|
.export_values(); |
|
|
|
|
|
py::enum_<minkowski::RegionType::Type>(m, "RegionType") |
|
|
.value("HYPER_CUBE", minkowski::RegionType::Type::HYPER_CUBE) |
|
|
.value("HYPER_CROSS", minkowski::RegionType::Type::HYPER_CROSS) |
|
|
.value("CUSTOM", minkowski::RegionType::Type::CUSTOM) |
|
|
.export_values(); |
|
|
|
|
|
py::class_<minkowski::CoordinateMapKey>(m, "CoordinateMapKey") |
|
|
.def(py::init<minkowski::default_types::size_type>()) |
|
|
.def(py::init<minkowski::default_types::stride_type, std::string>()) |
|
|
.def("__repr__", &minkowski::CoordinateMapKey::to_string) |
|
|
.def("get_coordinate_size", |
|
|
&minkowski::CoordinateMapKey::get_coordinate_size) |
|
|
.def("get_key", &minkowski::CoordinateMapKey::get_key) |
|
|
.def("set_key", (void (minkowski::CoordinateMapKey::*)( |
|
|
minkowski::default_types::stride_type, std::string)) & |
|
|
minkowski::CoordinateMapKey::set_key) |
|
|
.def("get_tensor_stride", |
|
|
&minkowski::CoordinateMapKey::get_tensor_stride); |
|
|
|
|
|
py::class_<minkowski::cpu_manager_type<int>>(m, "CoordinateMapManager") |
|
|
.def(py::init<>()) |
|
|
.def("insert_and_map", &minkowski::CoordinateMapManager< |
|
|
int32_t, std::allocator, |
|
|
minkowski::CoordinateMapCPU>::insert_and_map) |
|
|
.def("stride", |
|
|
(typename py::object |
|
|
(minkowski::cpu_manager_type<int>::*)( |
|
|
minkowski::CoordinateMapKey const *in_map_key, |
|
|
minkowski::default_types::stride_type const &kernel_stride)) & |
|
|
minkowski::cpu_manager_type<int>::stride) |
|
|
.def("size", (typename minkowski::default_types::size_type |
|
|
(minkowski::cpu_manager_type<int>::*)( |
|
|
minkowski::CoordinateMapKey const *map_key) const) & |
|
|
minkowski::cpu_manager_type<int>::size) |
|
|
.def("kernel_map", &minkowski::cpu_manager_type<int>::kernel_map); |
|
|
|
|
|
m.def("ConvolutionForwardCPU", |
|
|
&minkowski::ConvolutionForwardCPU< |
|
|
minkowski::default_types::dcoordinate_type>, |
|
|
py::call_guard<py::gil_scoped_release>()); |
|
|
|
|
|
m.def("ConvolutionBackwardCPU", |
|
|
&minkowski::ConvolutionBackwardCPU< |
|
|
minkowski::default_types::dcoordinate_type>, |
|
|
py::call_guard<py::gil_scoped_release>()); |
|
|
} |
|
|
|