Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Allow splitting inner-most ID to create virtual innermost ID in transpose scheduler #1930

Merged
merged 11 commits into from
Sep 6, 2022

Conversation

zasdfgbnm
Copy link
Collaborator

@zasdfgbnm zasdfgbnm commented Aug 25, 2022

This improves the perf a lot for cases like:

transpose(T0[I1{100000000}, I2{2}])

For the above example, we will schedule it as

T0[I1i{32}, I1o*I2{100000000/32*2}]

@@ -932,6 +932,37 @@ TEST_F(NVFuserTest, FusionScheduleTransposeSmallInnerSize3_CUDA) {
testValidate(&fusion, outputs, {input}, {tv_ref}, __LINE__, __FILE__);
}

// x->sin->transpose->cos->y
TEST_F(NVFuserTest, FusionScheduleTranspose2DSmallInnerSize_CUDA) {
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

kernel1 run in 3.00237 ms, achieved: 715.263 GB/s
kernel2 run in 2.54362 ms, achieved: 844.264 GB/s

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Before this PR:

kernel1 run in 28.1047 ms, achieved: 76.4101 GB/s
kernel2 run in 33.0813 ms, achieved: 64.9152 GB/s

@zasdfgbnm
Copy link
Collaborator Author

zasdfgbnm commented Aug 30, 2022

This PR seems to trigger a new indexing error:

PYTORCH_NVFUSER_ENABLE="transpose_scheduler" ./build/bin/nvfuser_bench "--benchmark_filter=.*NvFuserScheduler_LayerNorm_BWD_fp32___GRAPH/NvFuserScheduler_LayerNorm_BWD_fp32/2/32768/manual_time.*"
terminate called after throwing an instance of 'c10::Error'
  what():  root_ind != nullptr INTERNAL ASSERT FAILED at "/home/gaoxiang/nvfuser/torch/csrc/jit/codegen/cuda/index_compute.cpp":1573, please report a bug to PyTorch. Couldn't find root mapping for T14_g[ iS210{( ceilDiv(( ceilDiv(T5.size[0], 8) ), 1) )}, iS211{1}, iS281{( ceilDiv(( ceilDiv(8, 1) ), 32) )}, iS282{32}, iS280{1}, rS368{i5} ] dim: 0 id: iS366{T5.size[0]}
Exception raised from getGlobalProducerStridedIndices at /home/gaoxiang/nvfuser/torch/csrc/jit/codegen/cuda/index_compute.cpp:1573 (most recent call first):
frame #0: <unknown function> + 0x87810 (0x7f9a6c252810 in /home/gaoxiang/nvfuser/build/lib/libc10.so)
frame #1: <unknown function> + 0x877a0 (0x7f9a6c2527a0 in /home/gaoxiang/nvfuser/build/lib/libc10.so)
frame #2: <unknown function> + 0x876a0 (0x7f9a6c2526a0 in /home/gaoxiang/nvfuser/build/lib/libc10.so)
frame #3: <unknown function> + 0x89908 (0x7f9a6c254908 in /home/gaoxiang/nvfuser/build/lib/libc10.so)
frame #4: c10::Error::Error(c10::SourceLocation, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >) + 0x65 (0x7f9a6c252f25 in /home/gaoxiang/nvfuser/build/lib/libc10.so)
frame #5: c10::detail::torchCheckFail(char const*, char const*, unsigned int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) + 0x7a (0x7f9a6c250a5a in /home/gaoxiang/nvfuser/build/lib/libc10.so)
frame #6: c10::detail::torchInternalAssertFail(char const*, char const*, unsigned int, char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) + 0x5d (0x7f9a6c250ccd in /home/gaoxiang/nvfuser/build/lib/libc10.so)
frame #7: <unknown function> + 0x64c04b9 (0x7f9a891034b9 in /home/gaoxiang/nvfuser/build/lib/libtorch_cuda.so)
frame #8: <unknown function> + 0x64c74a8 (0x7f9a8910a4a8 in /home/gaoxiang/nvfuser/build/lib/libtorch_cuda.so)
frame #9: <unknown function> + 0x64c769a (0x7f9a8910a69a in /home/gaoxiang/nvfuser/build/lib/libtorch_cuda.so)
frame #10: torch::jit::fuser::cuda::IndexLowering::lowerSrcIndex(torch::jit::fuser::cuda::Val*, torch::jit::fuser::cuda::Val*) const + 0xd1 (0x7f9a8925b741 in /home/gaoxiang/nvfuser/build/lib/libtorch_cuda.so)
frame #11: torch::jit::fuser::cuda::IndexLowering::handle(torch::jit::fuser::cuda::UnaryOp const*) + 0x4b (0x7f9a8925932b in /home/gaoxiang/nvfuser/build/lib/libtorch_cuda.so)
frame #12: void torch::jit::fuser::cuda::Expr::constDispatch<torch::jit::fuser::cuda::OptOutConstDispatch*>(torch::jit::fuser::cuda::OptOutConstDispatch*, torch::jit::fuser::cuda::Expr const*) + 0xde (0x7f9a88f7cb0e in /home/gaoxiang/nvfuser/build/lib/libtorch_cuda.so)
frame #13: torch::jit::fuser::cuda::OptOutConstDispatch::handle(torch::jit::fuser::cuda::Expr const*) + 0x1d (0x7f9a88f739dd in /home/gaoxiang/nvfuser/build/lib/libtorch_cuda.so)
frame #14: torch::jit::fuser::cuda::IndexLowering::handle(torch::jit::fuser::cuda::kir::IfThenElse const*) + 0xd1 (0x7f9a8925b5a1 in /home/gaoxiang/nvfuser/build/lib/libtorch_cuda.so)
frame #15: void torch::jit::fuser::cuda::Expr::constDispatch<torch::jit::fuser::cuda::OptOutConstDispatch*>(torch::jit::fuser::cuda::OptOutConstDispatch*, torch::jit::fuser::cuda::Expr const*) + 0x60a (0x7f9a88f7d03a in /home/gaoxiang/nvfuser/build/lib/libtorch_cuda.so)
frame #16: torch::jit::fuser::cuda::OptOutConstDispatch::handle(torch::jit::fuser::cuda::Expr const*) + 0x1d (0x7f9a88f739dd in /home/gaoxiang/nvfuser/build/lib/libtorch_cuda.so)
frame #17: torch::jit::fuser::cuda::IndexLowering::handle(torch::jit::fuser::cuda::kir::ForLoop const*) + 0xcb (0x7f9a8925b47b in /home/gaoxiang/nvfuser/build/lib/libtorch_cuda.so)
frame #18: void torch::jit::fuser::cuda::Expr::constDispatch<torch::jit::fuser::cuda::OptOutConstDispatch*>(torch::jit::fuser::cuda::OptOutConstDispatch*, torch::jit::fuser::cuda::Expr const*) + 0x5d9 (0x7f9a88f7d009 in /home/gaoxiang/nvfuser/build/lib/libtorch_cuda.so)
frame #19: torch::jit::fuser::cuda::OptOutConstDispatch::handle(torch::jit::fuser::cuda::Expr const*) + 0x1d (0x7f9a88f739dd in /home/gaoxiang/nvfuser/build/lib/libtorch_cuda.so)
frame #20: torch::jit::fuser::cuda::IndexLowering::handle(torch::jit::fuser::cuda::kir::ForLoop const*) + 0xcb (0x7f9a8925b47b in /home/gaoxiang/nvfuser/build/lib/libtorch_cuda.so)
frame #21: void torch::jit::fuser::cuda::Expr::constDispatch<torch::jit::fuser::cuda::OptOutConstDispatch*>(torch::jit::fuser::cuda::OptOutConstDispatch*, torch::jit::fuser::cuda::Expr const*) + 0x5d9 (0x7f9a88f7d009 in /home/gaoxiang/nvfuser/build/lib/libtorch_cuda.so)
frame #22: torch::jit::fuser::cuda::OptOutConstDispatch::handle(torch::jit::fuser::cuda::Expr const*) + 0x1d (0x7f9a88f739dd in /home/gaoxiang/nvfuser/build/lib/libtorch_cuda.so)
frame #23: torch::jit::fuser::cuda::IndexLowering::handle(torch::jit::fuser::cuda::kir::ForLoop const*) + 0xcb (0x7f9a8925b47b in /home/gaoxiang/nvfuser/build/lib/libtorch_cuda.so)
frame #24: void torch::jit::fuser::cuda::Expr::constDispatch<torch::jit::fuser::cuda::OptOutConstDispatch*>(torch::jit::fuser::cuda::OptOutConstDispatch*, torch::jit::fuser::cuda::Expr const*) + 0x5d9 (0x7f9a88f7d009 in /home/gaoxiang/nvfuser/build/lib/libtorch_cuda.so)
frame #25: torch::jit::fuser::cuda::OptOutConstDispatch::handle(torch::jit::fuser::cuda::Expr const*) + 0x1d (0x7f9a88f739dd in /home/gaoxiang/nvfuser/build/lib/libtorch_cuda.so)
frame #26: torch::jit::fuser::cuda::IndexLowering::handle(torch::jit::fuser::cuda::kir::ForLoop const*) + 0xcb (0x7f9a8925b47b in /home/gaoxiang/nvfuser/build/lib/libtorch_cuda.so)
frame #27: void torch::jit::fuser::cuda::Expr::constDispatch<torch::jit::fuser::cuda::OptOutConstDispatch*>(torch::jit::fuser::cuda::OptOutConstDispatch*, torch::jit::fuser::cuda::Expr const*) + 0x5d9 (0x7f9a88f7d009 in /home/gaoxiang/nvfuser/build/lib/libtorch_cuda.so)
frame #28: torch::jit::fuser::cuda::OptOutConstDispatch::handle(torch::jit::fuser::cuda::Expr const*) + 0x1d (0x7f9a88f739dd in /home/gaoxiang/nvfuser/build/lib/libtorch_cuda.so)
frame #29: torch::jit::fuser::cuda::IndexLowering::handle(torch::jit::fuser::cuda::kir::IfThenElse const*) + 0xd1 (0x7f9a8925b5a1 in /home/gaoxiang/nvfuser/build/lib/libtorch_cuda.so)
frame #30: void torch::jit::fuser::cuda::Expr::constDispatch<torch::jit::fuser::cuda::OptOutConstDispatch*>(torch::jit::fuser::cuda::OptOutConstDispatch*, torch::jit::fuser::cuda::Expr const*) + 0x60a (0x7f9a88f7d03a in /home/gaoxiang/nvfuser/build/lib/libtorch_cuda.so)
frame #31: torch::jit::fuser::cuda::OptOutConstDispatch::handle(torch::jit::fuser::cuda::Expr const*) + 0x1d (0x7f9a88f739dd in /home/gaoxiang/nvfuser/build/lib/libtorch_cuda.so)
frame #32: torch::jit::fuser::cuda::IndexLowering::handle(torch::jit::fuser::cuda::kir::ForLoop const*) + 0xcb (0x7f9a8925b47b in /home/gaoxiang/nvfuser/build/lib/libtorch_cuda.so)
frame #33: void torch::jit::fuser::cuda::Expr::constDispatch<torch::jit::fuser::cuda::OptOutConstDispatch*>(torch::jit::fuser::cuda::OptOutConstDispatch*, torch::jit::fuser::cuda::Expr const*) + 0x5d9 (0x7f9a88f7d009 in /home/gaoxiang/nvfuser/build/lib/libtorch_cuda.so)
frame #34: torch::jit::fuser::cuda::OptOutConstDispatch::handle(torch::jit::fuser::cuda::Expr const*) + 0x1d (0x7f9a88f739dd in /home/gaoxiang/nvfuser/build/lib/libtorch_cuda.so)
frame #35: torch::jit::fuser::cuda::IndexLowering::generate(std::vector<torch::jit::fuser::cuda::Expr*, std::allocator<torch::jit::fuser::cuda::Expr*> > const&) + 0x7e (0x7f9a8926094e in /home/gaoxiang/nvfuser/build/lib/libtorch_cuda.so)
frame #36: <unknown function> + 0x66ac97d (0x7f9a892ef97d in /home/gaoxiang/nvfuser/build/lib/libtorch_cuda.so)
frame #37: torch::jit::fuser::cuda::GpuLower::lower(torch::jit::fuser::cuda::Fusion*, torch::jit::fuser::cuda::DataType) + 0x8ef (0x7f9a892ee5bf in /home/gaoxiang/nvfuser/build/lib/libtorch_cuda.so)
frame #38: <unknown function> + 0x6351334 (0x7f9a88f94334 in /home/gaoxiang/nvfuser/build/lib/libtorch_cuda.so)
frame #39: <unknown function> + 0x635e420 (0x7f9a88fa1420 in /home/gaoxiang/nvfuser/build/lib/libtorch_cuda.so)
frame #40: torch::jit::fuser::cuda::FusionExecutor::compileFusion(torch::jit::fuser::cuda::Fusion*, torch::jit::fuser::cuda::KernelArgumentHolder const&, torch::jit::fuser::cuda::LaunchParams const&) + 0x43a (0x7f9a88f880da in /home/gaoxiang/nvfuser/build/lib/libtorch_cuda.so)
frame #41: torch::jit::fuser::cuda::FusionKernelRuntime::runKernelWithInput(torch::jit::fuser::cuda::KernelArgumentHolder&, torch::jit::fuser::cuda::SegmentedGroup*) + 0x3bd (0x7f9a891d994d in /home/gaoxiang/nvfuser/build/lib/libtorch_cuda.so)
frame #42: torch::jit::fuser::cuda::FusionKernelRuntime::runWithInput(torch::jit::fuser::cuda::KernelArgumentHolder&) + 0x427 (0x7f9a891d7037 in /home/gaoxiang/nvfuser/build/lib/libtorch_cuda.so)
frame #43: torch::jit::fuser::cuda::FusionExecutorCache::runFusionWithInputs(c10::ArrayRef<c10::IValue> const&) + 0x529 (0x7f9a891d6889 in /home/gaoxiang/nvfuser/build/lib/libtorch_cuda.so)
frame #44: runBenchmarkIterations(benchmark::State&, torch::jit::fuser::cuda::FusionExecutorCache*, std::vector<c10::IValue, std::allocator<c10::IValue> >&) + 0x68 (0x55e7340282c8 in ./build/bin/nvfuser_bench)
frame #45: <unknown function> + 0x13ae5a (0x55e733fe8e5a in ./build/bin/nvfuser_bench)
frame #46: NvFuserScheduler_LayerNorm_BWD_fp32___GRAPH_NvFuserScheduler_LayerNorm_BWD_fp32_Benchmark::BenchmarkCase(benchmark::State&) + 0x32 (0x55e733fe85a2 in ./build/bin/nvfuser_bench)
frame #47: <unknown function> + 0xdcf20 (0x55e733f8af20 in ./build/bin/nvfuser_bench)
frame #48: benchmark::internal::BenchmarkInstance::Run(unsigned long, int, benchmark::internal::ThreadTimer*, benchmark::internal::ThreadManager*, benchmark::internal::PerfCountersMeasurement*) const + 0x82 (0x55e7340a2052 in ./build/bin/nvfuser_bench)
frame #49: <unknown function> + 0x1cf749 (0x55e73407d749 in ./build/bin/nvfuser_bench)
frame #50: benchmark::internal::BenchmarkRunner::DoNIterations() + 0x351 (0x55e73407d1f1 in ./build/bin/nvfuser_bench)
frame #51: benchmark::internal::BenchmarkRunner::DoOneRepetition() + 0xd8 (0x55e73407dec8 in ./build/bin/nvfuser_bench)
frame #52: <unknown function> + 0x18241c (0x55e73403041c in ./build/bin/nvfuser_bench)
frame #53: benchmark::RunSpecifiedBenchmarks(benchmark::BenchmarkReporter*, benchmark::BenchmarkReporter*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >) + 0x5a6 (0x55e73402f646 in ./build/bin/nvfuser_bench)
frame #54: benchmark::RunSpecifiedBenchmarks() + 0x39 (0x55e73402f049 in ./build/bin/nvfuser_bench)
frame #55: main + 0x5a (0x55e73402daea in ./build/bin/nvfuser_bench)
frame #56: <unknown function> + 0x232d0 (0x7f9a536052d0 in /usr/lib/libc.so.6)
frame #57: __libc_start_main + 0x8a (0x7f9a5360538a in /usr/lib/libc.so.6)
frame #58: _start + 0x25 (0x55e733f88385 in ./build/bin/nvfuser_bench)
Inputs:
  T5_g[ iS194{( ceilDiv(( ( ceilDiv(( ( ceilDiv(1, 8) ) * i11 ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}, iS195{1}, iS215{( ceilDiv(( ceilDiv(( 8 * 8 ), 1) ), 32) )}, iS216{32}, iS214{1} ], float
  T11_g[ iS202{( ceilDiv(( ceilDiv(i2, 8) ), 1) )}, iS203{1}, iS273{( ceilDiv(( ceilDiv(8, 1) ), 32) )}, iS274{32}, iS272{1}, rS21{i3} ], float
  T10_g[ iS164{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i3, 8) ) * i2 ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}, iS165{1}, iS336{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}, iS337{32}, iS335{2} ], float
  T7_g[ iS124{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * i4 ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}, iS125{1}, iS316{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}, iS317{32}, iS315{2} ], float
  T14_g[ iS210{( ceilDiv(( ceilDiv(i2, 8) ), 1) )}, iS211{1}, iS281{( ceilDiv(( ceilDiv(8, 1) ), 32) )}, iS282{32}, iS280{1}, rS27{i3} ], float
  i5, int64_t
Outputs:
  T20_g[ iblockIdx.x64{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i3, 8) ) * i11 ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}, iUS65{1}, iUR286{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}, ithreadIdx.x287{32}, iV285{2} ] ca_pos( 2 ) produce_pos( 2), float

%kernel_math {
d14 = (double)(i5);
d15 = double(1) * d14;
d50 = reciprocal(d15);
T24_s[ iblockIdx.x184{( ceilDiv(( ( ceilDiv(( ( ceilDiv(1, 8) ) * i11 ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}, iUS185{1}, iUR220{( ceilDiv(( ceilDiv(( 8 * 8 ), 1) ), 32) )}, ithreadIdx.x221{32}, iS219{1} ] ca_pos( 2 )
   = T5_g[ iS194{( ceilDiv(( ( ceilDiv(( ( ceilDiv(1, 8) ) * i11 ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}, iS195{1}, iS215{( ceilDiv(( ceilDiv(( 8 * 8 ), 1) ), 32) )}, iS216{32}, iS214{1} ];
T19_l[ iblockIdx.x174{( ceilDiv(( ( ceilDiv(( ( ceilDiv(1, 8) ) * i11 ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}, iUS175{1}, iS341{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}, ithreadIdx.x342{32}, iS340{2} ] ca_pos( 5 ) produce_pos( 2)
   = d50
   * T24_s[ iblockIdx.x184{( ceilDiv(( ( ceilDiv(( ( ceilDiv(1, 8) ) * i11 ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}, iUS185{1}, iUR220{( ceilDiv(( ceilDiv(( 8 * 8 ), 1) ), 32) )}, ithreadIdx.x221{32}, iS219{1} ] ca_pos( 2 );
T26_l[ iblockIdx.x154{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i3, 8) ) * i2 ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}, iUS155{1}, iUR331{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}, ithreadIdx.x332{32}, iV330{2} ] ca_pos( 2 )
   = T10_g[ iS164{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i3, 8) ) * i2 ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}, iS165{1}, iS336{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}, iS337{32}, iS335{2} ];
T25_s[ iblockIdx.x198{( ceilDiv(( ceilDiv(i2, 8) ), 1) )}, iUS199{1}, iS269{( ceilDiv(( ceilDiv(8, 1) ), 32) )}, ithreadIdx.x270{32}, iS268{1} ] ca_pos( 2 )
   = T11_g[ iS202{( ceilDiv(( ceilDiv(i2, 8) ), 1) )}, iS203{1}, iS273{( ceilDiv(( ceilDiv(8, 1) ), 32) )}, iS274{32}, iS272{1}, rS21{i3} ];
T12_l[ iblockIdx.x144{( ceilDiv(( ( ceilDiv(( ( ceilDiv(1, 8) ) * i2 ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}, iUS145{1}, iS326{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}, ithreadIdx.x327{32}, iS325{2} ] ca_pos( 5 ) produce_pos( 2)
   = broadcast( T25_s[ iblockIdx.x198{( ceilDiv(( ceilDiv(i2, 8) ), 1) )}, iUS199{1}, iS269{( ceilDiv(( ceilDiv(8, 1) ), 32) )}, ithreadIdx.x270{32}, iS268{1} ] ca_pos( 2 ) )
T17_l[ iblockIdx.x134{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i3, 8) ) * i2 ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}, iUS135{1}, iS321{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}, ithreadIdx.x322{32}, iS320{2} ] ca_pos( 5 ) produce_pos( 5)
   = T26_l[ iblockIdx.x154{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i3, 8) ) * i2 ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}, iUS155{1}, iUR331{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}, ithreadIdx.x332{32}, iV330{2} ] ca_pos( 2 )
   - T12_l[ iblockIdx.x144{( ceilDiv(( ( ceilDiv(( ( ceilDiv(1, 8) ) * i2 ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}, iUS145{1}, iS326{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}, ithreadIdx.x327{32}, iS325{2} ] ca_pos( 5 ) produce_pos( 2);
T27_l[ iblockIdx.x114{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * i4 ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}, iUS115{1}, iUR311{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}, ithreadIdx.x312{32}, iV310{2} ] ca_pos( 2 )
   = T7_g[ iS124{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * i4 ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}, iS125{1}, iS316{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}, iS317{32}, iS315{2} ];
T28_s[ iblockIdx.x206{( ceilDiv(( ceilDiv(i2, 8) ), 1) )}, iUS207{1}, iS277{( ceilDiv(( ceilDiv(8, 1) ), 32) )}, ithreadIdx.x278{32}, iS276{1} ] ca_pos( 2 )
   = T14_g[ iS210{( ceilDiv(( ceilDiv(i2, 8) ), 1) )}, iS211{1}, iS281{( ceilDiv(( ceilDiv(8, 1) ), 32) )}, iS282{32}, iS280{1}, rS27{i3} ];
T15_l[ iblockIdx.x104{( ceilDiv(( ( ceilDiv(( ( ceilDiv(1, 8) ) * i2 ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}, iUS105{1}, iS306{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}, ithreadIdx.x307{32}, iS305{2} ] ca_pos( 5 ) produce_pos( 2)
   = broadcast( T28_s[ iblockIdx.x206{( ceilDiv(( ceilDiv(i2, 8) ), 1) )}, iUS207{1}, iS277{( ceilDiv(( ceilDiv(8, 1) ), 32) )}, ithreadIdx.x278{32}, iS276{1} ] ca_pos( 2 ) )
T16_l[ iblockIdx.x94{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * i4 ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}, iUS95{1}, iS301{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}, ithreadIdx.x302{32}, iS300{2} ] ca_pos( 5 ) produce_pos( 5)
   = T27_l[ iblockIdx.x114{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * i4 ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}, iUS115{1}, iUR311{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}, ithreadIdx.x312{32}, iV310{2} ] ca_pos( 2 )
   * T15_l[ iblockIdx.x104{( ceilDiv(( ( ceilDiv(( ( ceilDiv(1, 8) ) * i2 ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}, iUS105{1}, iS306{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}, ithreadIdx.x307{32}, iS305{2} ] ca_pos( 5 ) produce_pos( 2);
T18_l[ iblockIdx.x84{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i3, 8) ) * i2 ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}, iUS85{1}, iS296{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}, ithreadIdx.x297{32}, iS295{2} ] ca_pos( 5 ) produce_pos( 5)
   = T17_l[ iblockIdx.x134{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i3, 8) ) * i2 ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}, iUS135{1}, iS321{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}, ithreadIdx.x322{32}, iS320{2} ] ca_pos( 5 ) produce_pos( 5)
   - T16_l[ iblockIdx.x94{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * i4 ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}, iUS95{1}, iS301{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}, ithreadIdx.x302{32}, iS300{2} ] ca_pos( 5 ) produce_pos( 5);
T29_l[ iblockIdx.x74{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i3, 8) ) * i11 ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}, iUS75{1}, iS291{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}, ithreadIdx.x292{32}, iS290{2} ] ca_pos( 2 ) produce_pos( 5)
   = T19_l[ iblockIdx.x174{( ceilDiv(( ( ceilDiv(( ( ceilDiv(1, 8) ) * i11 ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}, iUS175{1}, iS341{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}, ithreadIdx.x342{32}, iS340{2} ] ca_pos( 5 ) produce_pos( 2)
   * T18_l[ iblockIdx.x84{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i3, 8) ) * i2 ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}, iUS85{1}, iS296{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}, ithreadIdx.x297{32}, iS295{2} ] ca_pos( 5 ) produce_pos( 5);
T20_g[ iblockIdx.x64{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i3, 8) ) * i11 ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}, iUS65{1}, iUR286{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}, ithreadIdx.x287{32}, iV285{2} ] ca_pos( 2 ) produce_pos( 2)
   = T29_l[ iblockIdx.x74{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i3, 8) ) * i11 ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}, iUS75{1}, iS291{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}, ithreadIdx.x292{32}, iS290{2} ] ca_pos( 2 ) produce_pos( 5);
}

TransformPrinter : 
T5_g[ iS194{( ceilDiv(( ( ceilDiv(( ( ceilDiv(1, 8) ) * i11 ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}, iS195{1}, iS215{( ceilDiv(( ceilDiv(( 8 * 8 ), 1) ), 32) )}, iS216{32}, iS214{1} ]
 root domain : (iS8{i11},bS9{1})
  Split: bS9{1} by factor 8 -> bS186{( ceilDiv(1, 8) )}, bS187{8}, start offset: 0, stop offset: 0
  Merge: bS186{( ceilDiv(1, 8) )} and iS8{i11} -> iS188{( ( ceilDiv(1, 8) ) * i11 )}
  Split: iS188{( ( ceilDiv(1, 8) ) * i11 )} by factor 8 -> iS189{( ceilDiv(( ( ceilDiv(1, 8) ) * i11 ), 8) )}, iS190{8}, start offset: 0, stop offset: 0
  Split: bS187{8} by factor 8 -> bS191{( ceilDiv(8, 8) )}, bS192{8}, start offset: 0, stop offset: 0
  Merge: iS189{( ceilDiv(( ( ceilDiv(1, 8) ) * i11 ), 8) )} and bS191{( ceilDiv(8, 8) )} -> iS193{( ( ceilDiv(( ( ceilDiv(1, 8) ) * i11 ), 8) ) * ( ceilDiv(8, 8) ) )}
  Split: iS193{( ( ceilDiv(( ( ceilDiv(1, 8) ) * i11 ), 8) ) * ( ceilDiv(8, 8) ) )} by factor 1 -> iS194{( ceilDiv(( ( ceilDiv(( ( ceilDiv(1, 8) ) * i11 ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}, iS195{1}, start offset: 0, stop offset: 0
  Merge: bS192{8} and iS190{8} -> iS212{( 8 * 8 )}
  Split: iS212{( 8 * 8 )} by factor 1 -> iS213{( ceilDiv(( 8 * 8 ), 1) )}, iS214{1}, start offset: 0, stop offset: 0
  Split: iS213{( ceilDiv(( 8 * 8 ), 1) )} by factor 32 -> iS215{( ceilDiv(( ceilDiv(( 8 * 8 ), 1) ), 32) )}, iS216{32}, start offset: 0, stop offset: 0
T24_s[ iblockIdx.x184{( ceilDiv(( ( ceilDiv(( ( ceilDiv(1, 8) ) * i11 ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}, iUS185{1}, iUR220{( ceilDiv(( ceilDiv(( 8 * 8 ), 1) ), 32) )}, ithreadIdx.x221{32}, iS219{1} ] ca_pos( 2 )
 root domain : (iS46{i11},bS47{1})
  Split: bS47{1} by factor 8 -> bS176{( ceilDiv(1, 8) )}, bS177{8}, start offset: 0, stop offset: 0
  Merge: bS176{( ceilDiv(1, 8) )} and iS46{i11} -> iS178{( ( ceilDiv(1, 8) ) * i11 )}
  Split: iS178{( ( ceilDiv(1, 8) ) * i11 )} by factor 8 -> iS179{( ceilDiv(( ( ceilDiv(1, 8) ) * i11 ), 8) )}, iS180{8}, start offset: 0, stop offset: 0
  Split: bS177{8} by factor 8 -> bS181{( ceilDiv(8, 8) )}, bS182{8}, start offset: 0, stop offset: 0
  Merge: iS179{( ceilDiv(( ( ceilDiv(1, 8) ) * i11 ), 8) )} and bS181{( ceilDiv(8, 8) )} -> iS183{( ( ceilDiv(( ( ceilDiv(1, 8) ) * i11 ), 8) ) * ( ceilDiv(8, 8) ) )}
  Split: iS183{( ( ceilDiv(( ( ceilDiv(1, 8) ) * i11 ), 8) ) * ( ceilDiv(8, 8) ) )} by factor 1 -> iblockIdx.x184{( ceilDiv(( ( ceilDiv(( ( ceilDiv(1, 8) ) * i11 ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}, iUS185{1}, start offset: 0, stop offset: 0
  Merge: bS182{8} and iS180{8} -> iS217{( 8 * 8 )}
  Split: iS217{( 8 * 8 )} by factor 1 -> iS218{( ceilDiv(( 8 * 8 ), 1) )}, iS219{1}, start offset: 0, stop offset: 0
  Split: iS218{( ceilDiv(( 8 * 8 ), 1) )} by factor 32 -> iUR220{( ceilDiv(( ceilDiv(( 8 * 8 ), 1) ), 32) )}, ithreadIdx.x221{32}, start offset: 0, stop offset: 0
T19_l[ iblockIdx.x174{( ceilDiv(( ( ceilDiv(( ( ceilDiv(1, 8) ) * i11 ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}, iUS175{1}, iS341{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}, ithreadIdx.x342{32}, iS340{2} ] ca_pos( 5 ) produce_pos( 2)
 root domain : (iS36{i11},bS37{1})
  Split: bS37{1} by factor 8 -> bS166{( ceilDiv(1, 8) )}, bS167{8}, start offset: 0, stop offset: 0
  Merge: bS166{( ceilDiv(1, 8) )} and iS36{i11} -> iS168{( ( ceilDiv(1, 8) ) * i11 )}
  Split: iS168{( ( ceilDiv(1, 8) ) * i11 )} by factor 8 -> iS169{( ceilDiv(( ( ceilDiv(1, 8) ) * i11 ), 8) )}, iS170{8}, start offset: 0, stop offset: 0
  Split: bS167{8} by factor 8 -> bS171{( ceilDiv(8, 8) )}, bS172{8}, start offset: 0, stop offset: 0
  Merge: iS169{( ceilDiv(( ( ceilDiv(1, 8) ) * i11 ), 8) )} and bS171{( ceilDiv(8, 8) )} -> iS173{( ( ceilDiv(( ( ceilDiv(1, 8) ) * i11 ), 8) ) * ( ceilDiv(8, 8) ) )}
  Split: iS173{( ( ceilDiv(( ( ceilDiv(1, 8) ) * i11 ), 8) ) * ( ceilDiv(8, 8) ) )} by factor 1 -> iblockIdx.x174{( ceilDiv(( ( ceilDiv(( ( ceilDiv(1, 8) ) * i11 ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}, iUS175{1}, start offset: 0, stop offset: 0
  Merge: iS170{8} and bS172{8} -> iS338{( 8 * 8 )}
  Split: iS338{( 8 * 8 )} by factor 2 -> iS339{( ceilDiv(( 8 * 8 ), 2) )}, iS340{2}, start offset: 0, stop offset: 0
  Split: iS339{( ceilDiv(( 8 * 8 ), 2) )} by factor 32 -> iS341{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}, ithreadIdx.x342{32}, start offset: 0, stop offset: 0
T10_g[ iS164{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i3, 8) ) * i2 ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}, iS165{1}, iS336{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}, iS337{32}, iS335{2} ]
 root domain : (iS18{i2},iS19{i3})
  Split: iS19{i3} by factor 8 -> iS156{( ceilDiv(i3, 8) )}, iS157{8}, start offset: 0, stop offset: 0
  Merge: iS156{( ceilDiv(i3, 8) )} and iS18{i2} -> iS158{( ( ceilDiv(i3, 8) ) * i2 )}
  Split: iS158{( ( ceilDiv(i3, 8) ) * i2 )} by factor 8 -> iS159{( ceilDiv(( ( ceilDiv(i3, 8) ) * i2 ), 8) )}, iS160{8}, start offset: 0, stop offset: 0
  Split: iS157{8} by factor 8 -> iS161{( ceilDiv(8, 8) )}, iS162{8}, start offset: 0, stop offset: 0
  Merge: iS159{( ceilDiv(( ( ceilDiv(i3, 8) ) * i2 ), 8) )} and iS161{( ceilDiv(8, 8) )} -> iS163{( ( ceilDiv(( ( ceilDiv(i3, 8) ) * i2 ), 8) ) * ( ceilDiv(8, 8) ) )}
  Split: iS163{( ( ceilDiv(( ( ceilDiv(i3, 8) ) * i2 ), 8) ) * ( ceilDiv(8, 8) ) )} by factor 1 -> iS164{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i3, 8) ) * i2 ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}, iS165{1}, start offset: 0, stop offset: 0
  Merge: iS160{8} and iS162{8} -> iS333{( 8 * 8 )}
  Split: iS333{( 8 * 8 )} by factor 2 -> iS334{( ceilDiv(( 8 * 8 ), 2) )}, iS335{2}, start offset: 0, stop offset: 0
  Split: iS334{( ceilDiv(( 8 * 8 ), 2) )} by factor 32 -> iS336{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}, iS337{32}, start offset: 0, stop offset: 0
T26_l[ iblockIdx.x154{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i3, 8) ) * i2 ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}, iUS155{1}, iUR331{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}, ithreadIdx.x332{32}, iV330{2} ] ca_pos( 2 )
 root domain : (iS49{i2},iS50{i3})
  Split: iS50{i3} by factor 8 -> iS146{( ceilDiv(i3, 8) )}, iS147{8}, start offset: 0, stop offset: 0
  Merge: iS146{( ceilDiv(i3, 8) )} and iS49{i2} -> iS148{( ( ceilDiv(i3, 8) ) * i2 )}
  Split: iS148{( ( ceilDiv(i3, 8) ) * i2 )} by factor 8 -> iS149{( ceilDiv(( ( ceilDiv(i3, 8) ) * i2 ), 8) )}, iS150{8}, start offset: 0, stop offset: 0
  Split: iS147{8} by factor 8 -> iS151{( ceilDiv(8, 8) )}, iS152{8}, start offset: 0, stop offset: 0
  Merge: iS149{( ceilDiv(( ( ceilDiv(i3, 8) ) * i2 ), 8) )} and iS151{( ceilDiv(8, 8) )} -> iS153{( ( ceilDiv(( ( ceilDiv(i3, 8) ) * i2 ), 8) ) * ( ceilDiv(8, 8) ) )}
  Split: iS153{( ( ceilDiv(( ( ceilDiv(i3, 8) ) * i2 ), 8) ) * ( ceilDiv(8, 8) ) )} by factor 1 -> iblockIdx.x154{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i3, 8) ) * i2 ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}, iUS155{1}, start offset: 0, stop offset: 0
  Merge: iS150{8} and iS152{8} -> iS328{( 8 * 8 )}
  Split: iS328{( 8 * 8 )} by factor 2 -> iS329{( ceilDiv(( 8 * 8 ), 2) )}, iV330{2}, start offset: 0, stop offset: 0
  Split: iS329{( ceilDiv(( 8 * 8 ), 2) )} by factor 32 -> iUR331{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}, ithreadIdx.x332{32}, start offset: 0, stop offset: 0
T11_g[ iS202{( ceilDiv(( ceilDiv(i2, 8) ), 1) )}, iS203{1}, iS273{( ceilDiv(( ceilDiv(8, 1) ), 32) )}, iS274{32}, iS272{1}, rS21{i3} ]
 root domain : (iS20{i2},rS21{i3})
  Split: iS20{i2} by factor 8 -> iS200{( ceilDiv(i2, 8) )}, iS201{8}, start offset: 0, stop offset: 0
  Split: iS200{( ceilDiv(i2, 8) )} by factor 1 -> iS202{( ceilDiv(( ceilDiv(i2, 8) ), 1) )}, iS203{1}, start offset: 0, stop offset: 0
  Split: iS201{8} by factor 1 -> iS271{( ceilDiv(8, 1) )}, iS272{1}, start offset: 0, stop offset: 0
  Split: iS271{( ceilDiv(8, 1) )} by factor 32 -> iS273{( ceilDiv(( ceilDiv(8, 1) ), 32) )}, iS274{32}, start offset: 0, stop offset: 0
T25_s[ iblockIdx.x198{( ceilDiv(( ceilDiv(i2, 8) ), 1) )}, iUS199{1}, iS269{( ceilDiv(( ceilDiv(8, 1) ), 32) )}, ithreadIdx.x270{32}, iS268{1} ] ca_pos( 2 )
 root domain : (iS48{i2})
  Split: iS48{i2} by factor 8 -> iS196{( ceilDiv(i2, 8) )}, iS197{8}, start offset: 0, stop offset: 0
  Split: iS196{( ceilDiv(i2, 8) )} by factor 1 -> iblockIdx.x198{( ceilDiv(( ceilDiv(i2, 8) ), 1) )}, iUS199{1}, start offset: 0, stop offset: 0
  Split: iS197{8} by factor 1 -> iS267{( ceilDiv(8, 1) )}, iS268{1}, start offset: 0, stop offset: 0
  Split: iS267{( ceilDiv(8, 1) )} by factor 32 -> iS269{( ceilDiv(( ceilDiv(8, 1) ), 32) )}, ithreadIdx.x270{32}, start offset: 0, stop offset: 0
T12_l[ iblockIdx.x144{( ceilDiv(( ( ceilDiv(( ( ceilDiv(1, 8) ) * i2 ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}, iUS145{1}, iS326{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}, ithreadIdx.x327{32}, iS325{2} ] ca_pos( 5 ) produce_pos( 2)
 root domain : (iS22{i2},bS23{1})
  Split: bS23{1} by factor 8 -> bS136{( ceilDiv(1, 8) )}, bS137{8}, start offset: 0, stop offset: 0
  Merge: bS136{( ceilDiv(1, 8) )} and iS22{i2} -> iS138{( ( ceilDiv(1, 8) ) * i2 )}
  Split: iS138{( ( ceilDiv(1, 8) ) * i2 )} by factor 8 -> iS139{( ceilDiv(( ( ceilDiv(1, 8) ) * i2 ), 8) )}, iS140{8}, start offset: 0, stop offset: 0
  Split: bS137{8} by factor 8 -> bS141{( ceilDiv(8, 8) )}, bS142{8}, start offset: 0, stop offset: 0
  Merge: iS139{( ceilDiv(( ( ceilDiv(1, 8) ) * i2 ), 8) )} and bS141{( ceilDiv(8, 8) )} -> iS143{( ( ceilDiv(( ( ceilDiv(1, 8) ) * i2 ), 8) ) * ( ceilDiv(8, 8) ) )}
  Split: iS143{( ( ceilDiv(( ( ceilDiv(1, 8) ) * i2 ), 8) ) * ( ceilDiv(8, 8) ) )} by factor 1 -> iblockIdx.x144{( ceilDiv(( ( ceilDiv(( ( ceilDiv(1, 8) ) * i2 ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}, iUS145{1}, start offset: 0, stop offset: 0
  Merge: iS140{8} and bS142{8} -> iS323{( 8 * 8 )}
  Split: iS323{( 8 * 8 )} by factor 2 -> iS324{( ceilDiv(( 8 * 8 ), 2) )}, iS325{2}, start offset: 0, stop offset: 0
  Split: iS324{( ceilDiv(( 8 * 8 ), 2) )} by factor 32 -> iS326{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}, ithreadIdx.x327{32}, start offset: 0, stop offset: 0
T17_l[ iblockIdx.x134{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i3, 8) ) * i2 ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}, iUS135{1}, iS321{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}, ithreadIdx.x322{32}, iS320{2} ] ca_pos( 5 ) produce_pos( 5)
 root domain : (iS32{i2},iS33{i3})
  Split: iS33{i3} by factor 8 -> iS126{( ceilDiv(i3, 8) )}, iS127{8}, start offset: 0, stop offset: 0
  Merge: iS126{( ceilDiv(i3, 8) )} and iS32{i2} -> iS128{( ( ceilDiv(i3, 8) ) * i2 )}
  Split: iS128{( ( ceilDiv(i3, 8) ) * i2 )} by factor 8 -> iS129{( ceilDiv(( ( ceilDiv(i3, 8) ) * i2 ), 8) )}, iS130{8}, start offset: 0, stop offset: 0
  Split: iS127{8} by factor 8 -> iS131{( ceilDiv(8, 8) )}, iS132{8}, start offset: 0, stop offset: 0
  Merge: iS129{( ceilDiv(( ( ceilDiv(i3, 8) ) * i2 ), 8) )} and iS131{( ceilDiv(8, 8) )} -> iS133{( ( ceilDiv(( ( ceilDiv(i3, 8) ) * i2 ), 8) ) * ( ceilDiv(8, 8) ) )}
  Split: iS133{( ( ceilDiv(( ( ceilDiv(i3, 8) ) * i2 ), 8) ) * ( ceilDiv(8, 8) ) )} by factor 1 -> iblockIdx.x134{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i3, 8) ) * i2 ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}, iUS135{1}, start offset: 0, stop offset: 0
  Merge: iS130{8} and iS132{8} -> iS318{( 8 * 8 )}
  Split: iS318{( 8 * 8 )} by factor 2 -> iS319{( ceilDiv(( 8 * 8 ), 2) )}, iS320{2}, start offset: 0, stop offset: 0
  Split: iS319{( ceilDiv(( 8 * 8 ), 2) )} by factor 32 -> iS321{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}, ithreadIdx.x322{32}, start offset: 0, stop offset: 0
T7_g[ iS124{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * i4 ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}, iS125{1}, iS316{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}, iS317{32}, iS315{2} ]
 root domain : (iS12{i4},iS13{i5})
  Split: iS13{i5} by factor 8 -> iS116{( ceilDiv(i5, 8) )}, iS117{8}, start offset: 0, stop offset: 0
  Merge: iS116{( ceilDiv(i5, 8) )} and iS12{i4} -> iS118{( ( ceilDiv(i5, 8) ) * i4 )}
  Split: iS118{( ( ceilDiv(i5, 8) ) * i4 )} by factor 8 -> iS119{( ceilDiv(( ( ceilDiv(i5, 8) ) * i4 ), 8) )}, iS120{8}, start offset: 0, stop offset: 0
  Split: iS117{8} by factor 8 -> iS121{( ceilDiv(8, 8) )}, iS122{8}, start offset: 0, stop offset: 0
  Merge: iS119{( ceilDiv(( ( ceilDiv(i5, 8) ) * i4 ), 8) )} and iS121{( ceilDiv(8, 8) )} -> iS123{( ( ceilDiv(( ( ceilDiv(i5, 8) ) * i4 ), 8) ) * ( ceilDiv(8, 8) ) )}
  Split: iS123{( ( ceilDiv(( ( ceilDiv(i5, 8) ) * i4 ), 8) ) * ( ceilDiv(8, 8) ) )} by factor 1 -> iS124{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * i4 ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}, iS125{1}, start offset: 0, stop offset: 0
  Merge: iS120{8} and iS122{8} -> iS313{( 8 * 8 )}
  Split: iS313{( 8 * 8 )} by factor 2 -> iS314{( ceilDiv(( 8 * 8 ), 2) )}, iS315{2}, start offset: 0, stop offset: 0
  Split: iS314{( ceilDiv(( 8 * 8 ), 2) )} by factor 32 -> iS316{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}, iS317{32}, start offset: 0, stop offset: 0
T27_l[ iblockIdx.x114{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * i4 ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}, iUS115{1}, iUR311{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}, ithreadIdx.x312{32}, iV310{2} ] ca_pos( 2 )
 root domain : (iS51{i4},iS52{i5})
  Split: iS52{i5} by factor 8 -> iS106{( ceilDiv(i5, 8) )}, iS107{8}, start offset: 0, stop offset: 0
  Merge: iS106{( ceilDiv(i5, 8) )} and iS51{i4} -> iS108{( ( ceilDiv(i5, 8) ) * i4 )}
  Split: iS108{( ( ceilDiv(i5, 8) ) * i4 )} by factor 8 -> iS109{( ceilDiv(( ( ceilDiv(i5, 8) ) * i4 ), 8) )}, iS110{8}, start offset: 0, stop offset: 0
  Split: iS107{8} by factor 8 -> iS111{( ceilDiv(8, 8) )}, iS112{8}, start offset: 0, stop offset: 0
  Merge: iS109{( ceilDiv(( ( ceilDiv(i5, 8) ) * i4 ), 8) )} and iS111{( ceilDiv(8, 8) )} -> iS113{( ( ceilDiv(( ( ceilDiv(i5, 8) ) * i4 ), 8) ) * ( ceilDiv(8, 8) ) )}
  Split: iS113{( ( ceilDiv(( ( ceilDiv(i5, 8) ) * i4 ), 8) ) * ( ceilDiv(8, 8) ) )} by factor 1 -> iblockIdx.x114{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * i4 ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}, iUS115{1}, start offset: 0, stop offset: 0
  Merge: iS110{8} and iS112{8} -> iS308{( 8 * 8 )}
  Split: iS308{( 8 * 8 )} by factor 2 -> iS309{( ceilDiv(( 8 * 8 ), 2) )}, iV310{2}, start offset: 0, stop offset: 0
  Split: iS309{( ceilDiv(( 8 * 8 ), 2) )} by factor 32 -> iUR311{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}, ithreadIdx.x312{32}, start offset: 0, stop offset: 0
T14_g[ iS210{( ceilDiv(( ceilDiv(i2, 8) ), 1) )}, iS211{1}, iS281{( ceilDiv(( ceilDiv(8, 1) ), 32) )}, iS282{32}, iS280{1}, rS27{i3} ]
 root domain : (iS26{i2},rS27{i3})
  Split: iS26{i2} by factor 8 -> iS208{( ceilDiv(i2, 8) )}, iS209{8}, start offset: 0, stop offset: 0
  Split: iS208{( ceilDiv(i2, 8) )} by factor 1 -> iS210{( ceilDiv(( ceilDiv(i2, 8) ), 1) )}, iS211{1}, start offset: 0, stop offset: 0
  Split: iS209{8} by factor 1 -> iS279{( ceilDiv(8, 1) )}, iS280{1}, start offset: 0, stop offset: 0
  Split: iS279{( ceilDiv(8, 1) )} by factor 32 -> iS281{( ceilDiv(( ceilDiv(8, 1) ), 32) )}, iS282{32}, start offset: 0, stop offset: 0
T28_s[ iblockIdx.x206{( ceilDiv(( ceilDiv(i2, 8) ), 1) )}, iUS207{1}, iS277{( ceilDiv(( ceilDiv(8, 1) ), 32) )}, ithreadIdx.x278{32}, iS276{1} ] ca_pos( 2 )
 root domain : (iS53{i2})
  Split: iS53{i2} by factor 8 -> iS204{( ceilDiv(i2, 8) )}, iS205{8}, start offset: 0, stop offset: 0
  Split: iS204{( ceilDiv(i2, 8) )} by factor 1 -> iblockIdx.x206{( ceilDiv(( ceilDiv(i2, 8) ), 1) )}, iUS207{1}, start offset: 0, stop offset: 0
  Split: iS205{8} by factor 1 -> iS275{( ceilDiv(8, 1) )}, iS276{1}, start offset: 0, stop offset: 0
  Split: iS275{( ceilDiv(8, 1) )} by factor 32 -> iS277{( ceilDiv(( ceilDiv(8, 1) ), 32) )}, ithreadIdx.x278{32}, start offset: 0, stop offset: 0
T15_l[ iblockIdx.x104{( ceilDiv(( ( ceilDiv(( ( ceilDiv(1, 8) ) * i2 ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}, iUS105{1}, iS306{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}, ithreadIdx.x307{32}, iS305{2} ] ca_pos( 5 ) produce_pos( 2)
 root domain : (iS28{i2},bS29{1})
  Split: bS29{1} by factor 8 -> bS96{( ceilDiv(1, 8) )}, bS97{8}, start offset: 0, stop offset: 0
  Merge: bS96{( ceilDiv(1, 8) )} and iS28{i2} -> iS98{( ( ceilDiv(1, 8) ) * i2 )}
  Split: iS98{( ( ceilDiv(1, 8) ) * i2 )} by factor 8 -> iS99{( ceilDiv(( ( ceilDiv(1, 8) ) * i2 ), 8) )}, iS100{8}, start offset: 0, stop offset: 0
  Split: bS97{8} by factor 8 -> bS101{( ceilDiv(8, 8) )}, bS102{8}, start offset: 0, stop offset: 0
  Merge: iS99{( ceilDiv(( ( ceilDiv(1, 8) ) * i2 ), 8) )} and bS101{( ceilDiv(8, 8) )} -> iS103{( ( ceilDiv(( ( ceilDiv(1, 8) ) * i2 ), 8) ) * ( ceilDiv(8, 8) ) )}
  Split: iS103{( ( ceilDiv(( ( ceilDiv(1, 8) ) * i2 ), 8) ) * ( ceilDiv(8, 8) ) )} by factor 1 -> iblockIdx.x104{( ceilDiv(( ( ceilDiv(( ( ceilDiv(1, 8) ) * i2 ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}, iUS105{1}, start offset: 0, stop offset: 0
  Merge: iS100{8} and bS102{8} -> iS303{( 8 * 8 )}
  Split: iS303{( 8 * 8 )} by factor 2 -> iS304{( ceilDiv(( 8 * 8 ), 2) )}, iS305{2}, start offset: 0, stop offset: 0
  Split: iS304{( ceilDiv(( 8 * 8 ), 2) )} by factor 32 -> iS306{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}, ithreadIdx.x307{32}, start offset: 0, stop offset: 0
T16_l[ iblockIdx.x94{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * i4 ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}, iUS95{1}, iS301{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}, ithreadIdx.x302{32}, iS300{2} ] ca_pos( 5 ) produce_pos( 5)
 root domain : (iS30{i4},iS31{i5})
  Split: iS31{i5} by factor 8 -> iS86{( ceilDiv(i5, 8) )}, iS87{8}, start offset: 0, stop offset: 0
  Merge: iS86{( ceilDiv(i5, 8) )} and iS30{i4} -> iS88{( ( ceilDiv(i5, 8) ) * i4 )}
  Split: iS88{( ( ceilDiv(i5, 8) ) * i4 )} by factor 8 -> iS89{( ceilDiv(( ( ceilDiv(i5, 8) ) * i4 ), 8) )}, iS90{8}, start offset: 0, stop offset: 0
  Split: iS87{8} by factor 8 -> iS91{( ceilDiv(8, 8) )}, iS92{8}, start offset: 0, stop offset: 0
  Merge: iS89{( ceilDiv(( ( ceilDiv(i5, 8) ) * i4 ), 8) )} and iS91{( ceilDiv(8, 8) )} -> iS93{( ( ceilDiv(( ( ceilDiv(i5, 8) ) * i4 ), 8) ) * ( ceilDiv(8, 8) ) )}
  Split: iS93{( ( ceilDiv(( ( ceilDiv(i5, 8) ) * i4 ), 8) ) * ( ceilDiv(8, 8) ) )} by factor 1 -> iblockIdx.x94{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * i4 ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}, iUS95{1}, start offset: 0, stop offset: 0
  Merge: iS90{8} and iS92{8} -> iS298{( 8 * 8 )}
  Split: iS298{( 8 * 8 )} by factor 2 -> iS299{( ceilDiv(( 8 * 8 ), 2) )}, iS300{2}, start offset: 0, stop offset: 0
  Split: iS299{( ceilDiv(( 8 * 8 ), 2) )} by factor 32 -> iS301{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}, ithreadIdx.x302{32}, start offset: 0, stop offset: 0
T18_l[ iblockIdx.x84{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i3, 8) ) * i2 ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}, iUS85{1}, iS296{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}, ithreadIdx.x297{32}, iS295{2} ] ca_pos( 5 ) produce_pos( 5)
 root domain : (iS34{i2},iS35{i3})
  Split: iS35{i3} by factor 8 -> iS76{( ceilDiv(i3, 8) )}, iS77{8}, start offset: 0, stop offset: 0
  Merge: iS76{( ceilDiv(i3, 8) )} and iS34{i2} -> iS78{( ( ceilDiv(i3, 8) ) * i2 )}
  Split: iS78{( ( ceilDiv(i3, 8) ) * i2 )} by factor 8 -> iS79{( ceilDiv(( ( ceilDiv(i3, 8) ) * i2 ), 8) )}, iS80{8}, start offset: 0, stop offset: 0
  Split: iS77{8} by factor 8 -> iS81{( ceilDiv(8, 8) )}, iS82{8}, start offset: 0, stop offset: 0
  Merge: iS79{( ceilDiv(( ( ceilDiv(i3, 8) ) * i2 ), 8) )} and iS81{( ceilDiv(8, 8) )} -> iS83{( ( ceilDiv(( ( ceilDiv(i3, 8) ) * i2 ), 8) ) * ( ceilDiv(8, 8) ) )}
  Split: iS83{( ( ceilDiv(( ( ceilDiv(i3, 8) ) * i2 ), 8) ) * ( ceilDiv(8, 8) ) )} by factor 1 -> iblockIdx.x84{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i3, 8) ) * i2 ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}, iUS85{1}, start offset: 0, stop offset: 0
  Merge: iS80{8} and iS82{8} -> iS293{( 8 * 8 )}
  Split: iS293{( 8 * 8 )} by factor 2 -> iS294{( ceilDiv(( 8 * 8 ), 2) )}, iS295{2}, start offset: 0, stop offset: 0
  Split: iS294{( ceilDiv(( 8 * 8 ), 2) )} by factor 32 -> iS296{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}, ithreadIdx.x297{32}, start offset: 0, stop offset: 0
T29_l[ iblockIdx.x74{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i3, 8) ) * i11 ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}, iUS75{1}, iS291{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}, ithreadIdx.x292{32}, iS290{2} ] ca_pos( 2 ) produce_pos( 5)
 root domain : (iS38{i11},iS39{i3})
  Split: iS39{i3} by factor 8 -> iS66{( ceilDiv(i3, 8) )}, iS67{8}, start offset: 0, stop offset: 0
  Merge: iS66{( ceilDiv(i3, 8) )} and iS38{i11} -> iS68{( ( ceilDiv(i3, 8) ) * i11 )}
  Split: iS68{( ( ceilDiv(i3, 8) ) * i11 )} by factor 8 -> iS69{( ceilDiv(( ( ceilDiv(i3, 8) ) * i11 ), 8) )}, iS70{8}, start offset: 0, stop offset: 0
  Split: iS67{8} by factor 8 -> iS71{( ceilDiv(8, 8) )}, iS72{8}, start offset: 0, stop offset: 0
  Merge: iS69{( ceilDiv(( ( ceilDiv(i3, 8) ) * i11 ), 8) )} and iS71{( ceilDiv(8, 8) )} -> iS73{( ( ceilDiv(( ( ceilDiv(i3, 8) ) * i11 ), 8) ) * ( ceilDiv(8, 8) ) )}
  Split: iS73{( ( ceilDiv(( ( ceilDiv(i3, 8) ) * i11 ), 8) ) * ( ceilDiv(8, 8) ) )} by factor 1 -> iblockIdx.x74{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i3, 8) ) * i11 ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}, iUS75{1}, start offset: 0, stop offset: 0
  Merge: iS70{8} and iS72{8} -> iS288{( 8 * 8 )}
  Split: iS288{( 8 * 8 )} by factor 2 -> iS289{( ceilDiv(( 8 * 8 ), 2) )}, iS290{2}, start offset: 0, stop offset: 0
  Split: iS289{( ceilDiv(( 8 * 8 ), 2) )} by factor 32 -> iS291{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}, ithreadIdx.x292{32}, start offset: 0, stop offset: 0
T20_g[ iblockIdx.x64{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i3, 8) ) * i11 ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}, iUS65{1}, iUR286{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}, ithreadIdx.x287{32}, iV285{2} ] ca_pos( 2 ) produce_pos( 2)
 root domain : (iS54{i11},iS55{i3})
  Split: iS55{i3} by factor 8 -> iS56{( ceilDiv(i3, 8) )}, iS57{8}, start offset: 0, stop offset: 0
  Merge: iS56{( ceilDiv(i3, 8) )} and iS54{i11} -> iS58{( ( ceilDiv(i3, 8) ) * i11 )}
  Split: iS58{( ( ceilDiv(i3, 8) ) * i11 )} by factor 8 -> iS61{( ceilDiv(( ( ceilDiv(i3, 8) ) * i11 ), 8) )}, iS62{8}, start offset: 0, stop offset: 0
  Split: iS57{8} by factor 8 -> iS59{( ceilDiv(8, 8) )}, iS60{8}, start offset: 0, stop offset: 0
  Merge: iS61{( ceilDiv(( ( ceilDiv(i3, 8) ) * i11 ), 8) )} and iS59{( ceilDiv(8, 8) )} -> iS63{( ( ceilDiv(( ( ceilDiv(i3, 8) ) * i11 ), 8) ) * ( ceilDiv(8, 8) ) )}
  Split: iS63{( ( ceilDiv(( ( ceilDiv(i3, 8) ) * i11 ), 8) ) * ( ceilDiv(8, 8) ) )} by factor 1 -> iblockIdx.x64{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i3, 8) ) * i11 ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}, iUS65{1}, start offset: 0, stop offset: 0
  Merge: iS62{8} and iS60{8} -> iS283{( 8 * 8 )}
  Split: iS283{( 8 * 8 )} by factor 2 -> iS284{( ceilDiv(( 8 * 8 ), 2) )}, iV285{2}, start offset: 0, stop offset: 0
  Split: iS284{( ceilDiv(( 8 * 8 ), 2) )} by factor 32 -> iUR286{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}, ithreadIdx.x287{32}, start offset: 0, stop offset: 0
}

ca map

Compute at map { 
Permissive map:
  {iS217{( 8 * 8 )}*; iS212{( 8 * 8 )} }
  {iS218{( ceilDiv(( 8 * 8 ), 1) )}*; iS213{( ceilDiv(( 8 * 8 ), 1) )} }
  {iUR220{( ceilDiv(( ceilDiv(( 8 * 8 ), 1) ), 32) )}*; iS215{( ceilDiv(( ceilDiv(( 8 * 8 ), 1) ), 32) )} }
  {ithreadIdx.x221{32}*; iS216{32} }
  {iS219{1}*; iS214{1} }
  {rS367{i5}* }
  {iS267{( ceilDiv(8, 1) )}*; iS271{( ceilDiv(8, 1) )} }
  {iS269{( ceilDiv(( ceilDiv(8, 1) ), 32) )}*; iS273{( ceilDiv(( ceilDiv(8, 1) ), 32) )} }
  {ithreadIdx.x270{32}*; iS274{32} }
  {iS268{1}*; iS272{1} }
  {rS368{i5}* }
  {iS275{( ceilDiv(8, 1) )}*; iS279{( ceilDiv(8, 1) )} }
  {iS277{( ceilDiv(( ceilDiv(8, 1) ), 32) )}*; iS281{( ceilDiv(( ceilDiv(8, 1) ), 32) )} }
  {ithreadIdx.x278{32}*; iS282{32} }
  {iS276{1}*; iS280{1} }
  {iS343{i5}*; iS345{i5}; bS37{1}; bS47{1}; bS9{1}; iS350{i5}; iS352{i5}; iS354{i5}; iS356{i5}; bS23{1}; iS31{i5}; iS52{i5}; iS13{i5}; bS29{1} }
  {iS56{( ceilDiv(i5, 8) )}*; iS66{( ceilDiv(i5, 8) )}; bS166{( ceilDiv(1, 8) )}; bS176{( ceilDiv(1, 8) )}; bS186{( ceilDiv(1, 8) )}; iS76{( ceilDiv(i5, 8) )}; iS126{( ceilDiv(i5, 8) )}; iS146{( ceilDiv(i5, 8) )}; iS156{( ceilDiv(i5, 8) )}; bS136{( ceilDiv(1, 8) )}; iS86{( ceilDiv(i5, 8) )}; iS106{( ceilDiv(i5, 8) )}; iS116{( ceilDiv(i5, 8) )}; bS96{( ceilDiv(1, 8) )} }
  {iS58{( ( ceilDiv(i5, 8) ) * T5.size[0] )}*; iS344{T5.size[0]}; iS346{T5.size[0]}; iS347{T5.size[0]}; iS348{T5.size[0]}; iS349{T5.size[0]}; iS68{( ( ceilDiv(i5, 8) ) * T5.size[0] )}; iS168{( ( ceilDiv(1, 8) ) * T5.size[0] )}; iS178{( ( ceilDiv(1, 8) ) * T5.size[0] )}; iS188{( ( ceilDiv(1, 8) ) * T5.size[0] )}; iS78{( ( ceilDiv(i5, 8) ) * T5.size[0] )}; iS351{T5.size[0]}; iS128{( ( ceilDiv(i5, 8) ) * T5.size[0] )}; iS148{( ( ceilDiv(i5, 8) ) * T5.size[0] )}; iS158{( ( ceilDiv(i5, 8) ) * T5.size[0] )}; iS353{T5.size[0]}; iS355{T5.size[0]}; iS357{T5.size[0]}; iS358{T5.size[0]}; iS138{( ( ceilDiv(1, 8) ) * T5.size[0] )}; iS359{T5.size[0]}; iS360{T5.size[0]}; iS88{( ( ceilDiv(i5, 8) ) * T5.size[0] )}; iS108{( ( ceilDiv(i5, 8) ) * T5.size[0] )}; iS118{( ( ceilDiv(i5, 8) ) * T5.size[0] )}; iS361{T5.size[0]}; iS362{T5.size[0]}; iS363{T5.size[0]}; iS364{T5.size[0]}; iS98{( ( ceilDiv(1, 8) ) * T5.size[0] )}; iS365{T5.size[0]}; iS366{T5.size[0]} }
  {iS61{( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) )}*; iS69{( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) )}; iS169{( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) )}; iS179{( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) )}; iS189{( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) )}; iS79{( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) )}; iS129{( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) )}; iS149{( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) )}; iS159{( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) )}; iS139{( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) )}; iS89{( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) )}; iS109{( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) )}; iS119{( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) )}; iS99{( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) )} }
  {iS57{8}*; iS67{8}; bS167{8}; bS177{8}; bS187{8}; iS77{8}; iS127{8}; iS147{8}; iS157{8}; bS137{8}; iS87{8}; iS107{8}; iS117{8}; bS97{8} }
  {iS59{( ceilDiv(8, 8) )}*; iS71{( ceilDiv(8, 8) )}; bS171{( ceilDiv(8, 8) )}; bS181{( ceilDiv(8, 8) )}; bS191{( ceilDiv(8, 8) )}; iS81{( ceilDiv(8, 8) )}; iS131{( ceilDiv(8, 8) )}; iS151{( ceilDiv(8, 8) )}; iS161{( ceilDiv(8, 8) )}; bS141{( ceilDiv(8, 8) )}; iS91{( ceilDiv(8, 8) )}; iS111{( ceilDiv(8, 8) )}; iS121{( ceilDiv(8, 8) )}; bS101{( ceilDiv(8, 8) )} }
  {iS63{( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )}*; iS73{( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )}; iS173{( ( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )}; iS183{( ( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )}; iS193{( ( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )}; iS83{( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )}; iS133{( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )}; iS153{( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )}; iS163{( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )}; iS143{( ( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )}; iS196{( ceilDiv(T5.size[0], 8) )}; iS200{( ceilDiv(T5.size[0], 8) )}; iS93{( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )}; iS113{( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )}; iS123{( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )}; iS103{( ( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )}; iS204{( ceilDiv(T5.size[0], 8) )}; iS208{( ceilDiv(T5.size[0], 8) )} }
  {iblockIdx.x64{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}*; iblockIdx.x74{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}; iblockIdx.x174{( ceilDiv(( ( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}; iblockIdx.x184{( ceilDiv(( ( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}; iS194{( ceilDiv(( ( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}; iblockIdx.x84{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}; iblockIdx.x134{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}; iblockIdx.x154{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}; iS164{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}; iblockIdx.x144{( ceilDiv(( ( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}; iblockIdx.x198{( ceilDiv(( ceilDiv(T5.size[0], 8) ), 1) )}; iS202{( ceilDiv(( ceilDiv(T5.size[0], 8) ), 1) )}; iblockIdx.x94{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}; iblockIdx.x114{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}; iS124{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}; iblockIdx.x104{( ceilDiv(( ( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}; iblockIdx.x206{( ceilDiv(( ceilDiv(T5.size[0], 8) ), 1) )}; iS210{( ceilDiv(( ceilDiv(T5.size[0], 8) ), 1) )} }
  {iUS65{1}*; iUS75{1}; iUS175{1}; iUS185{1}; iS195{1}; iUS85{1}; iUS135{1}; iUS155{1}; iS165{1}; iUS145{1}; iUS199{1}; iS203{1}; iUS95{1}; iUS115{1}; iS125{1}; iUS105{1}; iUS207{1}; iS211{1} }
  {iS62{8}*; iS70{8}; iS170{8}; iS180{8}; iS190{8}; iS80{8}; iS130{8}; iS150{8}; iS160{8}; iS140{8}; iS90{8}; iS110{8}; iS120{8}; iS100{8} }
  {iS60{8}*; iS72{8}; bS172{8}; bS182{8}; bS192{8}; iS82{8}; iS132{8}; iS152{8}; iS162{8}; bS142{8}; iS92{8}; iS112{8}; iS122{8}; bS102{8} }
  {iS283{( 8 * 8 )}*; iS288{( 8 * 8 )}; iS338{( 8 * 8 )}; iS293{( 8 * 8 )}; iS318{( 8 * 8 )}; iS328{( 8 * 8 )}; iS333{( 8 * 8 )}; iS323{( 8 * 8 )}; iS197{8}; iS201{8}; iS298{( 8 * 8 )}; iS308{( 8 * 8 )}; iS313{( 8 * 8 )}; iS303{( 8 * 8 )}; iS205{8}; iS209{8} }
  {iS284{( ceilDiv(( 8 * 8 ), 2) )}*; iS289{( ceilDiv(( 8 * 8 ), 2) )}; iS339{( ceilDiv(( 8 * 8 ), 2) )}; iS294{( ceilDiv(( 8 * 8 ), 2) )}; iS319{( ceilDiv(( 8 * 8 ), 2) )}; iS329{( ceilDiv(( 8 * 8 ), 2) )}; iS334{( ceilDiv(( 8 * 8 ), 2) )}; iS324{( ceilDiv(( 8 * 8 ), 2) )}; iS299{( ceilDiv(( 8 * 8 ), 2) )}; iS309{( ceilDiv(( 8 * 8 ), 2) )}; iS314{( ceilDiv(( 8 * 8 ), 2) )}; iS304{( ceilDiv(( 8 * 8 ), 2) )} }
  {iUR286{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}*; iS291{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}; iS341{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}; iS296{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}; iS321{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}; iUR331{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}; iS336{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}; iS326{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}; iS301{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}; iUR311{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}; iS316{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}; iS306{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )} }
  {ithreadIdx.x287{32}*; ithreadIdx.x292{32}; ithreadIdx.x342{32}; ithreadIdx.x297{32}; ithreadIdx.x322{32}; ithreadIdx.x332{32}; iS337{32}; ithreadIdx.x327{32}; ithreadIdx.x302{32}; ithreadIdx.x312{32}; iS317{32}; ithreadIdx.x307{32} }
  {iV285{2}*; iS290{2}; iS340{2}; iS295{2}; iS320{2}; iV330{2}; iS335{2}; iS325{2}; iS300{2}; iV310{2}; iS315{2}; iS305{2} }
Exact map:
  {iS217{( 8 * 8 )}*; iS212{( 8 * 8 )} }
  {iS218{( ceilDiv(( 8 * 8 ), 1) )}*; iS213{( ceilDiv(( 8 * 8 ), 1) )} }
  {iUR220{( ceilDiv(( ceilDiv(( 8 * 8 ), 1) ), 32) )}*; iS215{( ceilDiv(( ceilDiv(( 8 * 8 ), 1) ), 32) )} }
  {ithreadIdx.x221{32}*; iS216{32} }
  {iS219{1}*; iS214{1} }
  {bS37{1}*; bS47{1}; bS9{1} }
  {bS166{( ceilDiv(1, 8) )}*; bS176{( ceilDiv(1, 8) )}; bS186{( ceilDiv(1, 8) )} }
  {iS168{( ( ceilDiv(1, 8) ) * T5.size[0] )}*; iS178{( ( ceilDiv(1, 8) ) * T5.size[0] )}; iS188{( ( ceilDiv(1, 8) ) * T5.size[0] )} }
  {iS169{( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) )}*; iS179{( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) )}; iS189{( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) )} }
  {bS167{8}*; bS177{8}; bS187{8} }
  {bS171{( ceilDiv(8, 8) )}*; bS181{( ceilDiv(8, 8) )}; bS191{( ceilDiv(8, 8) )} }
  {iS173{( ( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )}*; iS183{( ( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )}; iS193{( ( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )} }
  {iblockIdx.x174{( ceilDiv(( ( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}*; iblockIdx.x184{( ceilDiv(( ( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}; iS194{( ceilDiv(( ( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )} }
  {iUS175{1}*; iUS185{1}; iS195{1} }
  {iS170{8}*; iS180{8}; iS190{8} }
  {bS172{8}*; bS182{8}; bS192{8} }
  {iS338{( 8 * 8 )}* }
  {iS339{( ceilDiv(( 8 * 8 ), 2) )}* }
  {iS341{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}* }
  {ithreadIdx.x342{32}* }
  {iS340{2}* }
  {rS367{i5}* }
  {iS196{( ceilDiv(T5.size[0], 8) )}*; iS200{( ceilDiv(T5.size[0], 8) )} }
  {iblockIdx.x198{( ceilDiv(( ceilDiv(T5.size[0], 8) ), 1) )}*; iS202{( ceilDiv(( ceilDiv(T5.size[0], 8) ), 1) )} }
  {iUS199{1}*; iS203{1} }
  {iS197{8}*; iS201{8} }
  {iS267{( ceilDiv(8, 1) )}*; iS271{( ceilDiv(8, 1) )} }
  {iS269{( ceilDiv(( ceilDiv(8, 1) ), 32) )}*; iS273{( ceilDiv(( ceilDiv(8, 1) ), 32) )} }
  {ithreadIdx.x270{32}*; iS274{32} }
  {iS268{1}*; iS272{1} }
  {bS23{1}* }
  {bS136{( ceilDiv(1, 8) )}* }
  {iS138{( ( ceilDiv(1, 8) ) * T5.size[0] )}* }
  {iS139{( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) )}* }
  {bS137{8}* }
  {bS141{( ceilDiv(8, 8) )}* }
  {iS143{( ( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )}* }
  {iblockIdx.x144{( ceilDiv(( ( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}* }
  {iUS145{1}* }
  {iS140{8}* }
  {bS142{8}* }
  {iS323{( 8 * 8 )}* }
  {iS324{( ceilDiv(( 8 * 8 ), 2) )}* }
  {iS326{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}* }
  {ithreadIdx.x327{32}* }
  {iS325{2}* }
  {rS368{i5}* }
  {iS204{( ceilDiv(T5.size[0], 8) )}*; iS208{( ceilDiv(T5.size[0], 8) )} }
  {iblockIdx.x206{( ceilDiv(( ceilDiv(T5.size[0], 8) ), 1) )}*; iS210{( ceilDiv(( ceilDiv(T5.size[0], 8) ), 1) )} }
  {iUS207{1}*; iS211{1} }
  {iS205{8}*; iS209{8} }
  {iS275{( ceilDiv(8, 1) )}*; iS279{( ceilDiv(8, 1) )} }
  {iS277{( ceilDiv(( ceilDiv(8, 1) ), 32) )}*; iS281{( ceilDiv(( ceilDiv(8, 1) ), 32) )} }
  {ithreadIdx.x278{32}*; iS282{32} }
  {iS276{1}*; iS280{1} }
  {bS29{1}* }
  {bS96{( ceilDiv(1, 8) )}* }
  {iS98{( ( ceilDiv(1, 8) ) * T5.size[0] )}* }
  {iS99{( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) )}* }
  {bS97{8}* }
  {bS101{( ceilDiv(8, 8) )}* }
  {iS103{( ( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )}* }
  {iblockIdx.x104{( ceilDiv(( ( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}* }
  {iUS105{1}* }
  {iS100{8}* }
  {bS102{8}* }
  {iS303{( 8 * 8 )}* }
  {iS304{( ceilDiv(( 8 * 8 ), 2) )}* }
  {iS306{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}* }
  {ithreadIdx.x307{32}* }
  {iS305{2}* }
  {iS343{i5}*; iS345{i5}; iS350{i5}; iS352{i5}; iS354{i5}; iS356{i5}; iS31{i5}; iS52{i5}; iS13{i5} }
  {iS56{( ceilDiv(i5, 8) )}*; iS66{( ceilDiv(i5, 8) )}; iS76{( ceilDiv(i5, 8) )}; iS126{( ceilDiv(i5, 8) )}; iS146{( ceilDiv(i5, 8) )}; iS156{( ceilDiv(i5, 8) )}; iS86{( ceilDiv(i5, 8) )}; iS106{( ceilDiv(i5, 8) )}; iS116{( ceilDiv(i5, 8) )} }
  {iS344{T5.size[0]}*; iS346{T5.size[0]}; iS347{T5.size[0]}; iS348{T5.size[0]}; iS349{T5.size[0]}; iS351{T5.size[0]}; iS353{T5.size[0]}; iS355{T5.size[0]}; iS357{T5.size[0]}; iS358{T5.size[0]}; iS359{T5.size[0]}; iS360{T5.size[0]}; iS361{T5.size[0]}; iS362{T5.size[0]}; iS363{T5.size[0]}; iS364{T5.size[0]}; iS365{T5.size[0]}; iS366{T5.size[0]} }
  {iS58{( ( ceilDiv(i5, 8) ) * T5.size[0] )}*; iS68{( ( ceilDiv(i5, 8) ) * T5.size[0] )}; iS78{( ( ceilDiv(i5, 8) ) * T5.size[0] )}; iS128{( ( ceilDiv(i5, 8) ) * T5.size[0] )}; iS148{( ( ceilDiv(i5, 8) ) * T5.size[0] )}; iS158{( ( ceilDiv(i5, 8) ) * T5.size[0] )}; iS88{( ( ceilDiv(i5, 8) ) * T5.size[0] )}; iS108{( ( ceilDiv(i5, 8) ) * T5.size[0] )}; iS118{( ( ceilDiv(i5, 8) ) * T5.size[0] )} }
  {iS61{( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) )}*; iS69{( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) )}; iS79{( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) )}; iS129{( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) )}; iS149{( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) )}; iS159{( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) )}; iS89{( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) )}; iS109{( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) )}; iS119{( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) )} }
  {iS57{8}*; iS67{8}; iS77{8}; iS127{8}; iS147{8}; iS157{8}; iS87{8}; iS107{8}; iS117{8} }
  {iS59{( ceilDiv(8, 8) )}*; iS71{( ceilDiv(8, 8) )}; iS81{( ceilDiv(8, 8) )}; iS131{( ceilDiv(8, 8) )}; iS151{( ceilDiv(8, 8) )}; iS161{( ceilDiv(8, 8) )}; iS91{( ceilDiv(8, 8) )}; iS111{( ceilDiv(8, 8) )}; iS121{( ceilDiv(8, 8) )} }
  {iS63{( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )}*; iS73{( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )}; iS83{( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )}; iS133{( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )}; iS153{( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )}; iS163{( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )}; iS93{( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )}; iS113{( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )}; iS123{( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )} }
  {iblockIdx.x64{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}*; iblockIdx.x74{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}; iblockIdx.x84{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}; iblockIdx.x134{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}; iblockIdx.x154{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}; iS164{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}; iblockIdx.x94{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}; iblockIdx.x114{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}; iS124{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )} }
  {iUS65{1}*; iUS75{1}; iUS85{1}; iUS135{1}; iUS155{1}; iS165{1}; iUS95{1}; iUS115{1}; iS125{1} }
  {iS62{8}*; iS70{8}; iS80{8}; iS130{8}; iS150{8}; iS160{8}; iS90{8}; iS110{8}; iS120{8} }
  {iS60{8}*; iS72{8}; iS82{8}; iS132{8}; iS152{8}; iS162{8}; iS92{8}; iS112{8}; iS122{8} }
  {iS283{( 8 * 8 )}*; iS288{( 8 * 8 )}; iS293{( 8 * 8 )}; iS318{( 8 * 8 )}; iS328{( 8 * 8 )}; iS333{( 8 * 8 )}; iS298{( 8 * 8 )}; iS308{( 8 * 8 )}; iS313{( 8 * 8 )} }
  {iS284{( ceilDiv(( 8 * 8 ), 2) )}*; iS289{( ceilDiv(( 8 * 8 ), 2) )}; iS294{( ceilDiv(( 8 * 8 ), 2) )}; iS319{( ceilDiv(( 8 * 8 ), 2) )}; iS329{( ceilDiv(( 8 * 8 ), 2) )}; iS334{( ceilDiv(( 8 * 8 ), 2) )}; iS299{( ceilDiv(( 8 * 8 ), 2) )}; iS309{( ceilDiv(( 8 * 8 ), 2) )}; iS314{( ceilDiv(( 8 * 8 ), 2) )} }
  {iUR286{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}*; iS291{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}; iS296{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}; iS321{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}; iUR331{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}; iS336{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}; iS301{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}; iUR311{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}; iS316{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )} }
  {ithreadIdx.x287{32}*; ithreadIdx.x292{32}; ithreadIdx.x297{32}; ithreadIdx.x322{32}; ithreadIdx.x332{32}; iS337{32}; ithreadIdx.x302{32}; ithreadIdx.x312{32}; iS317{32} }
  {iV285{2}*; iS290{2}; iS295{2}; iS320{2}; iV330{2}; iS335{2}; iS300{2}; iV310{2}; iS315{2} }
Loop map:
  {iS194{( ceilDiv(( ( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}* }
  {iS195{1}* }
  {iS215{( ceilDiv(( ceilDiv(( 8 * 8 ), 1) ), 32) )}* }
  {iS216{32}* }
  {iS214{1}* }
  {iUR220{( ceilDiv(( ceilDiv(( 8 * 8 ), 1) ), 32) )}* }
  {ithreadIdx.x221{32}* }
  {iS219{1}* }
  {iS164{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}* }
  {iS165{1}* }
  {iS336{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}* }
  {iS337{32}* }
  {iS335{2}* }
  {iUR331{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}* }
  {ithreadIdx.x332{32}* }
  {iV330{2}* }
  {iS202{( ceilDiv(( ceilDiv(T5.size[0], 8) ), 1) )}* }
  {iS203{1}* }
  {iS273{( ceilDiv(( ceilDiv(8, 1) ), 32) )}* }
  {iS274{32}* }
  {iS272{1}* }
  {rS367{i5}* }
  {iS269{( ceilDiv(( ceilDiv(8, 1) ), 32) )}* }
  {ithreadIdx.x270{32}* }
  {iS268{1}* }
  {iS124{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}* }
  {iS125{1}* }
  {iS316{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}* }
  {iS317{32}* }
  {iS315{2}* }
  {iUR311{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}* }
  {ithreadIdx.x312{32}* }
  {iV310{2}* }
  {iS210{( ceilDiv(( ceilDiv(T5.size[0], 8) ), 1) )}* }
  {iS211{1}* }
  {iS281{( ceilDiv(( ceilDiv(8, 1) ), 32) )}* }
  {iS282{32}* }
  {iS280{1}* }
  {rS368{i5}* }
  {iS277{( ceilDiv(( ceilDiv(8, 1) ), 32) )}* }
  {ithreadIdx.x278{32}* }
  {iS276{1}* }
  {iS291{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}*; iS341{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}; iS296{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}; iS321{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}; iS326{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}; iS301{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}; iS306{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )} }
  {ithreadIdx.x292{32}*; ithreadIdx.x342{32}; ithreadIdx.x297{32}; ithreadIdx.x322{32}; ithreadIdx.x327{32}; ithreadIdx.x302{32}; ithreadIdx.x307{32} }
  {iS290{2}*; iS340{2}; iS295{2}; iS320{2}; iS325{2}; iS300{2}; iS305{2} }
  {iblockIdx.x64{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}*; iblockIdx.x74{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}; iblockIdx.x174{( ceilDiv(( ( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}; iblockIdx.x184{( ceilDiv(( ( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}; iblockIdx.x84{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}; iblockIdx.x134{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}; iblockIdx.x154{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}; iblockIdx.x144{( ceilDiv(( ( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}; iblockIdx.x198{( ceilDiv(( ceilDiv(T5.size[0], 8) ), 1) )}; iblockIdx.x94{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}; iblockIdx.x114{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}; iblockIdx.x104{( ceilDiv(( ( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}; iblockIdx.x206{( ceilDiv(( ceilDiv(T5.size[0], 8) ), 1) )} }
  {iUS65{1}*; iUS75{1}; iUS175{1}; iUS185{1}; iUS85{1}; iUS135{1}; iUS155{1}; iUS145{1}; iUS199{1}; iUS95{1}; iUS115{1}; iUS105{1}; iUS207{1} }
  {iUR286{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}* }
  {ithreadIdx.x287{32}* }
  {iV285{2}* }
Consumer maps:
  iV285{2} :: {  }
  iUR286{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )} :: {  }
  iS284{( ceilDiv(( 8 * 8 ), 2) )} :: {  }
  iS62{8} :: {  }
  iblockIdx.x64{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )} :: {  }
  iS63{( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )} :: {  }
  iS59{( ceilDiv(8, 8) )} :: {  }
  iS58{( ( ceilDiv(i5, 8) ) * T5.size[0] )} :: {  }
  iS344{T5.size[0]} :: {  }
  iS343{i5} :: {  }
  ithreadIdx.x292{32} :: { ithreadIdx.x287{32} }
  iS127{8} :: { iS77{8} }
  iS164{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )} :: { iblockIdx.x154{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )} }
  iS194{( ceilDiv(( ( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )} :: { iblockIdx.x184{( ceilDiv(( ( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )} }
  iS366{T5.size[0]} :: { iS365{T5.size[0]} }
  iS353{T5.size[0]} :: { iS351{T5.size[0]} }
  iS323{( 8 * 8 )} :: { iS318{( 8 * 8 )} }
  iUS185{1} :: { iUS175{1} }
  ithreadIdx.x302{32} :: { ithreadIdx.x297{32} }
  bS136{( ceilDiv(1, 8) )} :: { iS126{( ceilDiv(i5, 8) )} }
  bS23{1} :: { iS352{i5} }
  bS102{8} :: { iS92{8} }
  ithreadIdx.x270{32} :: {  }
  iUS199{1} :: { iUS145{1} }
  iS267{( ceilDiv(8, 1) )} :: {  }
  iS69{( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) )} :: { iS61{( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) )} }
  iS274{32} :: { ithreadIdx.x270{32} }
  iS180{8} :: { iS170{8} }
  iblockIdx.x184{( ceilDiv(( ( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )} :: { iblockIdx.x174{( ceilDiv(( ( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )} }
  iS279{( ceilDiv(8, 1) )} :: { iS275{( ceilDiv(8, 1) )} }
  iS305{2} :: { iS300{2} }
  iV330{2} :: { iS320{2} }
  iS300{2} :: { iS295{2} }
  iUR331{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )} :: { iS321{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )} }
  iS360{T5.size[0]} :: { iS359{T5.size[0]} }
  iS329{( ceilDiv(( 8 * 8 ), 2) )} :: { iS319{( ceilDiv(( 8 * 8 ), 2) )} }
  iS202{( ceilDiv(( ceilDiv(T5.size[0], 8) ), 1) )} :: { iblockIdx.x198{( ceilDiv(( ceilDiv(T5.size[0], 8) ), 1) )} }
  iS269{( ceilDiv(( ceilDiv(8, 1) ), 32) )} :: {  }
  iS78{( ( ceilDiv(i5, 8) ) * T5.size[0] )} :: { iS68{( ( ceilDiv(i5, 8) ) * T5.size[0] )} }
  iS152{8} :: { iS132{8} }
  iS271{( ceilDiv(8, 1) )} :: { iS267{( ceilDiv(8, 1) )} }
  iS129{( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) )} :: { iS79{( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) )} }
  iS200{( ceilDiv(T5.size[0], 8) )} :: { iS196{( ceilDiv(T5.size[0], 8) )} }
  iS150{8} :: { iS130{8} }
  iS193{( ( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )} :: { iS183{( ( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )} }
  iS148{( ( ceilDiv(i5, 8) ) * T5.size[0] )} :: { iS128{( ( ceilDiv(i5, 8) ) * T5.size[0] )} }
  iblockIdx.x154{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )} :: { iblockIdx.x134{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )} }
  iS349{T5.size[0]} :: { iS348{T5.size[0]} }
  iS355{T5.size[0]} :: { iS353{T5.size[0]} }
  iS313{( 8 * 8 )} :: { iS308{( 8 * 8 )} }
  iS354{i5} :: { iS352{i5} }
  iS275{( ceilDiv(8, 1) )} :: {  }
  iS336{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )} :: { iUR331{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )} }
  iS350{i5} :: { iS345{i5} }
  iS326{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )} :: { iS321{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )} }
  iS333{( 8 * 8 )} :: { iS328{( 8 * 8 )} }
  iS162{8} :: { iS152{8} }
  iS128{( ( ceilDiv(i5, 8) ) * T5.size[0] )} :: { iS78{( ( ceilDiv(i5, 8) ) * T5.size[0] )} }
  iS153{( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )} :: { iS133{( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )} }
  iS317{32} :: { ithreadIdx.x312{32} }
  iS146{( ceilDiv(i5, 8) )} :: { iS126{( ceilDiv(i5, 8) )} }
  iS123{( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )} :: { iS113{( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )} }
  iS201{8} :: { iS197{8} }
  iUS145{1} :: { iUS135{1} }
  bS177{8} :: { bS167{8} }
  iS268{1} :: {  }
  iS178{( ( ceilDiv(1, 8) ) * T5.size[0] )} :: { iS168{( ( ceilDiv(1, 8) ) * T5.size[0] )} }
  bS176{( ceilDiv(1, 8) )} :: { bS166{( ceilDiv(1, 8) )} }
  iS289{( ceilDiv(( 8 * 8 ), 2) )} :: { iS284{( ceilDiv(( 8 * 8 ), 2) )} }
  iS324{( ceilDiv(( 8 * 8 ), 2) )} :: { iS319{( ceilDiv(( 8 * 8 ), 2) )} }
  iS214{1} :: { iS219{1} }
  iS121{( ceilDiv(8, 8) )} :: { iS111{( ceilDiv(8, 8) )} }
  bS172{8} :: { iS72{8} }
  iUS85{1} :: { iUS75{1} }
  bS9{1} :: { bS47{1} }
  iS212{( 8 * 8 )} :: { iS217{( 8 * 8 )} }
  iblockIdx.x94{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )} :: { iblockIdx.x84{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )} }
  bS141{( ceilDiv(8, 8) )} :: { iS131{( ceilDiv(8, 8) )} }
  iS215{( ceilDiv(( ceilDiv(( 8 * 8 ), 1) ), 32) )} :: { iUR220{( ceilDiv(( ceilDiv(( 8 * 8 ), 1) ), 32) )} }
  iS112{8} :: { iS92{8} }
  iS76{( ceilDiv(i5, 8) )} :: { iS66{( ceilDiv(i5, 8) )} }
  iS351{T5.size[0]} :: { iS346{T5.size[0]} }
  iS159{( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) )} :: { iS149{( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) )} }
  iS90{8} :: { iS80{8} }
  iS359{T5.size[0]} :: { iS358{T5.size[0]}; iS138{( ( ceilDiv(1, 8) ) * T5.size[0] )} }
  iS352{i5} :: { iS350{i5} }
  iS356{i5} :: { iS354{i5} }
  iS347{T5.size[0]} :: { iS346{T5.size[0]} }
  bS182{8} :: { bS172{8} }
  iS147{8} :: { iS127{8} }
  bS167{8} :: { iS67{8} }
  bS192{8} :: { bS182{8} }
  iS108{( ( ceilDiv(i5, 8) ) * T5.size[0] )} :: { iS88{( ( ceilDiv(i5, 8) ) * T5.size[0] )} }
  bS166{( ceilDiv(1, 8) )} :: { iS66{( ceilDiv(i5, 8) )} }
  iS189{( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) )} :: { iS179{( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) )} }
  iblockIdx.x144{( ceilDiv(( ( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )} :: { iblockIdx.x134{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )} }
  iS211{1} :: { iUS207{1} }
  iS217{( 8 * 8 )} :: {  }
  iS277{( ceilDiv(( ceilDiv(8, 1) ), 32) )} :: {  }
  iS188{( ( ceilDiv(1, 8) ) * T5.size[0] )} :: { iS178{( ( ceilDiv(1, 8) ) * T5.size[0] )} }
  iS116{( ceilDiv(i5, 8) )} :: { iS106{( ceilDiv(i5, 8) )} }
  iS341{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )} :: { iS291{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )} }
  iS139{( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) )} :: { iS129{( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) )} }
  ithreadIdx.x332{32} :: { ithreadIdx.x322{32} }
  iS213{( ceilDiv(( 8 * 8 ), 1) )} :: { iS218{( ceilDiv(( 8 * 8 ), 1) )} }
  iS315{2} :: { iV310{2} }
  iS308{( 8 * 8 )} :: { iS298{( 8 * 8 )} }
  iS168{( ( ceilDiv(1, 8) ) * T5.size[0] )} :: { iS68{( ( ceilDiv(i5, 8) ) * T5.size[0] )} }
  iS138{( ( ceilDiv(1, 8) ) * T5.size[0] )} :: { iS128{( ( ceilDiv(i5, 8) ) * T5.size[0] )} }
  iV310{2} :: { iS300{2} }
  ithreadIdx.x327{32} :: { ithreadIdx.x322{32} }
  iS348{T5.size[0]} :: { iS347{T5.size[0]} }
  bS96{( ceilDiv(1, 8) )} :: { iS86{( ceilDiv(i5, 8) )} }
  iS56{( ceilDiv(i5, 8) )} :: {  }
  iS151{( ceilDiv(8, 8) )} :: { iS131{( ceilDiv(8, 8) )} }
  iS190{8} :: { iS180{8} }
  iUS135{1} :: { iUS85{1} }
  iS335{2} :: { iV330{2} }
  iS79{( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) )} :: { iS69{( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) )} }
  iS196{( ceilDiv(T5.size[0], 8) )} :: { iS143{( ( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )} }
  iUR220{( ceilDiv(( ceilDiv(( 8 * 8 ), 1) ), 32) )} :: {  }
  iUS75{1} :: { iUS65{1} }
  rS367{i5} :: {  }
  bS47{1} :: { bS37{1} }
  iblockIdx.x206{( ceilDiv(( ceilDiv(T5.size[0], 8) ), 1) )} :: { iblockIdx.x104{( ceilDiv(( ( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )} }
  iS60{8} :: {  }
  iS219{1} :: {  }
  bS37{1} :: { iS345{i5} }
  iS156{( ceilDiv(i5, 8) )} :: { iS146{( ceilDiv(i5, 8) )} }
  iS204{( ceilDiv(T5.size[0], 8) )} :: { iS103{( ( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )} }
  bS186{( ceilDiv(1, 8) )} :: { bS176{( ceilDiv(1, 8) )} }
  iS165{1} :: { iUS155{1} }
  iS197{8} :: { iS323{( 8 * 8 )} }
  bS171{( ceilDiv(8, 8) )} :: { iS71{( ceilDiv(8, 8) )} }
  iS273{( ceilDiv(( ceilDiv(8, 1) ), 32) )} :: { iS269{( ceilDiv(( ceilDiv(8, 1) ), 32) )} }
  iS337{32} :: { ithreadIdx.x332{32} }
  iS107{8} :: { iS87{8} }
  iS303{( 8 * 8 )} :: { iS298{( 8 * 8 )} }
  iS339{( ceilDiv(( 8 * 8 ), 2) )} :: { iS289{( ceilDiv(( 8 * 8 ), 2) )} }
  iblockIdx.x174{( ceilDiv(( ( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )} :: { iblockIdx.x74{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )} }
  iUS175{1} :: { iUS75{1} }
  iS216{32} :: { ithreadIdx.x221{32} }
  iS170{8} :: { iS70{8} }
  bS137{8} :: { iS127{8} }
  iS157{8} :: { iS147{8} }
  iS195{1} :: { iUS185{1} }
  iS290{2} :: { iV285{2} }
  bS181{( ceilDiv(8, 8) )} :: { bS171{( ceilDiv(8, 8) )} }
  iS203{1} :: { iUS199{1} }
  iS338{( 8 * 8 )} :: { iS288{( 8 * 8 )} }
  bS187{8} :: { bS177{8} }
  ithreadIdx.x312{32} :: { ithreadIdx.x302{32} }
  ithreadIdx.x342{32} :: { ithreadIdx.x292{32} }
  iS282{32} :: { ithreadIdx.x278{32} }
  rS368{i5} :: {  }
  iS340{2} :: { iS290{2} }
  iUS65{1} :: {  }
  iS173{( ( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )} :: { iS73{( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )} }
  iS357{T5.size[0]} :: { iS355{T5.size[0]} }
  iS325{2} :: { iS320{2} }
  iS133{( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )} :: { iS83{( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )} }
  iS272{1} :: { iS268{1} }
  iS163{( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )} :: { iS153{( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )} }
  iS131{( ceilDiv(8, 8) )} :: { iS81{( ceilDiv(8, 8) )} }
  iblockIdx.x134{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )} :: { iblockIdx.x84{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )} }
  iS130{8} :: { iS80{8} }
  iS132{8} :: { iS82{8} }
  iS140{8} :: { iS130{8} }
  iS169{( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) )} :: { iS69{( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) )} }
  iS318{( 8 * 8 )} :: { iS293{( 8 * 8 )} }
  iS319{( ceilDiv(( 8 * 8 ), 2) )} :: { iS294{( ceilDiv(( 8 * 8 ), 2) )} }
  iS321{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )} :: { iS296{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )} }
  iS122{8} :: { iS112{8} }
  iUS115{1} :: { iUS95{1} }
  ithreadIdx.x297{32} :: { ithreadIdx.x292{32} }
  iS99{( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) )} :: { iS89{( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) )} }
  ithreadIdx.x322{32} :: { ithreadIdx.x297{32} }
  iS320{2} :: { iS295{2} }
  iS365{T5.size[0]} :: { iS364{T5.size[0]}; iS98{( ( ceilDiv(1, 8) ) * T5.size[0] )} }
  iS71{( ceilDiv(8, 8) )} :: { iS59{( ceilDiv(8, 8) )} }
  iS13{i5} :: { iS52{i5} }
  iS363{T5.size[0]} :: { iS362{T5.size[0]} }
  iS92{8} :: { iS82{8} }
  iS179{( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) )} :: { iS169{( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) )} }
  iS118{( ( ceilDiv(i5, 8) ) * T5.size[0] )} :: { iS108{( ( ceilDiv(i5, 8) ) * T5.size[0] )} }
  iS117{8} :: { iS107{8} }
  iS119{( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) )} :: { iS109{( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) )} }
  iS295{2} :: { iS290{2} }
  iS124{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )} :: { iblockIdx.x114{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )} }
  iS125{1} :: { iUS115{1} }
  bS142{8} :: { iS132{8} }
  iS120{8} :: { iS110{8} }
  iS314{( ceilDiv(( 8 * 8 ), 2) )} :: { iS309{( ceilDiv(( 8 * 8 ), 2) )} }
  iUS207{1} :: { iUS105{1} }
  iS160{8} :: { iS150{8} }
  iblockIdx.x74{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )} :: { iblockIdx.x64{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )} }
  iS52{i5} :: { iS31{i5} }
  iS103{( ( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )} :: { iS93{( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )} }
  iS106{( ceilDiv(i5, 8) )} :: { iS86{( ceilDiv(i5, 8) )} }
  iS109{( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) )} :: { iS89{( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) )} }
  iS111{( ceilDiv(8, 8) )} :: { iS91{( ceilDiv(8, 8) )} }
  iS126{( ceilDiv(i5, 8) )} :: { iS76{( ceilDiv(i5, 8) )} }
  iS113{( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )} :: { iS93{( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )} }
  iS57{8} :: {  }
  iblockIdx.x114{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )} :: { iblockIdx.x94{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )} }
  iS89{( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) )} :: { iS79{( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) )} }
  iS110{8} :: { iS90{8} }
  iS61{( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) )} :: {  }
  iS309{( ceilDiv(( 8 * 8 ), 2) )} :: { iS299{( ceilDiv(( 8 * 8 ), 2) )} }
  iUR311{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )} :: { iS301{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )} }
  ithreadIdx.x221{32} :: {  }
  iS208{( ceilDiv(T5.size[0], 8) )} :: { iS204{( ceilDiv(T5.size[0], 8) )} }
  iS210{( ceilDiv(( ceilDiv(T5.size[0], 8) ), 1) )} :: { iblockIdx.x206{( ceilDiv(( ceilDiv(T5.size[0], 8) ), 1) )} }
  iS209{8} :: { iS205{8} }
  iS281{( ceilDiv(( ceilDiv(8, 1) ), 32) )} :: { iS277{( ceilDiv(( ceilDiv(8, 1) ), 32) )} }
  iS280{1} :: { iS276{1} }
  iS205{8} :: { iS303{( 8 * 8 )} }
  iS334{( ceilDiv(( 8 * 8 ), 2) )} :: { iS329{( ceilDiv(( 8 * 8 ), 2) )} }
  iS294{( ceilDiv(( 8 * 8 ), 2) )} :: { iS289{( ceilDiv(( 8 * 8 ), 2) )} }
  iS291{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )} :: { iUR286{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )} }
  iS316{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )} :: { iUR311{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )} }
  iS98{( ( ceilDiv(1, 8) ) * T5.size[0] )} :: { iS88{( ( ceilDiv(i5, 8) ) * T5.size[0] )} }
  bS29{1} :: { iS31{i5} }
  bS97{8} :: { iS87{8} }
  bS101{( ceilDiv(8, 8) )} :: { iS91{( ceilDiv(8, 8) )} }
  iblockIdx.x104{( ceilDiv(( ( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )} :: { iblockIdx.x94{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )} }
  iUS105{1} :: { iUS95{1} }
  iS328{( 8 * 8 )} :: { iS318{( 8 * 8 )} }
  iS100{8} :: { iS90{8} }
  iS304{( ceilDiv(( 8 * 8 ), 2) )} :: { iS299{( ceilDiv(( 8 * 8 ), 2) )} }
  iS306{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )} :: { iS301{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )} }
  iS362{T5.size[0]} :: { iS361{T5.size[0]} }
  ithreadIdx.x307{32} :: { ithreadIdx.x302{32} }
  bS191{( ceilDiv(8, 8) )} :: { bS181{( ceilDiv(8, 8) )} }
  iS70{8} :: { iS62{8} }
  iS31{i5} :: { iS350{i5} }
  iS86{( ceilDiv(i5, 8) )} :: { iS76{( ceilDiv(i5, 8) )} }
  iS361{T5.size[0]} :: { iS351{T5.size[0]} }
  iS218{( ceilDiv(( 8 * 8 ), 1) )} :: {  }
  iS88{( ( ceilDiv(i5, 8) ) * T5.size[0] )} :: { iS78{( ( ceilDiv(i5, 8) ) * T5.size[0] )} }
  iS364{T5.size[0]} :: { iS361{T5.size[0]} }
  iS77{8} :: { iS67{8} }
  iS87{8} :: { iS77{8} }
  iS276{1} :: {  }
  iS288{( 8 * 8 )} :: { iS283{( 8 * 8 )} }
  iS149{( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) )} :: { iS129{( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) )} }
  iS91{( ceilDiv(8, 8) )} :: { iS81{( ceilDiv(8, 8) )} }
  iS345{i5} :: { iS343{i5} }
  iS93{( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )} :: { iS83{( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )} }
  ithreadIdx.x278{32} :: {  }
  iS296{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )} :: { iS291{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )} }
  iblockIdx.x198{( ceilDiv(( ceilDiv(T5.size[0], 8) ), 1) )} :: { iblockIdx.x144{( ceilDiv(( ( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )} }
  iS143{( ( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )} :: { iS133{( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )} }
  iUS95{1} :: { iUS85{1} }
  iUS155{1} :: { iUS135{1} }
  iS298{( 8 * 8 )} :: { iS293{( 8 * 8 )} }
  iS301{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )} :: { iS296{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )} }
  iS81{( ceilDiv(8, 8) )} :: { iS71{( ceilDiv(8, 8) )} }
  iS83{( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )} :: { iS73{( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )} }
  iS358{T5.size[0]} :: { iS353{T5.size[0]} }
  iS80{8} :: { iS70{8} }
  iS283{( 8 * 8 )} :: {  }
  iblockIdx.x84{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )} :: { iblockIdx.x74{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )} }
  iS66{( ceilDiv(i5, 8) )} :: { iS56{( ceilDiv(i5, 8) )} }
  iS161{( ceilDiv(8, 8) )} :: { iS151{( ceilDiv(8, 8) )} }
  iS82{8} :: { iS72{8} }
  iS293{( 8 * 8 )} :: { iS288{( 8 * 8 )} }
  iS299{( ceilDiv(( 8 * 8 ), 2) )} :: { iS294{( ceilDiv(( 8 * 8 ), 2) )} }
  iS346{T5.size[0]} :: { iS344{T5.size[0]} }
  ithreadIdx.x287{32} :: {  }
  iS68{( ( ceilDiv(i5, 8) ) * T5.size[0] )} :: { iS58{( ( ceilDiv(i5, 8) ) * T5.size[0] )} }
  iS158{( ( ceilDiv(i5, 8) ) * T5.size[0] )} :: { iS148{( ( ceilDiv(i5, 8) ) * T5.size[0] )} }
  iS67{8} :: { iS57{8} }
  iS73{( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )} :: { iS63{( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )} }
  iS183{( ( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )} :: { iS173{( ( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )} }
  iS72{8} :: { iS60{8} }
Producer maps:
  iV285{2} :: { iS290{2} }
  iUR286{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )} :: { iS291{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )} }
  iS284{( ceilDiv(( 8 * 8 ), 2) )} :: { iS289{( ceilDiv(( 8 * 8 ), 2) )} }
  iS62{8} :: { iS70{8} }
  iblockIdx.x64{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )} :: { iblockIdx.x74{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )} }
  iS63{( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )} :: { iS73{( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )} }
  iS59{( ceilDiv(8, 8) )} :: { iS71{( ceilDiv(8, 8) )} }
  iS58{( ( ceilDiv(i5, 8) ) * T5.size[0] )} :: { iS68{( ( ceilDiv(i5, 8) ) * T5.size[0] )} }
  iS344{T5.size[0]} :: { iS346{T5.size[0]} }
  iS343{i5} :: { iS345{i5} }
  ithreadIdx.x292{32} :: { ithreadIdx.x342{32}; ithreadIdx.x297{32} }
  iS127{8} :: { iS147{8}; bS137{8} }
  iS164{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )} :: {  }
  iS194{( ceilDiv(( ( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )} :: {  }
  iS366{T5.size[0]} :: {  }
  iS353{T5.size[0]} :: { iS355{T5.size[0]}; iS358{T5.size[0]} }
  iS323{( 8 * 8 )} :: { iS197{8} }
  iUS185{1} :: { iS195{1} }
  ithreadIdx.x302{32} :: { ithreadIdx.x312{32}; ithreadIdx.x307{32} }
  bS136{( ceilDiv(1, 8) )} :: {  }
  bS23{1} :: {  }
  bS102{8} :: {  }
  ithreadIdx.x270{32} :: { iS274{32} }
  iUS199{1} :: { iS203{1} }
  iS267{( ceilDiv(8, 1) )} :: { iS271{( ceilDiv(8, 1) )} }
  iS69{( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) )} :: { iS169{( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) )}; iS79{( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) )} }
  iS274{32} :: {  }
  iS180{8} :: { iS190{8} }
  iblockIdx.x184{( ceilDiv(( ( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )} :: { iS194{( ceilDiv(( ( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )} }
  iS279{( ceilDiv(8, 1) )} :: {  }
  iS305{2} :: {  }
  iV330{2} :: { iS335{2} }
  iS300{2} :: { iV310{2}; iS305{2} }
  iUR331{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )} :: { iS336{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )} }
  iS360{T5.size[0]} :: {  }
  iS329{( ceilDiv(( 8 * 8 ), 2) )} :: { iS334{( ceilDiv(( 8 * 8 ), 2) )} }
  iS202{( ceilDiv(( ceilDiv(T5.size[0], 8) ), 1) )} :: {  }
  iS269{( ceilDiv(( ceilDiv(8, 1) ), 32) )} :: { iS273{( ceilDiv(( ceilDiv(8, 1) ), 32) )} }
  iS78{( ( ceilDiv(i5, 8) ) * T5.size[0] )} :: { iS128{( ( ceilDiv(i5, 8) ) * T5.size[0] )}; iS88{( ( ceilDiv(i5, 8) ) * T5.size[0] )} }
  iS152{8} :: { iS162{8} }
  iS271{( ceilDiv(8, 1) )} :: {  }
  iS129{( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) )} :: { iS149{( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) )}; iS139{( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) )} }
  iS200{( ceilDiv(T5.size[0], 8) )} :: {  }
  iS150{8} :: { iS160{8} }
  iS193{( ( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )} :: {  }
  iS148{( ( ceilDiv(i5, 8) ) * T5.size[0] )} :: { iS158{( ( ceilDiv(i5, 8) ) * T5.size[0] )} }
  iblockIdx.x154{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )} :: { iS164{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )} }
  iS349{T5.size[0]} :: {  }
  iS355{T5.size[0]} :: { iS357{T5.size[0]} }
  iS313{( 8 * 8 )} :: {  }
  iS354{i5} :: { iS356{i5} }
  iS275{( ceilDiv(8, 1) )} :: { iS279{( ceilDiv(8, 1) )} }
  iS336{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )} :: {  }
  iS350{i5} :: { iS352{i5}; iS31{i5} }
  iS326{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )} :: {  }
  iS333{( 8 * 8 )} :: {  }
  iS162{8} :: {  }
  iS128{( ( ceilDiv(i5, 8) ) * T5.size[0] )} :: { iS148{( ( ceilDiv(i5, 8) ) * T5.size[0] )}; iS138{( ( ceilDiv(1, 8) ) * T5.size[0] )} }
  iS153{( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )} :: { iS163{( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )} }
  iS317{32} :: {  }
  iS146{( ceilDiv(i5, 8) )} :: { iS156{( ceilDiv(i5, 8) )} }
  iS123{( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )} :: {  }
  iS201{8} :: {  }
  iUS145{1} :: { iUS199{1} }
  bS177{8} :: { bS187{8} }
  iS268{1} :: { iS272{1} }
  iS178{( ( ceilDiv(1, 8) ) * T5.size[0] )} :: { iS188{( ( ceilDiv(1, 8) ) * T5.size[0] )} }
  bS176{( ceilDiv(1, 8) )} :: { bS186{( ceilDiv(1, 8) )} }
  iS289{( ceilDiv(( 8 * 8 ), 2) )} :: { iS339{( ceilDiv(( 8 * 8 ), 2) )}; iS294{( ceilDiv(( 8 * 8 ), 2) )} }
  iS324{( ceilDiv(( 8 * 8 ), 2) )} :: {  }
  iS214{1} :: {  }
  iS121{( ceilDiv(8, 8) )} :: {  }
  bS172{8} :: { bS182{8} }
  iUS85{1} :: { iUS135{1}; iUS95{1} }
  bS9{1} :: {  }
  iS212{( 8 * 8 )} :: {  }
  iblockIdx.x94{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )} :: { iblockIdx.x114{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}; iblockIdx.x104{( ceilDiv(( ( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )} }
  bS141{( ceilDiv(8, 8) )} :: {  }
  iS215{( ceilDiv(( ceilDiv(( 8 * 8 ), 1) ), 32) )} :: {  }
  iS112{8} :: { iS122{8} }
  iS76{( ceilDiv(i5, 8) )} :: { iS126{( ceilDiv(i5, 8) )}; iS86{( ceilDiv(i5, 8) )} }
  iS351{T5.size[0]} :: { iS353{T5.size[0]}; iS361{T5.size[0]} }
  iS159{( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) )} :: {  }
  iS90{8} :: { iS110{8}; iS100{8} }
  iS359{T5.size[0]} :: { iS360{T5.size[0]} }
  iS352{i5} :: { iS354{i5}; bS23{1} }
  iS356{i5} :: {  }
  iS347{T5.size[0]} :: { iS348{T5.size[0]} }
  bS182{8} :: { bS192{8} }
  iS147{8} :: { iS157{8} }
  bS167{8} :: { bS177{8} }
  bS192{8} :: {  }
  iS108{( ( ceilDiv(i5, 8) ) * T5.size[0] )} :: { iS118{( ( ceilDiv(i5, 8) ) * T5.size[0] )} }
  bS166{( ceilDiv(1, 8) )} :: { bS176{( ceilDiv(1, 8) )} }
  iS189{( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) )} :: {  }
  iblockIdx.x144{( ceilDiv(( ( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )} :: { iblockIdx.x198{( ceilDiv(( ceilDiv(T5.size[0], 8) ), 1) )} }
  iS211{1} :: {  }
  iS217{( 8 * 8 )} :: { iS212{( 8 * 8 )} }
  iS277{( ceilDiv(( ceilDiv(8, 1) ), 32) )} :: { iS281{( ceilDiv(( ceilDiv(8, 1) ), 32) )} }
  iS188{( ( ceilDiv(1, 8) ) * T5.size[0] )} :: {  }
  iS116{( ceilDiv(i5, 8) )} :: {  }
  iS341{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )} :: {  }
  iS139{( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) )} :: {  }
  ithreadIdx.x332{32} :: { iS337{32} }
  iS213{( ceilDiv(( 8 * 8 ), 1) )} :: {  }
  iS315{2} :: {  }
  iS308{( 8 * 8 )} :: { iS313{( 8 * 8 )} }
  iS168{( ( ceilDiv(1, 8) ) * T5.size[0] )} :: { iS178{( ( ceilDiv(1, 8) ) * T5.size[0] )} }
  iS138{( ( ceilDiv(1, 8) ) * T5.size[0] )} :: { iS359{T5.size[0]} }
  iV310{2} :: { iS315{2} }
  ithreadIdx.x327{32} :: {  }
  iS348{T5.size[0]} :: { iS349{T5.size[0]} }
  bS96{( ceilDiv(1, 8) )} :: {  }
  iS56{( ceilDiv(i5, 8) )} :: { iS66{( ceilDiv(i5, 8) )} }
  iS151{( ceilDiv(8, 8) )} :: { iS161{( ceilDiv(8, 8) )} }
  iS190{8} :: {  }
  iUS135{1} :: { iUS155{1}; iUS145{1} }
  iS335{2} :: {  }
  iS79{( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) )} :: { iS129{( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) )}; iS89{( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) )} }
  iS196{( ceilDiv(T5.size[0], 8) )} :: { iS200{( ceilDiv(T5.size[0], 8) )} }
  iUR220{( ceilDiv(( ceilDiv(( 8 * 8 ), 1) ), 32) )} :: { iS215{( ceilDiv(( ceilDiv(( 8 * 8 ), 1) ), 32) )} }
  iUS75{1} :: { iUS175{1}; iUS85{1} }
  rS367{i5} :: {  }
  bS47{1} :: { bS9{1} }
  iblockIdx.x206{( ceilDiv(( ceilDiv(T5.size[0], 8) ), 1) )} :: { iS210{( ceilDiv(( ceilDiv(T5.size[0], 8) ), 1) )} }
  iS60{8} :: { iS72{8} }
  iS219{1} :: { iS214{1} }
  bS37{1} :: { bS47{1} }
  iS156{( ceilDiv(i5, 8) )} :: {  }
  iS204{( ceilDiv(T5.size[0], 8) )} :: { iS208{( ceilDiv(T5.size[0], 8) )} }
  bS186{( ceilDiv(1, 8) )} :: {  }
  iS165{1} :: {  }
  iS197{8} :: { iS201{8} }
  bS171{( ceilDiv(8, 8) )} :: { bS181{( ceilDiv(8, 8) )} }
  iS273{( ceilDiv(( ceilDiv(8, 1) ), 32) )} :: {  }
  iS337{32} :: {  }
  iS107{8} :: { iS117{8} }
  iS303{( 8 * 8 )} :: { iS205{8} }
  iS339{( ceilDiv(( 8 * 8 ), 2) )} :: {  }
  iblockIdx.x174{( ceilDiv(( ( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )} :: { iblockIdx.x184{( ceilDiv(( ( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )} }
  iUS175{1} :: { iUS185{1} }
  iS216{32} :: {  }
  iS170{8} :: { iS180{8} }
  bS137{8} :: {  }
  iS157{8} :: {  }
  iS195{1} :: {  }
  iS290{2} :: { iS340{2}; iS295{2} }
  bS181{( ceilDiv(8, 8) )} :: { bS191{( ceilDiv(8, 8) )} }
  iS203{1} :: {  }
  iS338{( 8 * 8 )} :: {  }
  bS187{8} :: {  }
  ithreadIdx.x312{32} :: { iS317{32} }
  ithreadIdx.x342{32} :: {  }
  iS282{32} :: {  }
  rS368{i5} :: {  }
  iS340{2} :: {  }
  iUS65{1} :: { iUS75{1} }
  iS173{( ( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )} :: { iS183{( ( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )} }
  iS357{T5.size[0]} :: {  }
  iS325{2} :: {  }
  iS133{( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )} :: { iS153{( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )}; iS143{( ( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )} }
  iS272{1} :: {  }
  iS163{( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )} :: {  }
  iS131{( ceilDiv(8, 8) )} :: { iS151{( ceilDiv(8, 8) )}; bS141{( ceilDiv(8, 8) )} }
  iblockIdx.x134{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )} :: { iblockIdx.x154{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}; iblockIdx.x144{( ceilDiv(( ( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )} }
  iS130{8} :: { iS150{8}; iS140{8} }
  iS132{8} :: { iS152{8}; bS142{8} }
  iS140{8} :: {  }
  iS169{( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) )} :: { iS179{( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) )} }
  iS318{( 8 * 8 )} :: { iS328{( 8 * 8 )}; iS323{( 8 * 8 )} }
  iS319{( ceilDiv(( 8 * 8 ), 2) )} :: { iS329{( ceilDiv(( 8 * 8 ), 2) )}; iS324{( ceilDiv(( 8 * 8 ), 2) )} }
  iS321{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )} :: { iUR331{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}; iS326{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )} }
  iS122{8} :: {  }
  iUS115{1} :: { iS125{1} }
  ithreadIdx.x297{32} :: { ithreadIdx.x322{32}; ithreadIdx.x302{32} }
  iS99{( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) )} :: {  }
  ithreadIdx.x322{32} :: { ithreadIdx.x332{32}; ithreadIdx.x327{32} }
  iS320{2} :: { iV330{2}; iS325{2} }
  iS365{T5.size[0]} :: { iS366{T5.size[0]} }
  iS71{( ceilDiv(8, 8) )} :: { bS171{( ceilDiv(8, 8) )}; iS81{( ceilDiv(8, 8) )} }
  iS13{i5} :: {  }
  iS363{T5.size[0]} :: {  }
  iS92{8} :: { iS112{8}; bS102{8} }
  iS179{( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) )} :: { iS189{( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) )} }
  iS118{( ( ceilDiv(i5, 8) ) * T5.size[0] )} :: {  }
  iS117{8} :: {  }
  iS119{( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) )} :: {  }
  iS295{2} :: { iS320{2}; iS300{2} }
  iS124{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )} :: {  }
  iS125{1} :: {  }
  bS142{8} :: {  }
  iS120{8} :: {  }
  iS314{( ceilDiv(( 8 * 8 ), 2) )} :: {  }
  iUS207{1} :: { iS211{1} }
  iS160{8} :: {  }
  iblockIdx.x74{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )} :: { iblockIdx.x174{( ceilDiv(( ( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}; iblockIdx.x84{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )} }
  iS52{i5} :: { iS13{i5} }
  iS103{( ( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )} :: { iS204{( ceilDiv(T5.size[0], 8) )} }
  iS106{( ceilDiv(i5, 8) )} :: { iS116{( ceilDiv(i5, 8) )} }
  iS109{( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) )} :: { iS119{( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) )} }
  iS111{( ceilDiv(8, 8) )} :: { iS121{( ceilDiv(8, 8) )} }
  iS126{( ceilDiv(i5, 8) )} :: { iS146{( ceilDiv(i5, 8) )}; bS136{( ceilDiv(1, 8) )} }
  iS113{( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )} :: { iS123{( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )} }
  iS57{8} :: { iS67{8} }
  iblockIdx.x114{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )} :: { iS124{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )} }
  iS89{( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) )} :: { iS109{( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) )}; iS99{( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) )} }
  iS110{8} :: { iS120{8} }
  iS61{( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) )} :: { iS69{( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) )} }
  iS309{( ceilDiv(( 8 * 8 ), 2) )} :: { iS314{( ceilDiv(( 8 * 8 ), 2) )} }
  iUR311{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )} :: { iS316{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )} }
  ithreadIdx.x221{32} :: { iS216{32} }
  iS208{( ceilDiv(T5.size[0], 8) )} :: {  }
  iS210{( ceilDiv(( ceilDiv(T5.size[0], 8) ), 1) )} :: {  }
  iS209{8} :: {  }
  iS281{( ceilDiv(( ceilDiv(8, 1) ), 32) )} :: {  }
  iS280{1} :: {  }
  iS205{8} :: { iS209{8} }
  iS334{( ceilDiv(( 8 * 8 ), 2) )} :: {  }
  iS294{( ceilDiv(( 8 * 8 ), 2) )} :: { iS319{( ceilDiv(( 8 * 8 ), 2) )}; iS299{( ceilDiv(( 8 * 8 ), 2) )} }
  iS291{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )} :: { iS341{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}; iS296{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )} }
  iS316{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )} :: {  }
  iS98{( ( ceilDiv(1, 8) ) * T5.size[0] )} :: { iS365{T5.size[0]} }
  bS29{1} :: {  }
  bS97{8} :: {  }
  bS101{( ceilDiv(8, 8) )} :: {  }
  iblockIdx.x104{( ceilDiv(( ( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )} :: { iblockIdx.x206{( ceilDiv(( ceilDiv(T5.size[0], 8) ), 1) )} }
  iUS105{1} :: { iUS207{1} }
  iS328{( 8 * 8 )} :: { iS333{( 8 * 8 )} }
  iS100{8} :: {  }
  iS304{( ceilDiv(( 8 * 8 ), 2) )} :: {  }
  iS306{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )} :: {  }
  iS362{T5.size[0]} :: { iS363{T5.size[0]} }
  ithreadIdx.x307{32} :: {  }
  bS191{( ceilDiv(8, 8) )} :: {  }
  iS70{8} :: { iS170{8}; iS80{8} }
  iS31{i5} :: { iS52{i5}; bS29{1} }
  iS86{( ceilDiv(i5, 8) )} :: { iS106{( ceilDiv(i5, 8) )}; bS96{( ceilDiv(1, 8) )} }
  iS361{T5.size[0]} :: { iS362{T5.size[0]}; iS364{T5.size[0]} }
  iS218{( ceilDiv(( 8 * 8 ), 1) )} :: { iS213{( ceilDiv(( 8 * 8 ), 1) )} }
  iS88{( ( ceilDiv(i5, 8) ) * T5.size[0] )} :: { iS108{( ( ceilDiv(i5, 8) ) * T5.size[0] )}; iS98{( ( ceilDiv(1, 8) ) * T5.size[0] )} }
  iS364{T5.size[0]} :: { iS365{T5.size[0]} }
  iS77{8} :: { iS127{8}; iS87{8} }
  iS87{8} :: { iS107{8}; bS97{8} }
  iS276{1} :: { iS280{1} }
  iS288{( 8 * 8 )} :: { iS338{( 8 * 8 )}; iS293{( 8 * 8 )} }
  iS149{( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) )} :: { iS159{( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) )} }
  iS91{( ceilDiv(8, 8) )} :: { iS111{( ceilDiv(8, 8) )}; bS101{( ceilDiv(8, 8) )} }
  iS345{i5} :: { bS37{1}; iS350{i5} }
  iS93{( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )} :: { iS113{( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )}; iS103{( ( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )} }
  ithreadIdx.x278{32} :: { iS282{32} }
  iS296{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )} :: { iS321{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}; iS301{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )} }
  iblockIdx.x198{( ceilDiv(( ceilDiv(T5.size[0], 8) ), 1) )} :: { iS202{( ceilDiv(( ceilDiv(T5.size[0], 8) ), 1) )} }
  iS143{( ( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )} :: { iS196{( ceilDiv(T5.size[0], 8) )} }
  iUS95{1} :: { iUS115{1}; iUS105{1} }
  iUS155{1} :: { iS165{1} }
  iS298{( 8 * 8 )} :: { iS308{( 8 * 8 )}; iS303{( 8 * 8 )} }
  iS301{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )} :: { iUR311{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )}; iS306{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )} }
  iS81{( ceilDiv(8, 8) )} :: { iS131{( ceilDiv(8, 8) )}; iS91{( ceilDiv(8, 8) )} }
  iS83{( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )} :: { iS133{( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )}; iS93{( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )} }
  iS358{T5.size[0]} :: { iS359{T5.size[0]} }
  iS80{8} :: { iS130{8}; iS90{8} }
  iS283{( 8 * 8 )} :: { iS288{( 8 * 8 )} }
  iblockIdx.x84{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )} :: { iblockIdx.x134{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )}; iblockIdx.x94{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )} }
  iS66{( ceilDiv(i5, 8) )} :: { bS166{( ceilDiv(1, 8) )}; iS76{( ceilDiv(i5, 8) )} }
  iS161{( ceilDiv(8, 8) )} :: {  }
  iS82{8} :: { iS132{8}; iS92{8} }
  iS293{( 8 * 8 )} :: { iS318{( 8 * 8 )}; iS298{( 8 * 8 )} }
  iS299{( ceilDiv(( 8 * 8 ), 2) )} :: { iS309{( ceilDiv(( 8 * 8 ), 2) )}; iS304{( ceilDiv(( 8 * 8 ), 2) )} }
  iS346{T5.size[0]} :: { iS347{T5.size[0]}; iS351{T5.size[0]} }
  ithreadIdx.x287{32} :: { ithreadIdx.x292{32} }
  iS68{( ( ceilDiv(i5, 8) ) * T5.size[0] )} :: { iS168{( ( ceilDiv(1, 8) ) * T5.size[0] )}; iS78{( ( ceilDiv(i5, 8) ) * T5.size[0] )} }
  iS158{( ( ceilDiv(i5, 8) ) * T5.size[0] )} :: {  }
  iS67{8} :: { bS167{8}; iS77{8} }
  iS73{( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )} :: { iS173{( ( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )}; iS83{( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )} }
  iS183{( ( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )} :: { iS193{( ( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )} }
  iS72{8} :: { bS172{8}; iS82{8} }
Sibling map:
disjoint sets{
  { bS9{1} }
  { bS186{( ceilDiv(1, 8) )} }
  { iS349{T5.size[0]} }
  { iS188{( ( ceilDiv(1, 8) ) * T5.size[0] )} }
  { iS189{( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) )} }
  { bS187{8} }
  { bS191{( ceilDiv(8, 8) )} }
  { iS193{( ( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )} }
  { iS194{( ceilDiv(( ( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )} }
  { iS195{1} }
  { bS192{8} }
  { iS190{8} }
  { iS212{( 8 * 8 )} }
  { iS213{( ceilDiv(( 8 * 8 ), 1) )} }
  { iS215{( ceilDiv(( ceilDiv(( 8 * 8 ), 1) ), 32) )} }
  { iS216{32} }
  { iS214{1} }
  { bS47{1} }
  { bS176{( ceilDiv(1, 8) )} }
  { iS348{T5.size[0]} }
  { iS178{( ( ceilDiv(1, 8) ) * T5.size[0] )} }
  { iS179{( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) )} }
  { bS177{8} }
  { bS181{( ceilDiv(8, 8) )} }
  { iS183{( ( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )} }
  { iblockIdx.x184{( ceilDiv(( ( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )} }
  { iUS185{1} }
  { bS182{8} }
  { iS180{8} }
  { iS217{( 8 * 8 )} }
  { iS218{( ceilDiv(( 8 * 8 ), 1) )} }
  { iUR220{( ceilDiv(( ceilDiv(( 8 * 8 ), 1) ), 32) )} }
  { ithreadIdx.x221{32} }
  { iS219{1} }
  { bS37{1} }
  { bS166{( ceilDiv(1, 8) )} }
  { iS347{T5.size[0]} }
  { iS168{( ( ceilDiv(1, 8) ) * T5.size[0] )} }
  { iS169{( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) )} }
  { bS167{8} }
  { bS171{( ceilDiv(8, 8) )} }
  { iS173{( ( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )} }
  { iblockIdx.x174{( ceilDiv(( ( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )} }
  { iUS175{1} }
  { iS170{8} }
  { bS172{8} }
  { iS338{( 8 * 8 )} }
  { iS339{( ceilDiv(( 8 * 8 ), 2) )} }
  { iS341{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )} }
  { ithreadIdx.x342{32} }
  { iS340{2} }
  { iS356{i5} }
  { iS156{( ceilDiv(i5, 8) )} }
  { iS357{T5.size[0]} }
  { iS158{( ( ceilDiv(i5, 8) ) * T5.size[0] )} }
  { iS159{( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) )} }
  { iS157{8} }
  { iS161{( ceilDiv(8, 8) )} }
  { iS163{( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )} }
  { iS164{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )} }
  { iS165{1} }
  { iS160{8} }
  { iS162{8} }
  { iS333{( 8 * 8 )} }
  { iS334{( ceilDiv(( 8 * 8 ), 2) )} }
  { iS336{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )} }
  { iS337{32} }
  { iS335{2} }
  { iS354{i5} }
  { iS146{( ceilDiv(i5, 8) )} }
  { iS355{T5.size[0]} }
  { iS148{( ( ceilDiv(i5, 8) ) * T5.size[0] )} }
  { iS149{( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) )} }
  { iS147{8} }
  { iS151{( ceilDiv(8, 8) )} }
  { iS153{( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )} }
  { iblockIdx.x154{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )} }
  { iUS155{1} }
  { iS150{8} }
  { iS152{8} }
  { iS328{( 8 * 8 )} }
  { iS329{( ceilDiv(( 8 * 8 ), 2) )} }
  { iUR331{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )} }
  { ithreadIdx.x332{32} }
  { iV330{2} }
  { iS360{T5.size[0]} }
  { iS200{( ceilDiv(T5.size[0], 8) )} }
  { iS202{( ceilDiv(( ceilDiv(T5.size[0], 8) ), 1) )} }
  { iS203{1} }
  { iS201{8} }
  { iS271{( ceilDiv(8, 1) )} }
  { iS273{( ceilDiv(( ceilDiv(8, 1) ), 32) )} }
  { iS274{32} }
  { iS272{1} }
  { rS367{i5} }
  { iS359{T5.size[0]} }
  { iS196{( ceilDiv(T5.size[0], 8) )} }
  { iblockIdx.x198{( ceilDiv(( ceilDiv(T5.size[0], 8) ), 1) )} }
  { iUS199{1} }
  { iS197{8} }
  { iS267{( ceilDiv(8, 1) )} }
  { iS269{( ceilDiv(( ceilDiv(8, 1) ), 32) )} }
  { ithreadIdx.x270{32} }
  { iS268{1} }
  { bS23{1} }
  { bS136{( ceilDiv(1, 8) )} }
  { iS358{T5.size[0]} }
  { iS138{( ( ceilDiv(1, 8) ) * T5.size[0] )} }
  { iS139{( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) )} }
  { bS137{8} }
  { bS141{( ceilDiv(8, 8) )} }
  { iS143{( ( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )} }
  { iblockIdx.x144{( ceilDiv(( ( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )} }
  { iUS145{1} }
  { iS140{8} }
  { bS142{8} }
  { iS323{( 8 * 8 )} }
  { iS324{( ceilDiv(( 8 * 8 ), 2) )} }
  { iS326{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )} }
  { ithreadIdx.x327{32} }
  { iS325{2} }
  { iS352{i5} }
  { iS126{( ceilDiv(i5, 8) )} }
  { iS353{T5.size[0]} }
  { iS128{( ( ceilDiv(i5, 8) ) * T5.size[0] )} }
  { iS129{( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) )} }
  { iS127{8} }
  { iS131{( ceilDiv(8, 8) )} }
  { iS133{( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )} }
  { iblockIdx.x134{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )} }
  { iUS135{1} }
  { iS130{8} }
  { iS132{8} }
  { iS318{( 8 * 8 )} }
  { iS319{( ceilDiv(( 8 * 8 ), 2) )} }
  { iS321{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )} }
  { ithreadIdx.x322{32} }
  { iS320{2} }
  { iS13{i5} }
  { iS116{( ceilDiv(i5, 8) )} }
  { iS363{T5.size[0]} }
  { iS118{( ( ceilDiv(i5, 8) ) * T5.size[0] )} }
  { iS119{( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) )} }
  { iS117{8} }
  { iS121{( ceilDiv(8, 8) )} }
  { iS123{( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )} }
  { iS124{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )} }
  { iS125{1} }
  { iS120{8} }
  { iS122{8} }
  { iS313{( 8 * 8 )} }
  { iS314{( ceilDiv(( 8 * 8 ), 2) )} }
  { iS316{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )} }
  { iS317{32} }
  { iS315{2} }
  { iS52{i5} }
  { iS106{( ceilDiv(i5, 8) )} }
  { iS362{T5.size[0]} }
  { iS108{( ( ceilDiv(i5, 8) ) * T5.size[0] )} }
  { iS109{( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) )} }
  { iS107{8} }
  { iS111{( ceilDiv(8, 8) )} }
  { iS113{( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )} }
  { iblockIdx.x114{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )} }
  { iUS115{1} }
  { iS110{8} }
  { iS112{8} }
  { iS308{( 8 * 8 )} }
  { iS309{( ceilDiv(( 8 * 8 ), 2) )} }
  { iUR311{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )} }
  { ithreadIdx.x312{32} }
  { iV310{2} }
  { iS366{T5.size[0]} }
  { iS208{( ceilDiv(T5.size[0], 8) )} }
  { iS210{( ceilDiv(( ceilDiv(T5.size[0], 8) ), 1) )} }
  { iS211{1} }
  { iS209{8} }
  { iS279{( ceilDiv(8, 1) )} }
  { iS281{( ceilDiv(( ceilDiv(8, 1) ), 32) )} }
  { iS282{32} }
  { iS280{1} }
  { rS368{i5} }
  { iS365{T5.size[0]} }
  { iS204{( ceilDiv(T5.size[0], 8) )} }
  { iblockIdx.x206{( ceilDiv(( ceilDiv(T5.size[0], 8) ), 1) )} }
  { iUS207{1} }
  { iS205{8} }
  { iS275{( ceilDiv(8, 1) )} }
  { iS277{( ceilDiv(( ceilDiv(8, 1) ), 32) )} }
  { ithreadIdx.x278{32} }
  { iS276{1} }
  { bS29{1} }
  { bS96{( ceilDiv(1, 8) )} }
  { iS364{T5.size[0]} }
  { iS98{( ( ceilDiv(1, 8) ) * T5.size[0] )} }
  { iS99{( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) )} }
  { bS97{8} }
  { bS101{( ceilDiv(8, 8) )} }
  { iS103{( ( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )} }
  { iblockIdx.x104{( ceilDiv(( ( ceilDiv(( ( ceilDiv(1, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )} }
  { iUS105{1} }
  { iS100{8} }
  { bS102{8} }
  { iS303{( 8 * 8 )} }
  { iS304{( ceilDiv(( 8 * 8 ), 2) )} }
  { iS306{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )} }
  { ithreadIdx.x307{32} }
  { iS305{2} }
  { iS31{i5} }
  { iS86{( ceilDiv(i5, 8) )} }
  { iS361{T5.size[0]} }
  { iS88{( ( ceilDiv(i5, 8) ) * T5.size[0] )} }
  { iS89{( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) )} }
  { iS87{8} }
  { iS91{( ceilDiv(8, 8) )} }
  { iS93{( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )} }
  { iblockIdx.x94{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )} }
  { iUS95{1} }
  { iS90{8} }
  { iS92{8} }
  { iS298{( 8 * 8 )} }
  { iS299{( ceilDiv(( 8 * 8 ), 2) )} }
  { iS301{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )} }
  { ithreadIdx.x302{32} }
  { iS300{2} }
  { iS350{i5} }
  { iS76{( ceilDiv(i5, 8) )} }
  { iS351{T5.size[0]} }
  { iS78{( ( ceilDiv(i5, 8) ) * T5.size[0] )} }
  { iS79{( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) )} }
  { iS77{8} }
  { iS81{( ceilDiv(8, 8) )} }
  { iS83{( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )} }
  { iblockIdx.x84{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )} }
  { iUS85{1} }
  { iS80{8} }
  { iS82{8} }
  { iS293{( 8 * 8 )} }
  { iS294{( ceilDiv(( 8 * 8 ), 2) )} }
  { iS296{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )} }
  { ithreadIdx.x297{32} }
  { iS295{2} }
  { iS345{i5} }
  { iS66{( ceilDiv(i5, 8) )} }
  { iS346{T5.size[0]} }
  { iS68{( ( ceilDiv(i5, 8) ) * T5.size[0] )} }
  { iS69{( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) )} }
  { iS67{8} }
  { iS71{( ceilDiv(8, 8) )} }
  { iS73{( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )} }
  { iblockIdx.x74{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )} }
  { iUS75{1} }
  { iS70{8} }
  { iS72{8} }
  { iS288{( 8 * 8 )} }
  { iS289{( ceilDiv(( 8 * 8 ), 2) )} }
  { iS291{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )} }
  { ithreadIdx.x292{32} }
  { iS290{2} }
  { iS343{i5} }
  { iS56{( ceilDiv(i5, 8) )} }
  { iS344{T5.size[0]} }
  { iS58{( ( ceilDiv(i5, 8) ) * T5.size[0] )} }
  { iS61{( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) )} }
  { iS57{8} }
  { iS59{( ceilDiv(8, 8) )} }
  { iS63{( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) )} }
  { iblockIdx.x64{( ceilDiv(( ( ceilDiv(( ( ceilDiv(i5, 8) ) * T5.size[0] ), 8) ) * ( ceilDiv(8, 8) ) ), 1) )} }
  { iUS65{1} }
  { iS62{8} }
  { iS60{8} }
  { iS283{( 8 * 8 )} }
  { iS284{( ceilDiv(( 8 * 8 ), 2) )} }
  { iUR286{( ceilDiv(( ceilDiv(( 8 * 8 ), 2) ), 32) )} }
  { ithreadIdx.x287{32} }
  { iV285{2} }
}
} compute at map

Looks like this time, the fusion is similar to the example in #1880, the missing dim in #1880 is now a reduction in fusion input.

cc: @csarofeen @shmsong @naoyam

@shmsong
Copy link

shmsong commented Aug 30, 2022

Should these three permissive mapped sets be mapped together?

 {iS62{8}*; iS70{8}; iS170{8}; iS180{8}; iS190{8}; iS80{8}; iS130{8}; iS150{8}; iS160{8}; iS140{8}; iS90{8}; iS110{8}; iS120{8}; iS100{8} }
  {iS60{8}*; iS72{8}; bS172{8}; bS182{8}; bS192{8}; iS82{8}; iS132{8}; iS152{8}; iS162{8}; bS142{8}; iS92{8}; iS112{8}; iS122{8}; bS102{8} }
  {iS283{( 8 * 8 )}*; iS288{( 8 * 8 )}; iS338{( 8 * 8 )}; iS293{( 8 * 8 )}; iS318{( 8 * 8 )}; iS328{( 8 * 8 )}; iS333{( 8 * 8 )}; iS323{( 8 * 8 )}; iS197{8}; iS201{8}; iS298{( 8 * 8 )}; iS308{( 8 * 8 )}; iS313{( 8 * 8 )}; iS303{( 8 * 8 )}; iS205{8}; iS209{8} }
 

i.e. if we have this expression:

 Merge: bS182{8} and iS180{8} -> iS217{( 8 * 8 )}

should iS180 and iS217 be permissively mapped? Currently they are not. Would need some discussion on how permissive permissive mapping should be.

Copy link
Owner

@csarofeen csarofeen left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Overall seems fine, just a few comments.

@@ -21,9 +21,19 @@ class DomainMap {
virtual ~DomainMap() = default;

bool areExactMapped(IterDomain* id1, IterDomain* id2) const {
if (!ca_map_.idExistsInMap(id1) || !ca_map_.idExistsInMap(id2)) {
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Any particular reason you had to make this a permissive mapping?

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is just like: https://github.com/csarofeen/pytorch/blob/devel/torch/csrc/jit/codegen/cuda/disjoint_set.h#L255-L275

I wonder if we should remove these aliases as they're pretty thin.

Copy link
Collaborator Author

@zasdfgbnm zasdfgbnm Sep 6, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Any particular reason you had to make this a permissive mapping?

I do see a failure in benchmarks if I use exact map, don't remember which

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is just like: https://github.com/csarofeen/pytorch/blob/devel/torch/csrc/jit/codegen/cuda/disjoint_set.h#L255-L275

I wonder if we should remove these aliases as they're pretty thin.

removed

torch/csrc/jit/codegen/cuda/scheduler/transpose.cpp Outdated Show resolved Hide resolved
@zasdfgbnm zasdfgbnm merged commit 45e95fd into devel Sep 6, 2022
@zasdfgbnm zasdfgbnm deleted the transpose-split-inner branch September 6, 2022 19:51
jjsjann123 added a commit that referenced this pull request Nov 9, 2022
Syncing nvfuser devel branch to upstream master. https://github.com/csarofeen/pytorch/

Codegen changes include:

* codegen improvement:
    i. allow non-root trivial reductions, allow empty/no-op fusion
    ii. fixes vectorization checks and size calculation
    iii. bank conflict handle improvement
    iv. enables transpose scheduler

* misc:
    i. CI tests failure fixes
    ii. cpp tests file clean up
    iii. trivial forwarding supports added in codegen runtime
    iv. added factory methods support in codegen

Commits that's in this PR from the devel branch:

```
7117a7e patching nvfuser conv cudnn test numerics mismatch (#2048)
65af1a4 Inserting sync for redundant parallel types is already done at the (#2023)
6ac74d1 Fix sync map (#2047)
f5bca33 Bank conflict checker improvements (#2032)
d2ca7e3 Minor update on cp.async code generation. (#1901)
d36cf61 Test file cleanup (#2040)
0b8e83f Allow non-root trivial reductions (#2037)
a2dfe40 Fix vectorize size calculation (#2035)
e040676 Use withPredicate to replace setPredicate to maintain Exprs immutable (#2025)
197221b removing ci workflow (#2034)
40e2703 Reduction rand like patch (#2031)
bc77266 Add utility for checking bank conflict of shared memory (#2029)
ddd1cf7 Add back FusionReductionWithTrivialReduction_CUDA (#2030)
fbd97e5 Revert "Cleanup trivial reduction workarounds (#2006)" (#2024)
bca20c1 Cleanup trivial reduction workarounds (#2006)
e4b6585 Trivial forwarding (#1995)
1a0e355 Fix contiguity analysis of predicates to match updated contiguity. (#1991)
a4effa6 Enable output allocation cache (#2010)
35440b7 Patching bn inference (#2016)
0f9f0b4 Add matmul benchmark (#2007)
45045cd Enable tests previously disabled due to an aliasing bug (#2005)
967aa77 Contiguous indexing for View operations (#1990)
a43cb20 Make inlining even more modular (#2004)
dc45835 Test util cleanup (#2003)
3ca21eb More strict validation (#2000)
a7a7d57 Fix build problem (#1999)
fc235b0 Just fixes comments (#1998)
482386c cleanup (#1997)
4cbe0db Improve divisible split detection (#1970)
42ccc52 Minor build fix. (#1996)
fcf8c09 Cleanup of lower_utils.cpp: Isolate out GpuLower usage (#1989)
15f2f6d Move ConcretizedBroadcastDomains to shared_ptr in GpuLower. (#1988)
8f1c7f5 Minor cleanup lower_unroll.cpp (#1994)
1d9858c Minor cleanup (#1992)
f262d9c Add support for uniform RNG (#1986)
eb1dad1 Remove non-const functions, remove GpuLower instance on build, pass in ca_map. (#1987)
634820c Add support for some empty fusion (#1981)
eabe8d8 Segment self mapping fusions (#1954)
e96aacf Enable Transpose operation (#1882)
425dce2 Add a null scheduler that helps segmenting away no-op schedules (#1835)
306d4a6 Fix canScheduleCompileTime check of transpose scheduler (#1969)
b1bd32c Minor fix (#1967)
bd93578 Enable transpose scheduler (#1927)
b7a206e Move scheduler vectorize utilities into their own file (#1959)
d9420e4 View scheduling (#1928)
c668e13 Upstream push ci fixes (#1965)
c40202b Fix dump effective bandwidth (#1962)
93505bc WAR on index mapping when exact and permissive maps differ (#1960)
45e95fd Allow splitting inner-most ID to create virtual innermost ID in transpose scheduler (#1930)
a3ecb33 Improve the comments at the beginning of index_compute.h (#1946)
f7bc341 Remove unused variables (#1955)
df3393a Some cleanup (#1957)
7d1d7c8 TVDomainGuard factory (#1953)
357ba22 Fill allocation with nan on tests (#1956)
8eafc54 Fix detection of unmappable root domains (#1952)
90a51f2 Some indexing cleanups, Add eye support (#1940)
ddc01e4 Exclude unsupported data types (#1951)
992e17c test the groups the same order as they are merged (#1949)
208262b Move detection of self mapping IDs to IterDomainGraph from (#1941)
ac4de38 Merge pull request #1945 from csarofeen/master_merge_0828
6310948 Add full, full_like, zeros, zeros_like, ones, ones_like (#1943)
aab10bc Merge remote-tracking branch 'upstream/viable/strict' into HEAD
4c254c0 Fix arange when step is negative (#1942)
89330aa Tensor factories must set the output shape as its input (#1939)
```

RUN_TORCHBENCH: nvfuser

Differential Revision: [D40869846](https://our.internmc.facebook.com/intern/diff/D40869846)
Pull Request resolved: pytorch#87779
Approved by: https://github.com/davidberard98
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants