[TEXPR][PASS] Loop distribution pass generates incorrect code
See original GitHub issueWith the following input DSL:
import tvm
m = 48
A = tvm.placeholder((m,), name='A', dtype="float16")
C = tvm.compute((m,), lambda i: A[i], name='C')
D = tvm.compute((m,), lambda i: C[i], name='D')
s = tvm.create_schedule(D.op)
# We split the two axis with factors where neither counts the other
co, ci = s[C].split(C.op.axis[0], 10)
do, di = s[D].split(D.op.axis[0], 32)
s[C].compute_at(s[D], do)
bounds = tvm.schedule.InferBound(s)
stmt = tvm.schedule.ScheduleOps(s, bounds)
stmt = tvm.ir_pass.CanonicalSimplify(stmt)
print(stmt)
stmt = tvm.ir_pass.LoopPartition(stmt, True)
stmt = tvm.ir_pass.CanonicalSimplify(stmt)
print(stmt)
The following is the output of first print statement. Code is correct.
// attr [compute(D, 0x1e4d7e0)] realize_scope = ""
realize D([0, 48]) {
produce D {
for (i.outer, 0, 2) {
// attr [compute(C, 0x195b3a0)] realize_scope = ""
realize C([(i.outer*32), 32]) {
produce C {
for (i.outer, 0, 4) {
for (i.inner, 0, 10) {
if (likely((((i.outer*10) + i.inner) < 32))) {
if (likely(((((i.outer*32) + (i.outer*10)) + i.inner) < 48))) {
C((((i.outer*32) + (i.outer*10)) + i.inner)) =A((((i.outer*32) + (i.outer*10)) + i.inner))
}
}
}
}
}
for (i.inner, 0, 32) {
if (likely((((i.outer*32) + i.inner) < 48))) {
if (likely((((i.outer*32) + i.inner) < 48))) {
D(((i.outer*32) + i.inner)) =C(((i.outer*32) + i.inner))
}
}
}
}
}
}
}
The following is the output of the second print statement. Code is incorrect in that in the second produce C
only 10 (instead of 16) elements of A
are copied to C
.
// attr [compute(D, 0x1e4d7e0)] realize_scope = ""
realize D([0, 48]) {
produce D {
for (i.outer, 0, 1) {
// attr [compute(C, 0x195b3a0)] realize_scope = ""
realize C([(i.outer*32), 32]) {
produce C {
for (i.outer, 0, 3) {
for (i.inner, 0, 10) {
C((((i.outer*32) + (i.outer*10)) + i.inner)) =A((((i.outer*32) + (i.outer*10)) + i.inner))
}
}
for (i.inner, 0, 2) {
C(((30 + (i.outer*32)) + i.inner)) =A(((30 + (i.outer*32)) + i.inner))
}
}
for (i.inner, 0, 32) {
D(((i.outer*32) + i.inner)) =C(((i.outer*32) + i.inner))
}
}
}
// attr [compute(C, 0x195b3a0)] realize_scope = ""
realize C([32, 32]) {
produce C {
for (i.outer, 0, 1) {
for (i.inner, 0, 10) {
C(((32 + (i.outer*10)) + i.inner)) =A(((32 + (i.outer*10)) + i.inner))
}
}
}
for (i.inner, 0, 16) {
D((32 + i.inner)) =C((32 + i.inner))
}
}
}
}
Issue Analytics
- State:
- Created 4 years ago
- Comments:6 (6 by maintainers)
Top Results From Across the Web
Conditionals and Loops - Introduction to Programming in Java
The while loop enables us to execute a group of statements many times. This enables us to express lengthy computations without writing lots...
Read more >C++ Basics - C++ Programming Tutorial
Below is a simple C++ program that illustrates the important programming constructs (sequential flow, while-loop, and if-else) and input/output.
Read more >Web service error codes (Microsoft Dataverse) - Power Apps
Message: Loop exists in the accounts hierarchy. Message: Action Card feature is not enabled. Message: Invalid state code passed in expression.
Read more >How to avoid duplicate legend labels in plotly or pass custom ...
Plotly controls this on the trace level. Try passing in showlegend=False inside the Histogram traces that you don't want to appear in the...
Read more >Best practices for writing code comments - Stack Overflow Blog
create a for loop // <-- comment for // start for loop ( // round ... you can't write a clear comment, there...
Read more >Top Related Medium Post
No results found
Top Related StackOverflow Question
No results found
Troubleshoot Live Code
Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start FreeTop Related Reddit Thread
No results found
Top Related Hackernoon Post
No results found
Top Related Tweet
No results found
Top Related Dev.to Post
No results found
Top Related Hashnode Post
No results found
Top GitHub Comments
I’m working on a fix now. In addition to this problem, I’m trying to fix general problems that I have found in the code as well. I will submit a PR as soon as I have it ready (likely in the next day or two).
To answer your question, I don’t know whether this has been caused by recent changes in loop_partition.cc or not.
it was automatically closed by github association rule 😃