Skip to content

Commit ca6a758

Browse files
committed
[Fix] Keep loop_size variable in the choice list
1 parent a6e6ea9 commit ca6a758

3 files changed

Lines changed: 18 additions & 8 deletions

File tree

.github/workflows/pytorchsim_test.yml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -674,6 +674,9 @@ jobs:
674674
username: ${{ github.actor }}
675675
password: ${{ secrets.GITHUB_TOKEN }}
676676

677+
- name: Prepare volume directory
678+
run: mkdir -p /tmp/torchsim-ci/${GITHUB_SHA}
679+
677680
- name: Run run_cycle.sh
678681
run: |
679682
echo "Running run_cycle.sh"
@@ -682,7 +685,9 @@ jobs:
682685
-e TORCHSIM_DUMP_PATH=/dump \
683686
-e TORCHSIM_VECTOR_LANE="${{ inputs.vector_lane }}" \
684687
-e TORCHSIM_SPAD_SIZE="${{ inputs.spad_size }}" \
685-
${{ inputs.image_name }} PyTorchSim/experiments/artifact/cycle_validation/run_cycle.sh && cp /workspace/PyTorchSim/experiments/artifact/cycle_validation/summary_cycle.out /dump/summary_cycle.out
688+
${{ inputs.image_name }} bash -c \
689+
"cd /workspace && PyTorchSim/experiments/artifact/cycle_validation/run_cycle.sh && \
690+
cp PyTorchSim/experiments/artifact/cycle_validation/summary_cycle.out /dump/summary_cycle.out"
686691
687692
- name: Upload Accuracy Report Artifact
688693
uses: actions/upload-artifact@v4

PyTorchSimFrontend/mlir/mlir_codegen_backend.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1627,15 +1627,15 @@ def get_cycle(choice):
16271627
choices = self.make_choices(*args)
16281628

16291629
if len(choices) == 0: # can't autotune
1630-
return None
1630+
return [None, None]
16311631
with ThreadPoolExecutor(max_workers=8) as executor:
16321632
results = list(executor.map(get_cycle, choices))
16331633
max_idx = results.index(min(results))
16341634
if min(results) == float("inf"):
16351635
raise RuntimeError("Failed to find optimal tile size...")
16361636
self._log_autotune_result(choices[max_idx], results[max_idx])
1637-
optimal_src_code = choices[max_idx][1]
1638-
return optimal_src_code
1637+
optimal_src_code, loop_size = choices[max_idx][1], choices[max_idx][-1]
1638+
return optimal_src_code, loop_size
16391639

16401640
def _log_autotune_result(self, best_choice, best_cycle):
16411641
print(
@@ -1648,7 +1648,7 @@ def codegen_nodes(self, nodes, kernel_name):
16481648
src_code = super().codegen_nodes(nodes, kernel_name)
16491649
self._prepare_simulator_headers(src_code)
16501650
if extension_config.CONFIG_AUTOTUNE and not extension_config.CONFIG_BACKENDSIM_SPIKE_ONLY:
1651-
optimal_src_code = self.autotune(nodes, kernel_name)
1651+
optimal_src_code = self.autotune(nodes, kernel_name)[0]
16521652
if optimal_src_code is not None:
16531653
return optimal_src_code
16541654
return src_code

PyTorchSimFrontend/mlir/mlir_template.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
from PyTorchSimFrontend.mlir.mlir_scheduling import SchedulerNode
3030
from torch._inductor.codegen import common
3131

32-
from PyTorchSimFrontend.extension_config import CONFIG_TORCHSIM_DIR, CONFIG_AUTOTUNE_TEMPLATE_TOPK
32+
from PyTorchSimFrontend.extension_config import CONFIG_TORCHSIM_DIR, CONFIG_AUTOTUNE_TEMPLATE_TOPK, CONFIG_AUTOTUNE_TEMPLATE
3333
from . import mlir_common
3434

3535
class IndentedBufferGroup:
@@ -494,7 +494,7 @@ def make_choices(self, tile_candidates, render, template_node, prologue_nodes, e
494494
print(f"[Auto-tune] Trying tile size: {list(tile_info)}")
495495
src_code = self.codegen_template_code(render, template_node, prologue_nodes, epilogue_nodes, tile_info)
496496
bench_runner = self.run_bench([template_node], self.kernel_name, src_code)
497-
choices.append((bench_runner, src_code, tile_info))
497+
choices.append((bench_runner, src_code, tile_info, self.loop_size))
498498
self.reset(reason=None)
499499
return choices
500500

@@ -506,7 +506,12 @@ def _log_autotune_result(self, best_choice, best_cycle):
506506
)
507507

508508
def codegen_nodes(self, tile_candidates, render, template_node, prologue_nodes, epilogue_nodes):
509-
src_code = self.autotune(tile_candidates, render, template_node, prologue_nodes, epilogue_nodes)
509+
if CONFIG_AUTOTUNE_TEMPLATE and len(tile_candidates):
510+
src_code, loop_size = self.autotune(tile_candidates, render, template_node, prologue_nodes, epilogue_nodes)
511+
self.loop_size = loop_size
512+
else:
513+
tile_info = tile_candidates[0] if tile_candidates else None
514+
src_code = self.codegen_template_code(render, template_node, prologue_nodes, epilogue_nodes, tile_info)
510515

511516
with V.set_kernel_handler(self):
512517
self.meta_kernel()

0 commit comments

Comments
 (0)