/** * Copyright (c) 2016-present, Facebook, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // Note(jiayq): the import_array function is done inside // caffe2_python.cc. Read // http://docs.scipy.org/doc/numpy-1.10.1/reference/c-api.array.html#miscellaneous // for more details. #define NO_IMPORT_ARRAY #include "pybind_state.h" #include #include #include "caffe2/core/context_gpu.h" #include "caffe2/core/common_cudnn.h" #include "caffe2/operators/operator_fallback_gpu.h" namespace caffe2 { namespace python { REGISTER_CUDA_OPERATOR(Python, GPUFallbackOp); REGISTER_CUDA_OPERATOR(PythonGradient, GPUFallbackOp); REGISTER_BLOB_FETCHER((TypeMeta::Id()), TensorFetcher); REGISTER_BLOB_FEEDER(CUDA, TensorFeeder); namespace py = pybind11; void addCUDAGlobalMethods(py::module& m) { m.def("num_cuda_devices", &NumCudaDevices); m.def("set_default_gpu_id", &SetDefaultGPUID); m.def("get_default_gpu_id", &GetDefaultGPUID); m.def("get_cuda_version", &CudaVersion); m.def("get_cudnn_version", &cudnnCompiledVersion); m.def("get_cuda_peer_access_pattern", []() { std::vector> pattern; CAFFE_ENFORCE(caffe2::GetCudaPeerAccessPattern(&pattern)); return pattern; }); m.def("get_device_properties", [](int deviceid) { auto& prop = GetDeviceProperty(deviceid); std::map obj; obj["name"] = py::cast(prop.name); obj["major"] = py::cast(prop.major); obj["minor"] = py::cast(prop.minor); return obj; }); }; PYBIND11_MODULE(caffe2_pybind11_state_gpu, m) { m.doc() = "pybind11 stateful interface to Caffe2 workspaces - GPU edition"; addGlobalMethods(m); addCUDAGlobalMethods(m); addObjectMethods(m); } } // namespace python } // namespace caffe2