Skip to content

Hop to Lop instruction generation issue #345

@j143

Description

@j143

graph

            [DataOp: PRead X]
                    |
                  [TeeOp]
                 /      \
      [ReorgOp: r(r')]   [AggBinaryOp: ba(+*)]
             |                  |
     [Transpose t(X)]     [Matrix Multiply t(X)*X]

Data Flow:

PRead X → TeeOp (splits stream)
TeeOp → ReorgOp (first output, for transpose)
TeeOp → AggBinaryOp (second output, for multiply)

program plan

[CP createvar pREADX]         -- create file handle
[OOC rblk ...]                -- read blocks
[OOC tee ...]                 -- split stream into two
[OOC r' ...]                  -- transpose on first stream
[OOC ba+* ...]                -- matrix multiply (using transpose + second stream)
[CP write ...]                -- write result

graph with variable names

[PRead X] --(_mVar0)--> [TeeOp]
                |                  |
            (_mVar2)           (_mVar2_copy)
                |                  |
         [ReorgOp r(r')]       [AggBinaryOp ba(+*)]
                |                  |
            (_mVar1)           (_mVar3)
                |                  |
             [Result]

Hop Rewriting Works Correctly

=== BEFORE REWRITE ===
DataOp 9 has parents:
  - r(r') (Hop 10) Children: [9:PRead X]
  - ba(+*) (Hop 11) Children: [10:r(r'), 9:PRead X]

=== AFTER REWRITE ===
TeeOp 15 has parents:
  - r(r') (Hop 10) Children: [15:tee]        ✅ Now points to TeeOp
  - ba(+*) (Hop 11) Children: [10:r(r'), 15:tee]  ✅ Now points to TeeOp
 

The Hop graph is correctly rewritten - both consumers now reference the TeeOp instead of the original DataOp.

❌ But Execution Plan is Wrong

------OOC r' _mVar0.MATRIX.FP64 _mVar1.MATRIX.FP64        # ❌ Still using _mVar0
------OOC tee _mVar0.MATRIX.FP64 _mVar2.MATRIX.FP64 _mVar2_copy.MATRIX.FP64
------OOC ba+* _mVar1.MATRIX.FP64 _mVar2.MATRIX.FP64 _mVar3.MATRIX.FP64  # ❌ Should use _mVar2_copy

The problem is that the Lop→Instruction generation is not respecting the Hop graph changes.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions