MCPcopy Create free account
hub / github.com/DeepRec-AI/DeepRec / WhileLoopFn

Function WhileLoopFn

tensorflow/compiler/xla/client/lib/svd.cc:588–714  ·  view source on GitHub ↗

Main boby of One-sided Jacobi Method.

Source from the content-addressed store, hash-verified

586
587// Main boby of One-sided Jacobi Method.
588StatusOr<std::vector<XlaOp>> WhileLoopFn(
589 absl::Span<const XlaOp> initial_values, //
590 int matrix_dimension, //
591 int max_sweep_updates, //
592 absl::string_view name, //
593 XlaBuilder* builder) {
594 auto while_cond_fn = [&](absl::Span<const XlaOp> values,
595 XlaBuilder* cond_builder) -> StatusOr<XlaOp> {
596 auto k = values[0];
597 auto max_sweeps = ScalarLike(k, max_sweep_updates);
598 auto sweep_update_cond = Gt(max_sweeps, k);
599
600 TF_ASSIGN_OR_RETURN(auto tolerance_comparison,
601 ComputeToleranceComparison(values[3], values[4]));
602 auto tolerance_cond = ReduceAll(
603 tolerance_comparison, xla::ConstantR0<bool>(cond_builder, false),
604 CreateScalarOrComputation(PRED, cond_builder));
605
606 return And(sweep_update_cond, tolerance_cond);
607 };
608
609 auto while_body_fn =
610 [&](absl::Span<const XlaOp> values,
611 XlaBuilder* body_builder) -> StatusOr<std::vector<XlaOp>> {
612 auto while_cond_fn_inner =
613 [&](absl::Span<const XlaOp> values_inner,
614 XlaBuilder* inner_cond_builder) -> StatusOr<XlaOp> {
615 auto p = values_inner[0];
616 return Lt(p, ScalarLike(p, matrix_dimension - 1));
617 };
618
619 auto while_body_fn_inner =
620 [&](absl::Span<const XlaOp> values_inner,
621 XlaBuilder* inner_body_builder) -> StatusOr<std::vector<XlaOp>> {
622 auto while_cond_fn_innermost =
623 [&](absl::Span<const XlaOp> values_innermost,
624 XlaBuilder* innermost_cond_builder) -> StatusOr<XlaOp> {
625 auto q = values_innermost[1];
626 return Lt(q, ScalarLike(q, matrix_dimension));
627 };
628 auto while_body_fn_innermost =
629 [&](absl::Span<const XlaOp> values_innermost,
630 XlaBuilder* innermost_body_builder)
631 -> StatusOr<std::vector<XlaOp>> {
632 auto p = values_innermost[0];
633 auto q = values_innermost[1];
634
635 SVDResult onesided_jacobi_update;
636 onesided_jacobi_update.u = values_innermost[2];
637 onesided_jacobi_update.v = values_innermost[3];
638 onesided_jacobi_update.d = values_innermost[4];
639
640 auto eps = values_innermost[5];
641
642 TF_ASSIGN_OR_RETURN(
643 onesided_jacobi_update,
644 OneSidedJacobiUpdate(onesided_jacobi_update, p, q, eps));
645

Callers 1

SVDFunction · 0.70

Calls 13

ScalarLikeFunction · 0.85
OneSidedJacobiUpdateFunction · 0.85
WhileLoopHelperFunction · 0.85
GtFunction · 0.50
ReduceAllFunction · 0.50
AndFunction · 0.50
LtFunction · 0.50
TF_ASSIGN_OR_RETURNFunction · 0.50
StrCatFunction · 0.50
reserveMethod · 0.45
sizeMethod · 0.45

Tested by

no test coverage detected