| 1511 | } |
| 1512 | |
| 1513 | void BM_ReadVariable(int iters) { |
| 1514 | tensorflow::testing::StopTiming(); |
| 1515 | TF_Status* status = TF_NewStatus(); |
| 1516 | TFE_ContextOptions* opts = TFE_NewContextOptions(); |
| 1517 | TFE_Context* ctx = TFE_NewContext(opts, status); |
| 1518 | CHECK_EQ(TF_OK, TF_GetCode(status)) << TF_Message(status); |
| 1519 | TFE_DeleteContextOptions(opts); |
| 1520 | |
| 1521 | TFE_TensorHandle* var_handle = CreateVariable(ctx, 5.0, status); |
| 1522 | CHECK_EQ(TF_OK, TF_GetCode(status)) << TF_Message(status); |
| 1523 | |
| 1524 | TFE_Op* op = TFE_NewOp(ctx, "ReadVariableOp", status); |
| 1525 | CHECK_EQ(TF_OK, TF_GetCode(status)) << TF_Message(status); |
| 1526 | TFE_OpSetAttrType(op, "dtype", TF_FLOAT); |
| 1527 | TFE_OpAddInput(op, var_handle, status); |
| 1528 | CHECK_EQ(TF_OK, TF_GetCode(status)) << TF_Message(status); |
| 1529 | |
| 1530 | int num_retvals = 1; |
| 1531 | TFE_TensorHandle* h = nullptr; |
| 1532 | tensorflow::testing::StartTiming(); |
| 1533 | for (int i = 0; i < iters; ++i) { |
| 1534 | TFE_Execute(op, &h, &num_retvals, status); |
| 1535 | CHECK_EQ(TF_OK, TF_GetCode(status)) << TF_Message(status); |
| 1536 | CHECK_EQ(1, num_retvals); |
| 1537 | CHECK(h); |
| 1538 | CHECK_EQ(TF_FLOAT, TFE_TensorHandleDataType(h)); |
| 1539 | CHECK_EQ(0, TFE_TensorHandleNumDims(h, status)); |
| 1540 | CHECK_EQ(TF_OK, TF_GetCode(status)) << TF_Message(status); |
| 1541 | h = nullptr; |
| 1542 | } |
| 1543 | tensorflow::testing::StopTiming(); |
| 1544 | TFE_DeleteOp(op); |
| 1545 | |
| 1546 | TFE_DeleteTensorHandle(var_handle); |
| 1547 | TFE_DeleteContext(ctx); |
| 1548 | CHECK_EQ(TF_OK, TF_GetCode(status)) << TF_Message(status); |
| 1549 | TF_DeleteStatus(status); |
| 1550 | } |
| 1551 | BENCHMARK(BM_ReadVariable); |
| 1552 | |
| 1553 | TEST(CAPI, StringAttributes) { |
nothing calls this directly
no test coverage detected