diff --git a/include/tvm/build_module.h b/include/tvm/build_module.h index 75062e8197484da51dcd4b98f55542c824a81a4c..ae7ca3ca681d0e66c252ef1afa96ce22bcd36d4d 100644 --- a/include/tvm/build_module.h +++ b/include/tvm/build_module.h @@ -73,6 +73,9 @@ EXPORT Target metal(); /*! \return A target for rasp */ EXPORT Target rasp(); +/*! \return A target for Mali */ +EXPORT Target mali(); + /*! \return A target for stackvm */ EXPORT Target stackvm(); diff --git a/python/tvm/target.py b/python/tvm/target.py index 3437e70e0a6d74b42a312cd57db4db0798f5e078..4584c1aa4d239a18df912e17ad9537854f9eb34c 100644 --- a/python/tvm/target.py +++ b/python/tvm/target.py @@ -81,6 +81,7 @@ class Target(object): - :any:`tvm.target.rasp` create raspberry pi target - :any:`tvm.target.cuda` create CUDA target - :any:`tvm.target.rocm` create ROCM target + - :any:`tvm.target.mali` create Mali target """ current = None @@ -306,6 +307,8 @@ def create(target_str): device_name = item.split("=")[1] if device_name == "rasp": return rasp(arr[1:]) + if device_name == "mali": + return mali(arr[1:]) return Target(arr[0], arr[1:]) diff --git a/src/codegen/build_module.cc b/src/codegen/build_module.cc index 2c419d43da08ba29c2189c5aeac90a397a53b539..df71a4a41bec5cddda1e8bd01e8bb59622a7ddbb 100644 --- a/src/codegen/build_module.cc +++ b/src/codegen/build_module.cc @@ -70,7 +70,8 @@ Target Target::create(const std::string& target_str) { auto result = device_name == "rasp" ? target::rasp() : - TargetFromName(target_name); + (device_name == "mali" ? target::mali() : + TargetFromName(target_name)); std::string item; while (ss >> item) { @@ -116,6 +117,15 @@ Target rasp() { return Target("llvm", kDLCPU, 512, 1, keys, options); } +Target mali() { + std::unordered_set<std::string> keys({ "rocm", "gpu" }); + std::vector<std::string> options({ + "-device=mali" + }); + return Target("opencl", kDLOpenCL, 256, 1, keys, options); +} + + Target stackvm() { std::unordered_set<std::string> keys({ "stackvm", "cpu" }); std::vector<std::string> options;