/// <summary> /// Execute the operation defined by <paramref name="op"/> and return handles to computed /// tensors in <paramref name="retvals"/>. /// </summary> /// <remarks> /// Upon successful return, the first <paramref name="num_retvals"/> slots in <paramref name="retvals"/> will /// contain handle instances which the caller is responsible for disposing once they are no longer in use. /// </remarks> /// <param name="op"></param> /// <param name="retvals"></param> /// <param name="num_retvals"></param> /// <param name="status"></param> public static void TFE_Execute(SafeEagerOpHandle op, SafeEagerTensorHandle[] retvals, out int num_retvals, SafeStatusHandle status) { unsafe { num_retvals = retvals?.Length ?? 0; var rawReturns = stackalloc IntPtr[num_retvals]; TFE_Execute(op, rawReturns, ref num_retvals, status); for (var i = 0; i < num_retvals; i++) { // A handle is created for every return, even if rawReturns[i] is null. The resulting handle will be // non-null but invalid, which is the same behavior P/Invoke gives for non-array SafeHandle return // values. retvals[i] = new SafeEagerTensorHandle(rawReturns[i]); } } }
public static extern void TFE_OpSetAttrShapeList(SafeEagerOpHandle op, string attr_name, IntPtr[] dims, int[] num_dims, int num_values, SafeStatusHandle out_status);
protected int TFE_OpAddInputList(SafeEagerOpHandle op, SafeEagerTensorHandle[] inputs, int num_inputs, SafeStatusHandle status) => c_api.TFE_OpAddInputList(op, inputs, num_inputs, status);
public static extern int TFE_OpGetOutputLength(SafeEagerOpHandle op, string input_name, SafeStatusHandle status);
public static extern void TFE_OpAddInput(SafeEagerOpHandle op, SafeEagerTensorHandle h, SafeStatusHandle status);
public static extern void TFE_OpSetAttrValueProto(SafeEagerOpHandle op, string attr_name, IMessage[] proto, int proto_len, SafeStatusHandle status);
public static extern void TFE_OpSetAttrTypeList(SafeEagerOpHandle op, string attr_name, TF_DataType[] values, int num_values);
public static extern void TFE_OpSetAttrFunctionName(SafeEagerOpHandle op, string attr_name, string data, int length);
protected void TFE_OpSetAttrString(SafeEagerOpHandle op, string attr_name, string value, uint length) => c_api.TFE_OpSetAttrString(op, attr_name, value, length);
protected void TFE_OpSetAttrType(SafeEagerOpHandle op, string attr_name, TF_DataType value) => c_api.TFE_OpSetAttrType(op, attr_name, value);
protected void TFE_OpSetAttrShape(SafeEagerOpHandle op, string attr_name, long[] dims, int num_dims, SafeStatusHandle out_status) => c_api.TFE_OpSetAttrShape(op, attr_name, dims, num_dims, out_status);
protected void TFE_OpAddInput(SafeEagerOpHandle op, SafeEagerTensorHandle h, SafeStatusHandle status) => c_api.TFE_OpAddInput(op, h, status);
protected void TFE_OpSetDevice(SafeEagerOpHandle op, string device_name, SafeStatusHandle status) => c_api.TFE_OpSetDevice(op, device_name, status);
protected int TFE_OpGetOutputLength(SafeEagerOpHandle op, string input_name, SafeStatusHandle status) => c_api.TFE_OpGetOutputLength(op, input_name, status);
public static extern void TFE_OpSetAttrStringList(SafeEagerOpHandle op, string attr_name, string[] values, ulong[] lengths, int num_values);
private static unsafe extern void TFE_Execute(SafeEagerOpHandle op, IntPtr *retvals, ref int num_retvals, SafeStatusHandle status);
public static extern void TFE_OpSetAttrBool(SafeEagerOpHandle op, string attr_name, bool value);
public static extern void TFE_OpReset(SafeEagerOpHandle op_to_reset, string op_or_function_name, string raw_device_name, SafeStatusHandle status);
public static extern void TFE_OpSetAttrString(SafeEagerOpHandle op, string attr_name, string value, ulong length);
public static extern void TFE_OpSetAttrType(SafeEagerOpHandle op, string attr_name, TF_DataType value);
public static extern void TFE_OpSetAttrIntList(SafeEagerOpHandle op, string attr_name, long[] values, int num_values);
public static extern void TFE_OpSetAttrInt(SafeEagerOpHandle op, string attr_name, long value);
public static extern void TFE_OpSetDevice(SafeEagerOpHandle op, string device_name, SafeStatusHandle status);
public static extern void TFE_OpSetAttrFloat(SafeEagerOpHandle op, string attr_name, float value);
public static extern TF_AttrType TFE_OpGetAttrType(SafeEagerOpHandle op, string attr_name, ref byte is_list, SafeStatusHandle status);
public static extern void TFE_OpSetAttrShape(SafeEagerOpHandle op, string attr_name, long[] dims, int num_dims, SafeStatusHandle out_status);
public static extern int TFE_OpAddInputList(SafeEagerOpHandle op, [In, MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(SafeHandleArrayMarshaler))] SafeEagerTensorHandle[] inputs, int num_inputs, SafeStatusHandle status);
protected void TFE_Execute(SafeEagerOpHandle op, SafeEagerTensorHandle[] retvals, out int num_retvals, SafeStatusHandle status) => c_api.TFE_Execute(op, retvals, out num_retvals, status);