diff options
Diffstat (limited to 'tensorflow/c/c_api_experimental.cc')
-rw-r--r-- | tensorflow/c/c_api_experimental.cc | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/tensorflow/c/c_api_experimental.cc b/tensorflow/c/c_api_experimental.cc index c195c9e01c..3bcc62cf2d 100644 --- a/tensorflow/c/c_api_experimental.cc +++ b/tensorflow/c/c_api_experimental.cc @@ -8705,3 +8705,53 @@ TFE_TensorHandle* TFE_DequeueVariantTensor(TF_Session* session, int tensor_id, return createTFEDequeue(ctx, TF_VARIANT, queue, status); } + +static void CheckOk(TF_Status* status) { + CHECK_EQ(TF_GetCode(status), TF_OK) << TF_Message(status); +} + +void TFE_TensorHandlePrintDebugString(TFE_TensorHandle* handle) { + auto* status = TF_NewStatus(); + TF_Tensor* t = TFE_TensorHandleResolve(handle, status); + CHECK_EQ(TF_OK, TF_GetCode(status)) << TF_Message(status); + + tensorflow::Tensor dst; + TF_CHECK_OK(TF_TensorToTensor(t, &dst)); + LOG(INFO) << dst.DebugString(); + + TF_DeleteTensor(t); + TF_DeleteStatus(status); +} + +TFE_TensorHandle* TFE_RunConstOp(TFE_Context* ctx) { + // Intentionally LOG into INFO below for ease of debugging. + VLOG(1) << "TFE_RunConstOp called"; + + auto* status = TF_NewStatus(); + auto* op = TFE_NewOp(ctx, "Const", status); + CheckOk(status); + TFE_OpSetAttrType(op, "dtype", TF_FLOAT); + + auto* tensor = + TF_AllocateTensor(TF_FLOAT, /*shape.data()*/ nullptr, /*shape.size()*/ 0, + TF_DataTypeSize(TF_FLOAT) * 1); + auto* ptr = reinterpret_cast<char*>(TF_TensorData(tensor)); + *reinterpret_cast<float*>(ptr) = 17.0; + + TFE_OpSetAttrTensor(op, "value", tensor, status); + CheckOk(status); + TF_DeleteTensor(tensor); + VLOG(1) << "New op created"; + + TFE_TensorHandle* retval; + int num_retvals = 1; + TFE_Execute(op, &retval, &num_retvals, status); + CheckOk(status); + CHECK_EQ(num_retvals, 1); + VLOG(1) << "Op executed"; + + TFE_DeleteOp(op); + TF_DeleteStatus(status); + + return retval; +} |