Skip to content

Commit

Permalink
Rust Refactor Stage 4: Rewrite Rust graph runtime to use new APIs (#5830
Browse files Browse the repository at this point in the history
)

* Port graph-runtime to new API

* --amend

* Fix file lint

* Remove old travis file

* Add @kazum's patch

* Update rust/tvm-sys/src/datatype.rs

Co-authored-by: Andrew <amcharg@gmail.com>

Co-authored-by: Andrew <amcharg@gmail.com>
  • Loading branch information
jroesch and robo-corg authored Jun 23, 2020
1 parent ef9bf7d commit aa84ee2
Show file tree
Hide file tree
Showing 37 changed files with 2,761 additions and 1 deletion.
5 changes: 5 additions & 0 deletions rust/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -32,4 +32,9 @@ members = [
"tvm-macros",
"tvm-rt",
"tvm",
"tvm-graph-rt",
"tvm-graph-rt/tests/test_tvm_basic",
"tvm-graph-rt/tests/test_tvm_dso",
"tvm-graph-rt/tests/test_wasm32",
"tvm-graph-rt/tests/test_nn",
]
1 change: 1 addition & 0 deletions rust/runtime/src/graph.rs
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ use nom::{
character::complete::{alpha1, digit1},
number::complete::{le_i32, le_i64, le_u16, le_u32, le_u64, le_u8},
};

use serde;
use serde_json;
use tvm_common::{
Expand Down
44 changes: 44 additions & 0 deletions rust/tvm-graph-rt/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you 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.

[package]
name = "tvm-graph-rt"
version = "0.1.0"
license = "Apache-2.0"
description = "A static graph runtime for TVM."
repository = "https://github.com/apache/incubator-tvm"
readme = "README.md"
keywords = ["tvm"]
categories = ["api-bindings", "science"]
authors = ["TVM Contributors"]
edition = "2018"

[dependencies]
crossbeam = "0.7.3"
failure = "0.1"
itertools = "0.8"
lazy_static = "1.4"
ndarray="0.12"
nom = "5.0"
num_cpus = "1.10"
serde = { version = "^1.0", features = ["derive"] }
serde_json = "^1.0"
tvm-sys = { version = "0.1", path = "../tvm-sys" }
tvm-macros = { version = "0.1", path = "../tvm-macros" }

[target.'cfg(not(any(target_arch = "wasm32", target_env = "sgx")))'.dependencies]
libloading = "0.5"
73 changes: 73 additions & 0 deletions rust/tvm-graph-rt/src/allocator.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.
*/

use std::alloc::{self, Layout, LayoutErr};

const DEFAULT_ALIGN_BYTES: usize = 4;

#[derive(PartialEq, Eq)]
pub struct Allocation {
layout: Layout,
ptr: *mut u8,
}

impl Allocation {
/// Allocates a chunk of memory of `size` bytes with optional alignment.
pub fn new(size: usize, align: Option<usize>) -> Result<Self, LayoutErr> {
let alignment = align.unwrap_or(DEFAULT_ALIGN_BYTES);
let layout = Layout::from_size_align(size, alignment)?;
let ptr = unsafe { alloc::alloc(layout) };
if ptr.is_null() {
alloc::handle_alloc_error(layout);
}
Ok(Self { ptr, layout })
}

pub fn as_mut_ptr(&self) -> *mut u8 {
self.ptr
}

/// Returns the size of the Allocation in bytes.
pub fn size(&self) -> usize {
self.layout.size()
}

/// Returns the byte alignment of the Allocation.
pub fn align(&self) -> usize {
self.layout.align()
}

/// Returns a view of the Allocation.
pub fn as_slice(&self) -> &[u8] {
unsafe { std::slice::from_raw_parts(self.as_mut_ptr(), self.size()) }
}

/// Returns a mutable view of the Allocation.
pub fn as_mut_slice(&mut self) -> &mut [u8] {
unsafe { std::slice::from_raw_parts_mut(self.as_mut_ptr(), self.size()) }
}
}

impl Drop for Allocation {
fn drop(&mut self) {
unsafe {
alloc::dealloc(self.ptr, self.layout);
}
}
}
Loading

0 comments on commit aa84ee2

Please sign in to comment.