Skip to content

Commit afc560a

Browse files
authored
Merge pull request #350 from zaliu/master
Feature asmcaps supported isa (#342)
2 parents a307012 + 94902fc commit afc560a

File tree

2 files changed

+31
-12
lines changed

2 files changed

+31
-12
lines changed

Tensile/Common.py

+27-12
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import sys
2323
from __init__ import __version__
2424
from collections import OrderedDict
25+
import subprocess
2526
from subprocess import Popen, PIPE
2627
import time
2728
import platform
@@ -658,6 +659,27 @@ def locateExe( defaultPath, exeName ): # /opt/rocm/bin, hcc
658659
return exePath
659660
return None
660661

662+
# Try to assemble the asmString for the specified target processor
663+
# Success is defined as assembler returning no error code or stderr/stdout
664+
def tryAssembler(isaVersion, asmString):
665+
asmCmd = "%s -x assembler -target amdgcn-amdhsa -mcpu=%s -" \
666+
% (globalParameters["AssemblerPath"], isaVersion)
667+
668+
sysCmd = "echo \"%s\" | %s" % (asmString, asmCmd)
669+
670+
try:
671+
result = subprocess.check_output([sysCmd], shell=True, stderr=subprocess.STDOUT)
672+
if globalParameters["PrintLevel"] >=2:
673+
print "asm_cmd: ", asmCmd
674+
print "output :", result
675+
if result != "":
676+
return 0 # stdout and stderr must be empty
677+
except subprocess.CalledProcessError, e:
678+
return 0 # error, not supported
679+
680+
return 1 # syntax works for
681+
682+
661683
################################################################################
662684
# Assign Global Parameters
663685
# each global parameter has a default parameter, and the user
@@ -717,18 +739,11 @@ def assignGlobalParameters( config ):
717739
isaVersion = "gfx" + "".join(map(str,v))
718740
asmCmd = "%s -x assembler -target amdgcn-amdhsa -mcpu=%s -" \
719741
% (globalParameters["AssemblerPath"], isaVersion)
720-
globalParameters["AsmCaps"][v]["HasExplicitCO"] = \
721-
not os.system ("echo \"v_add_co_u32 v0,vcc,v0,v0\" \
722-
| %s %s" % \
723-
(asmCmd, "" if globalParameters["PrintLevel"] >=2 else "> /dev/null 2>&1"))
724-
globalParameters["AsmCaps"][v]["HasDirectToLds"] = \
725-
not os.system ("echo \"buffer_load_dword v40, v36, s[24:27], s28 offen offset:0 lds\" \
726-
| %s %s" % \
727-
(asmCmd, "" if globalParameters["PrintLevel"] >=2 else "> /dev/null 2>&1"))
728-
globalParameters["AsmCaps"][v]["HasAddLshl"] = \
729-
not os.system ("echo \"v_add_lshl_u32 v47, v36, v34, 0x2\" \
730-
| %s %s" % \
731-
(asmCmd, "" if globalParameters["PrintLevel"] >=2 else "> /dev/null 2>&1"))
742+
# This doesn't work since assembler politely falls back to default with an unsupported mcpu argument:
743+
globalParameters["AsmCaps"][v]["SupportedIsa"] = tryAssembler(isaVersion, "")
744+
globalParameters["AsmCaps"][v]["HasExplicitCO"] = tryAssembler(isaVersion, "v_add_co_u32 v0,vcc,v0,v0")
745+
globalParameters["AsmCaps"][v]["HasDirectToLds"] = tryAssembler(isaVersion, "buffer_load_dword v40, v36, s[24:27], s28 offen offset:0 lds")
746+
globalParameters["AsmCaps"][v]["HasAddLshl"] = tryAssembler(isaVersion, "v_add_lshl_u32 v47, v36, v34, 0x2")
732747
caps = ""
733748
for k in globalParameters["AsmCaps"][v]:
734749
caps += " %s=%u" % (k, globalParameters["AsmCaps"][v][k])

Tensile/KernelWriterAssembly.py

+4
Original file line numberDiff line numberDiff line change
@@ -554,6 +554,10 @@ def initKernel(self, kernel, tPA, tPB ):
554554
self.version = globalParameters["CurrentISA"]
555555
if "ISA" in kernel:
556556
self.version = kernel["ISA"]
557+
if not globalParameters["AsmCaps"][self.version]["SupportedIsa"]:
558+
defaultIsa = (9,0,0)
559+
print "warning: ISA:", self.version, " is not supported; overriding with ", defaultIsa
560+
self.version = defaultIsa
557561

558562
self.AsmBugs = {}
559563
self.AsmBugs["ExplicitCO"] = globalParameters["AsmCaps"][self.version]["HasExplicitCO"]

0 commit comments

Comments
 (0)