Ejemplo n.º 1
0
		public unsafe static DLManagedTensor FromBlob<T>(T* data, Int32 ndim, Int64* shape, Int64* strides = null) where T : unmanaged
		{
			var dl_managed_tensor = new DLManagedTensor();
			dl_managed_tensor.dl_tensor.data = (IntPtr)data;
			dl_managed_tensor.dl_tensor.ctx.device_type = DLDeviceType.kDLCPU;
			dl_managed_tensor.dl_tensor.ndim = ndim;
			dl_managed_tensor.dl_tensor.dtype = DLDataType.From<T>();
			dl_managed_tensor.dl_tensor.shape = (IntPtr)shape;
			dl_managed_tensor.dl_tensor.strides = (IntPtr)strides;
			dl_managed_tensor.dl_tensor.byte_offset = 0;
			dl_managed_tensor.deleter = EmptyDeleter;
			return dl_managed_tensor;
		}
Ejemplo n.º 2
0
		public static DLDataType From<T>()
		{
			var dtype = new DLDataType();
			dtype.lanes = 1;
			dtype.bits = (Byte) (Unsafe.SizeOf<T>() * 8);
				
			var t = typeof(T);

			if(t == typeof(SByte) || t == typeof(Int16) || t == typeof(Int32) || t == typeof(Int64))
				dtype.type_code = DLDataTypeCode.kDLInt;
			else if(t == typeof(Byte) || t == typeof(UInt16) || t == typeof(UInt32) || t == typeof(UInt64))
				dtype.type_code = DLDataTypeCode.kDLUInt;
			else if(t == typeof(Single) || t == typeof(Double))
				dtype.type_code = DLDataTypeCode.kDLFloat;
			else
				throw new Exception($"Type [{t}] is not supported");
			return dtype;
		}
Ejemplo n.º 3
0
		public bool CheckType<T, TT>() where T: unmanaged where TT: unmanaged
		{
			var T_dtype = DLDataType.From<T>();
			var TT_dtype = DLDataType.From<TT>();
			return dtype.type_code == T_dtype.type_code && dtype.bits == TT_dtype.bits && dtype.lanes == TT_dtype.lanes;
		}