') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); })(); [TIR][Schedule] Transform layout by vinx13 · Pull Request #10538 · apache/tvm · GitHub
Skip to content

[TIR][Schedule] Transform layout - #10538

Merged
vinx13 merged 11 commits into
apache:mainfrom
vinx13:feat/transform_layout
Mar 23, 2022
Merged

[TIR][Schedule] Transform layout#10538
vinx13 merged 11 commits into
apache:mainfrom
vinx13:feat/transform_layout

Conversation

@vinx13

Copy link
Copy Markdown
Member

This PR added a schedule primitive transform_layout in TIR. It is similar to the one in TE as discussed in RFC.

cc @junrushao1994@Lunderberg@jinhongyii@spectrometerHBH

Comment threadpython/tvm/tir/schedule/schedule.py
Comment threadpython/tvm/tir/schedule/schedule.py

@HzfengsyHzfengsy left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Overall LGTM. Thanks @vinx13

Comment threadtests/python/unittest/test_tir_schedule_transform_layout.py Outdated
@vinx13
vinx13force-pushed the feat/transform_layout branch from fc3a9cc to b4f58dfCompareMarch 12, 2022 00:52

@LunderbergLunderberg left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Fantastic work, and I really like that layout transforms will be usable on both TE and TIR schedules. Just a few questions/comments, mostly on user interactions.

Comment threadinclude/tvm/tir/schedule/schedule.h
Comment threadpython/tvm/tir/function.py Outdated
Comment threadpython/tvm/tir/schedule/schedule.py
Comment threadsrc/tir/ir/index_map.cc
Comment threadsrc/tir/schedule/primitive/layout_transformation.cc
Comment threadsrc/tir/schedule/primitive/layout_transformation.cc
Comment threadsrc/tir/schedule/primitive/layout_transformation.cc
Comment threadtests/python/unittest/test_tir_schedule_transform_layout.py Outdated
Comment threadpython/tvm/tir/schedule/schedule.py
Comment threadpython/tvm/tir/schedule/schedule.py Outdated

@LunderbergLunderberg left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

LGTM! Thank you for the discussion on the changes.

@vinx13
vinx13force-pushed the feat/transform_layout branch from 0e4ee24 to d82bccfCompareMarch 22, 2022 23:56
@vinx13
vinx13 merged commit 5679bd2 into apache:mainMar 23, 2022
Comment on lines +76 to +81
class BufferType(enum.IntEnum):
"""Type of buffer in access regions of a block"""

READ = 0
WRITE = 1

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

@vinx13 Sorry I'm late and missed the code review. On this particular change, I'm 100% in favor of having enum type on C++ side; However, it could be more to "just use string" on the python side, i.e. use "read" and "write" to indicate BufferType. If you agree with my opinion, would you mind sending a quick patch? Thanks a lot!

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

This sounds good to me as well, and would give the same readability benefits at the caller side. I kind of like the enum usage in python as well, since it lets the reader know what options are possible, but that's the less important benefit.

At some point, it would be nice to have a macro to define an enum in C++, along with its value/name mapping and an FFI interface, so that there would be a clear way to handle these.

junrushao pushed a commit that referenced this pull request Mar 24, 2022
…10737)
This is a follow-up of #10538 to use string instead of enum in python side.
pfk-beta pushed a commit to pfk-beta/tvm that referenced this pull request Apr 11, 2022
* [TIR][Schedule] Transform layout
* address commens
* fix
* doc
* Address comments
* remove unused
* Use BufferIndexType enum
* lint
* support *args
* lint
* lint
pfk-beta pushed a commit to pfk-beta/tvm that referenced this pull request Apr 11, 2022
…pache#10737)
This is a follow-up of apache#10538 to use string instead of enum in python side.
Sign up for freeto 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.

4 participants

@vinx13@Lunderberg@junrushao@Hzfengsy