submission 754245
colorswind · python · License unknown
Use it
Vendorable · source mirrored · license unknownView source →
No package. Vendor the mirrored source: 133 lines, June 9 Researcher Reciprocity License v1.0.
submission.py
curl "https://kernelindex.com/api/v1/implementations/kernelbot-amd-mixed-mla-754245?include=source"interfacepython
Compatibility
measured onAMD Instinct MI355X
declared hardwareAMD Instinct MI355X
architecturesgfx950
dtypesbf16, int32
Benchmark evidence
1 measurement across 1 GPU, fastest first.
Operation / workload
Hardware
Latency
Rank
Observed
Reported · How evidence levels are derived →
Source and license
sourceavailable
revision digestsha256:60c230f497f3d94d43606ed9f437e40098ea1430ce301dd988d7d451eca3b1dd
license declaredunknown
license concludedunknown
authorscolorswind
imported2026-08-15
Techniques
Extracted from the mirrored source by pattern, never inferred. Each row cites its line.
Kernel source
submission.py133 lines
#!POPCORN leaderboard amd-mixed-mla
import base64
import os
import pathlib
import zlib
import torch
from torch.utils.cpp_extension import load_inline
from task import input_t, output_t
os.environ.setdefault("HIP_FORCE_DEV_KERNARG", "1")
os.environ.setdefault("HSA_XNACK", "0")
os.environ.setdefault("PYTORCH_ROCM_ARCH", "gfx950:xnack-")
os.environ.setdefault("TORCH_EXTENSIONS_DIR", str(pathlib.Path(__file__).resolve().parent / ".torch_extensions"))
HERE = pathlib.Path(__file__).resolve().parent
MLA_CPP_B64 = "eNrtPWtz47iR3/0rEG95ipI1tiR7HMcPpbLzrnnvOk7dOQqLoiibK4mUSEq2d+L/nm68AYIS5ZnN3V7ONWNLIPqB7kaj0XjwhzgJJ4thRM7CTnv/Jp7tv3n7+ecii4Lp3k1v6wf1eBoUZkFeDOOk0IsQHP77g1HnyIQWT0az6ifH7gfZIiniaWQ+zNJwlsXTff5372Y2622p59vh2C/iSbQfplmED7eNZ/vhmBVqGIs0C2/2o7siSvI4TUxy00UR3ekF6ayASsFELyvuZ5FfZEFc5MjLMBrFSUQ+vnj5419fk87WVhJMo3wWhBEJxwU5J5zH061FHifXZHQMZb7PZeFHh9MD9ejuUH94d2g8HnSO5NPBaJIGRefodGtrKy+yRViQN+MPk+BFFKbD6NXt8IIy+AZAvm4R+MmLoIhDEqZJDm2cZQR0etD1CzL+kn5cTN9EwRCrAQFEuhri3dKCWA/wPs2Cn4JkzACedbrrQL6MP6azCIm8iKcAouFYD/qTAXp0uB5C1Gb8WdR3LZzr0F2mFrr6vH8OrqOf418jUle0oIm/BdksFwCHNQAubqDfD3POnMTQRIM9ObmOCv8WCvwc+PAa6/B9CsPFLEjCe8UxhdjfJ1/erYH9W7CMLqBvfJFyF7Z4WgPywzT4QmobraD1jkMcdGvSeLcZDeTKTcMP8jzKCk9r9vm5AmoowX2+rNmYSyE4aXI1WbzcXHCfBS3Jfk1anx9B69Ki9a4urct6ood6muzh25MnGr/nGuXPQi/VtH+cpOH4AyFaO1GL8xtQSR3QjwoU2EbQ8RJhyR3Jo3kdDO9KGCj8MJ6ugX4/zL985o4coY9PawBA3BAPI+kqNTfJ0dVA8m75OUiiyfN0kteyDAryIQiz9Kf0Nq/j6BQEJ9J9VpNKDDCo+s0oCagf74sIwVzImqW2Nwm62XTkjY4b9Vtk0ZBiaZaavTH+t3m+iBz4aVFNDuOEi7y+X6KQF0EsLEKzq6cW3tpMUL7zz1EGstEaw7nbt2VVCy+MT4DtdZYuZjkGa6IH79u6qIsN+aEyV/I2aTQrWlRbosgNgPwYJMP6XQ0BESJ3tNFCugkjtFG8Xx3XBqTdBclRQUk5SXPZt7tVbczlDlti9Dv0WdkGJympnO9EydGDqyhJCVYRkgNnyTecOyk26pp92eS1jrBrG2EtrGaTFY1mybOtHdF/ShfJ8EPKBjka1OKY2j4hGT4gRUqSKMiivCDRMkr2tsimP4Ct48AW3Ab3j8PW1bD9GmXpCiQO9eLMUg+/W2T7UzK5J/liNkuzIicJxhPnnaM/bGth6iDII4LT4ZyWsFnqHOSHIhvx7s1Kx0sstkvTReHjFHmATukBEBfRdDYJiugMNEGCFiqEDHpbhoZIdBeEhT+Ml17DmNyKxgRkhwywPW1oRkCmCxDsIIJgaBnn8WASkcE9GWxzS82iYpElJAAfMmA8KGLBAoQZRvEEiQGbV32PFgFj9O9A0OdIgPIuUH5KOg2FTjYJBYW5AXLR2/L9YbSMw8j3yQWBmfzQW6YxdMtZkVk4m95FswHFgGw9LookL9IsUvhaQGEZTBaRQCwwQoNouYkZBRwXUcZkD4K9jtjH6WganHfY52HuZ9QeHNTDm2joD3N87iOMVNIPsyy4ngZkkWTpZEKLRmlGPEoRmGmfwp8zRhI+7u4KQPzx/cEinhRx4gfT4XWY+IzONXppfxBkWRxlXvuu0wadc+5apN04pXYKg1gmQvGHTXhBQYA6f2OWaiM7blEtcCy8E2LJ5i37hiat4+KhIiP1OciCKWakLjucJHMCF8BVRe5KuZo4mS0K5mYwDdac+7RP0OYdkya4F/ldOPFB3sLp0yRK4O9sEhfjpcIHnsdEOIqTYOKzYo4XM2ykSUGrH0zySGGdYRMjMBqGmHoSXj1PR8U0uAOJBpgLtB430UHSR6wd6DgA38dPFy9PoBEFmQSLJLwhA3TxOfr4Z50uKjaE8S1MpzMIYzIsDmgnZIINrmeZ7NhE+YxX1QLH/nw9SQcgCh+sgVH1GVXf94Boi7w6OVFJn8YWJThO/Okk8Jcg+NEtdH+K2L/pHNEcJ/5fdrxqc6Byy9ESf4hHw2gEpJ+//8vH1y98v66h/AABYmRVfoXFyTAeqRErLkj3oEWDHQLObAQcpssR6ydBPgUfBsICYRJvO/dB8Fl07cfTKbRrcNAlN7fw3XvzN/+nl6/9D59evGxRbJ0G/JcDI1MrHSBoGi0e0iSwnlmLhyKvplWeQNRnVeZFRmU1Mo0xbUeThecrMncKiBni+H163UWQzt7hYffoT8/ah+3j4+M/HR0cjkp2Kc0S6jeZlvZMS7VbwXsa1OfVS10vn2Ir89v4118nkSiMArDu69mC3AQ5OSZ3IfhKWgafaNkhyW+CIRh5lFzHScSfGmUcNlwwbdIRGicuTKj049vh3d5dSfJAQ6uDH/dl/kirFi6sWjuyFpqWIsUqNoGXXY7bYRppNo4yC2GTXEDnkgnZXWFA3LGNiKfAelLCAxq+MzHr3pxFEKfa4IBs5uTsnCSLqR8ucpupQVBAd4+Hd8CUorSv3KdVH0whvFkk4xLIjgmCWqeeWD2g8VklPqyqLIiBrmQDxrOs4GwYXDUNpC5Q8BAKUOHZtQBtSDoCKSbZ111NhEyZanWFfx8bCRGTFQMj/26iNEXCUKrlGIsEa4Nq0prqJY5SkyF9iKzRUiv1AzZw8enFpxMyTBcYhENkEY6d3sO36OojsEFXmf06FnRt1ua4xBeMMC7OoNgSRxVXq7ngNub74NUyCLt8shCxTO7PISQL7q50/9A/tevzuEu5AIiN5hSGpaj79LNK4XIMvOZ4aaK/6sr6fHLN6z8AP5Mh8pRmvuiPVE5P+AMQkVFlb16uRAcJsxZwwD1eX6sPMsNKTPJXT/o0lmUYUIxsSpKlt+xDmE4a5GkPGtTUBIFP0tEIQymMgVU5+FSAgIhYtlQkCHVXapvDJBh0n+FqLMLu67BGLtEBGiq4nU3gZpgTQkCE1yhaKS8H5EJA7WwClV1jdhOkWmqeSm66wATUziZQMU/rCbk2FbCZC91Fvkw0UqsMiQaqZat23ekQJlQNxEriV4BlhzqMytZVVF8ohh8IhqnVhlUE8cRH22AW8rRslZUyHLD0rqUxZ6rWpbf0lu4usFS3ATibJR4zHJ0jBxMypboSDUw+LUw7j8AkuosU6MZdRkJu1G2EJev2ayQ2ByUxflcDtjLNVQas1GXBrrd9Q0WP7QZWjKqGhCvl1/tXTDJi0FEziCs+nLW0VaI+mcFEAEcPkQQ4OoSBE+dv8yuZMTwzAp4W5V4u2ve8Rl+f4c/FZF0NRZiqo6MbDkPM0LKIFpqht5mwHH+5jMKXk2iqrSZW1MKexrZnQNUKtu24oSVmDWJfR1Oj2BPzQNmGub+MQp/Pv7QRVY6g+JiOoqab4qriT8k/EEBTqdYsnIvi3rA7qQF/0Dm6shrYtwTBOxCbSfCJc1Ob5O6KGbKCcyS7qhJeFvFTsrsbrxjhsZWMFTYXiNXcjEt5lRPD1CpHwLwHs9fqoIB6fAGyr4EYujy19CEEG/cBGq3wzBB9z3tCZyVXyFF5agBE+w1Xn8Sos3MEqgsGuQ9Bpxkx/XYyn/uLg67REhb/3nVpW/T2NkxRVPBk8PUL4+sX4KuLnPxic2KnY1IMSNjCQhjkxZkQS8+jjF790idPSPvuj69evVpY/FiobuJKVJ5dfNDVKTRIr0c6R42VlJSaqNDgo8eLWqpkkraAj4YF/qCpX35ULs0TOS1hFnQywpFzbbkbwOto5CR4EsXXN4M0E/wOYAplQZfy0NN06Q9nM880HQMa96h6GmuNFojsxw7+fsV/jQIIvnQRmC2xpYfFLcmuBvbvbMHhy997Czrdw99/E45/90047P7+m3DwPZtg5ABk8v1cizjoQq45SMhEjMhTACWNgGs49f38PgkLFjUYHtVk2MpKaBy1bS7qjHfaOKxndZyDcF3pydaXRuAHR8NNjCUzQHmM4iwvsKWGsjUR6WsRgBFrjACd3K/o+2hofpD7tI6Ohpyd4dB5WoFrvggAkC1uMFwS+z45PDzea48U6FyugmhgGpt05z4LUEbHKwJdvpEfA7Qu3fng00MU8CcoiiweLIrI9z0vuiswSC/SzMdVO6/b0O38O0dgPHuQY+s8wVqzoeKt03JHZQEMbcMsCMfR0L9Ns6FpxGx+qj8smUC45KIEqfuzMV0oRA48Da5FebvCALzbb+nypyvQvyU5CJI7NslOwxWFg9JpEG56MbSKno7cCLf/z81ixMzQPZMxwdgmFZEuxhlK/0rA61MeEL8m4cZm/nUDwdbOEKwTOZObcN4byk2AGTNAprZDh9lpEz+e7+hVivS4LLyHUmaDZdpXZNnZ51KmQ+bpcemcJ+rl8pU+QZBsMkS4tVdboGq4V6RsCedZqEaoceTfgnqgq49GUQaDSp4usjDyNGYalRmXd0uwM7FtkG+ApHjZvBM41WDNTWaOvNf5uY6x4WQeBcp9rXvi5OFHYBpIu5Ni7f4GQ4FaqAA7F1+stQ5jTzFYN6/2mJiDLRoAKfxwVpHERxrwfM30WyRwzS6xaj3BtRJh9sNNoGk3xmY0HaC4DnG4Ej6XWV3HmkbFao/tFiQKd/6mlPutyE5/x7UWYx6PRhkMh9n62E4a/e6qHLcrs6HtyMENOThzwH0403aL7LS3yckJ2c63PcFJYx0KZ2J6m7sO6gGHOExDLLeDFDrwv4v5+SjhWfqTnQPC3OK2ExcytNz2uOpg1oLsocPiH3P1INn22g03ErI9jaZpdl+mUSPqXucS+DoRdFL66czM/7Pd1tBD8eGKYW5F99xkzQgshvPj6KkbIMJNNGxfexU0mrMiWIlL9dv6K2/fq6N+2zLS//fL/z39cn+fhSeTyXIqRR/c+nqLgFfKQYt4QX7gc/VhuCLE1tLDiZYws5aw0Rbub2+7ojoZ1N0GMBVRQV3/bJBCMDh+DyHH2yLKep7ew+ORFh55slLJCWDDch9Rh0lx1jYWmNzr2yaEbtPMnk0URmzKFtw8jEd1RrRo1QMpGEEkXy5s6Et5GC7jUfCnbz++evvx7cV/2Q9zNXdVham1cCiXZIzNQi2VMcIVRED0tW2E1rg/Fyf2PCRl4XVJFWvDaxUE+uECe3dVEK3NHj6CP+2ersGWRHfovCz8/xBnzy1ArM3rsSifTS0VSW1PkZTkfOwS5UdjekXXX1dJXNRbJXCRPXPwhdNnudvPtmrdoCzRtPQmN06/xbRr9A6rP22Za7eMTW2CNlZzs/nY1TDws972qQCkVrLdqBx36CjsmsIK2a+GhKkm2xlQigzWwjOi+r44efx+V7K1ZgF17gD/IuEVc01x9NCQLdrp2Fh+xCs4jvlsle9A88xe0mKr5rhaXsoL0dVyitRYJTcVSndB+kmQcJ2yLoMLd7Rx4U2QNQnu2mc6digYrT3OAYMHj/75TxjJ42QEn13zq1kGSEbe9sfgI4F48G0yIsOoiMIiGgJ6spOfsCNB5zujllDg+c6whXTh79+T7RZn5k4+pw8dAzwXQJEtoqqgVatGk/luOa0LaMXuY4ho2Uc7m1PhazDKdXYZe1vGGB10Xr0fw5EkKvdwbkvMIPwRNCm/Eqj7WmvrTrXnWrPnot0CITbN7Q5E7kiwwGqJNJI/9rhD4dC25v6dbMpOOWfMWl2T5WfEvoDx1diRHnH5Gdn4UrpWJqccAlqPdC6QstQchzt1Sl+1qLw4NpoGuAjhd47u4B8eqGEnaNxBsmK1Vfl8vu75KgTtzYpBTj+AR/oDuxVp6LFrkcrxND3LIE7HgHXg/RvqBIVjyUuzLDt3e1w6x1bl95S0rnaG/ROCbk5JyCqzK3J/B1+YI4xbLMDxTCsyRw5FsYH56w2g5vWhRFfQ2AY4GLkPEZbz7bDgsjf+JinLscx7hFw03WxXuJ9voTUv0ZrXpkVHWJDA4arG12bKrSzFVn0ZPNRU6IM4BWc/4IswtgM17L9Gxql05Pes1vgLYVjtAbVFjnvm0jlNQkXZlIWG0XARRuyEtoyg2BGWma00dTxwGIUTurxqC5kd8h643LMgCX45vw1mXnnTQw/QtUhVOY1zWjQqchG9B5qpjfUCt0LgwGajZQ86/YYLVThcxX/nqJr/+wr+71fyzwM5F/fhsIJ7eGByr8d9fBPumO9ts6bu37S+tyIijB+z7qHtLdx4/lq5F5F3y7iPOw2b6syRfpCYqIPD8HGuny7Wf6QQoXPejTz2tWVQqNHPJRar30l8FHvDpcJ8gdmXtrGn4j9Iezh1mHVHnmeUPuUSbdAbSvBUbsOpOhTe7rmBsZaymNAdyoIHLeUqAx5b0Oss1H0Yu2RwSrNo7iTQLc2nMXui2bWWaI170RaqZJHYRMMybj1qEOTPunDwtieKXBMKOSEdw3L0PcNjuTOHY+FWWkZzuqXrBrmnNcziXHLXNHjeFQJtSpL/qX6o3P7KncRylPYRyYwN0HIbcUtd1WDT3d8nwQm5ytp7AfknyTrsT5f9OdgL+nbtAas9YLUHrPaA1R70HWkjbZmf7Wl2b1Kzx3tgerBqFGTIZRMpUsQNA+CqigNVsdMvrSUwNLY0VGvL0uAASmCPEAi/bXZNABHgvsAB/qoWimjljLaxc1QShqgwFxUcQpjpIugaIug6REAP6QhRHQjBuQXAfZ4pga8z8GgPFaHJMe0Vs1XZatG3jVz1o3xG173nqHofXkl27OD1NLgfRAQPUUuveRNl0bfuoIOP5gY65TDUXAK/4V46dOTfZd/eCqpdg+qBpGpv3dOmPzO64e+w31q7g8+5BY1hoohamr/zxNasA3WCZcZCYecTmK43SpMcmpdbFlrOf7kmz0+WRb1EP0h4FuS5key3t3uWdz3JG2TPz839tSt3wu0TvGWHXolh0N7X16fcx6LKSf1LwOIZaHZIt1HO6+snazO1L21tLt/Kx7IpI9ZW/vHc3rOLK7ZRnvv06m/vADRpOZSKJYdlUUpEmumLUnfgl0n5RXbsD44O/WU3hs7gGfw1G6zBK5YlloXbuVnp70t39ltb/tQVYyS/S4lv6Mc8831ZSnyvc4hLlUheijzypUwjO/uEQXJpJLqXhWev5z38prxIfadrk9nplTD59UHcpTXAOHYnp98j12xuMqW3y/Et4paAG601sJoXdIaanF0j/C7XbNcrqvb43yLklsZo5c4FtT61dFwvcyqK9UVpWbh7roUQ5nYAYyvBnrzdK4VRJ4DWeY0zGoeJHbZiN8SWvEFI3E3SMw+36JuPkqUv5kI4coKPFlMikWw4/ZauUtuRVPWlR2y3/u6zp8uas6e6w5lz6zeEJPDol3JWQLsnRzvdq193g6d7yXnlms83mD9yBBNBZSbrkxH6eaYzrYGl01X6NTtXHKLPp+TYqkl6zdINebnfuS8e/IlmPcp3DxqX75Xv+HM8lgvUMEFpkvJ9gereQfO7vLUKPQO+eATG3+3n20S7aU+/Q49X5+kavEPPW9kcdXfeisu8rD34LOpUN6KVL6PD615rwd6XYQt6qZkTjJ3SKNHUoo1Uvbej4q6/iouaFA5+LUK+EoX1pgkLhXaznnh7iFXjQ3D3M2rq3ZK/bEDt97rSzamlrKdlGE2LXVDJtN2Xd0oxYnSAbQzy8pVQ/DZJ5oavNDZELIV9raD9TLZC72YMHrtYZVpdnR6gnDMrAJSnWsGZNGutcPfcTdOee+QRR+q5Ls3aVRhp9k6qc1dapelxVGNYOpJ/1yR/xUm6DxCtG8Lk9l5lFjhrEeU9HDT45/1znId8rcceanU08YfpbaIKxd5OJUh3iKr06Mqt/x5VyNPc0MVGXllz5KkQ5P+UDjl/ttZoMr2sNafSlCkwLErtbTes0q8GQClWAPzeFC8cmQTjiyVrTACUxyVRDgOqzwTaY00Uqvt4pOBYlFawy2egyilh98Npgw4t2eX3dkLB3h2vW3a0QRhe4RO2S5Ulv6zfD2u0167Q3e6uJutKheEV6xRPKRT0HqtBWm7FmpV5l1s8cE/PQZU0ffotZ9qZairOsotb/XZ5VcFr1QYO1FLcR5XqQ/eVkB2gwYCXNeV0a/WOi8ecyanTrk3apMcZV4aa6+qTtdk9f9AjO4iFex4T35oVZBqfi7flvXn72X/+5uXzd144HTbI43/+TnEPU/KVfK+fv0vGb+LZyyzDQ/gkyjIIvsDrIb+nj0d58emn52940znOc6Tz8yIMoxwCwm0QDVJLsxOyjVf2zF5HBeUCr+xMrhkUBAUc6QO5vaH3VbcbW1tQ+9UC/F6cJngQCBNdN3kQpv4YJh0RWEQSijcDsPJhUAQ+fUkAPY7A5hzmWxXgz/DkhL4ZkUwXxos4gNyHdLiYREBsSj/goupiMpF3sauKGl84yxnB11qV+TTIXR8Yo3sGrxdBNjxTjPYILfGm4rok7DyCQ4lF7znKIGWj3oP4XoB8vCcMErM+0FmjbJZFIlFL/RxNhvU8U6LGjQ0O7KBV0UogwCXSIoLUtv/fB0d1blV/2z2omOS8XHafVV65vr0Je5oONA4r56sS98OWkXKme7T+bGj0RBrDKZu+gwbZxRfsRZ0nJxdRkqdZj9YrC8AzapF5a/N3pxATxXj5PXD4FWnL9T/i4kIu1segcLxw4DFoqDLEC1BtdVBjFx1Id2rzvWE89RrYzQ5wU+98j15G32mw5SKtqEuLnv3xCGxpLt/ScgWz4s5RC4r7YvlKRz9eWvihQCegF+kEILKRFIq0gNERZNtZQYbJbS9ZTKMJI9ehaPjCKUUG3b8I4oSl0Cb3JIWRLZpE0ygpXEih3QAb8DtdKE4u1fGPr9jrXA1RiHe8VsihEhnFxd4sO0rMtkOXIax8ZatXo8bFfksSiJo9Wok3zv1wMQxwP2cZQZqQ53998Rd8MTFh75Rx4dLS13h0k38TOHru9zAM8qqEFLfFdsORxuJmUgUqzEzC6mwCxR4zGRp9sRdOSC7PGZs2kKS4QzlmLzBSZCreZCTxu1rOL4o/V63ZlwlKQ6yu6/lRwKzcSZlXXaWlHXIot/dLzcGcy6E6fFHTpIhngDsd0RcU4PmAXDaKb+dFd5SzS5POTbf7iT3zGnvMetAVsQ8NKKK2bHe3xmkZ9YjunXksZt5BdMTGtfkSczSdFffeV8wBYrd/1uk+tIzm6SiMG/BdKMRo4cA1MrlRV9avwbMCBX1tOG7VKU5OsD/TN488X2QZOD75WnGQVs4/cA2ue/+L/uYKK9DClDt2VhFdgeBb1bVHx03aPZ21oZlq3wZ7PdCWa2Yj+7l4s0ZrHXu6ot20dT3KGmfUc+Im963SOsjKShqz/Kkx5mtVpQMuoTOWLFeuM/CwjanKTwe/fP1tmvV44TrXKfJGTfWWr0RiAT3bNUI/790EuU8PSMKo+GdW9rSnmIFw1pig4KxDItFnGxQ9RrR4C8J51URNgoq7Dq2LnLlG6uKwNuaxaSAywVR6RVNUT9iXB7ueoX1etWQRGhS+8QXjxxA0hhfxbb+nr5LCfTQf3v+FsEieME7JbVzcMGluY10KGCXDycoZCkP4jmLwuCxrh7ndZ+AnO/ivLkT1SpK6TG1DlDC+Mg/ZIkoNLTk7bZj3QVas29eRjjKUDecBOCTUWELbpNHsh16o2tkcThOZYX1OqZVumf9qrr9VLNM9GFsmQKK6LF+/fu95deblZ71GZdtgBnPg4RVbq2vUMblqFO3KJ1yCVY/5grL11h4+fTciEbxWR8UTYKSaja7bb+KQa2VCYaWRUFHVNNTGekxgmatrtVc+XSNbZoyW23RlS2qb6sPWvwBIVl/B"
GPU_HSACO_B64 = "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"
_SRC_PATH = HERE / "_submission_mla.cu"
_source_text = zlib.decompress(base64.b64decode(MLA_CPP_B64)).decode("utf-8")
if not _SRC_PATH.exists() or _SRC_PATH.read_text() != _source_text:
_SRC_PATH.write_text(_source_text)
_BINDING_SRC = r"""
#include <torch/extension.h>
#include <vector>
std::vector<torch::Tensor> mla_decode_h16_fp8_fp8(torch::Tensor q,
torch::Tensor kv,
torch::Tensor kv_scale,
int64_t splitkv,
float softmax_scale,
std::optional<torch::Tensor> hsaco_tensor);
PYBIND11_MODULE(TORCH_EXTENSION_NAME, m) {
m.def("mla_decode_h16_fp8_fp8", &mla_decode_h16_fp8_fp8);
}
"""
def _build_inline_module():
return load_inline(
name="mla_standalone_ext",
cpp_sources=[_BINDING_SRC],
cuda_sources=[_source_text],
verbose=True,
extra_cflags=["-O3", "-std=c++20"],
extra_cuda_cflags=[
"-O3",
"-std=c++20",
"-U__HIP_NO_HALF_OPERATORS__",
"-U__HIP_NO_HALF_CONVERSIONS__",
"--save-temps",
"-ffast-math",
"-fno-finite-math-only",
# "-mllvm", "-amdgpu-mfma-vgpr-form",
],
extra_ldflags=["-lamdhip64"],
)
def _load_hsaco_tensor():
if not GPU_HSACO_B64:
return torch.empty((0,), dtype=torch.uint8)
hsaco = zlib.decompress(base64.b64decode(GPU_HSACO_B64))
return torch.frombuffer(memoryview(bytearray(hsaco)), dtype=torch.uint8)
_hsaco_tensor = _load_hsaco_tensor()
_module = _build_inline_module()
def _quantize_fp8(x: torch.Tensor) -> torch.Tensor:
return x.to(torch.float8_e4m3fn).contiguous()
def _dyn_quantize_fp8(tensor: torch.Tensor) -> tuple[torch.Tensor, torch.Tensor]:
finfo = torch.finfo(torch.float8_e4m3fn)
amax = tensor.abs().amax().clamp(min=1e-12)
scale = amax / finfo.max
fp8_tensor = (tensor / scale).clamp(min=finfo.min, max=finfo.max).to(torch.float8_e4m3fn)
return fp8_tensor, scale.to(torch.float32).reshape(1)
def _choose_splitkv(bs: int, seq: int) -> int:
NUM_CUS = 256
NUM_WARPS = 4
TILE_K = 32
# (bs * split) % (cu * warp) == 0
# splitk <= 32
# seq % splitk == 0 && seq / splitk >= 32
MAPS = {
(4, 1024): 32,
(4, 8192): 32,
(32, 1024): 32,
(32, 8192): 32,
(64, 1024): 16,
(64, 8192): 16,
(256, 1024): 4,
(256, 8192): 4,
}
override = os.getenv("MLA_SPLITKV_OVERRIDE")
if override is not None:
return int(override)
mapped = MAPS.get((bs, seq))
if mapped is not None:
return mapped
split = min(NUM_WARPS * NUM_CUS // bs, seq // TILE_K, 32)
return split
def custom_kernel(data: input_t) -> output_t:
q, kv_data, _, _, config = data
# q_fp8, q_scale = _dyn_quantize_fp8(q)
# print(f"q_scale: {q_scale.item()}")
# TODO: bf16 kv on small shapes
if "fp8" not in kv_data:
raise RuntimeError("submission currently expects kv_data['fp8']")
kv_fp8, kv_scale = kv_data["fp8"]
batch_size = int(config["batch_size"])
kv_seq_len = int(config["kv_seq_len"])
splitkv = _choose_splitkv(batch_size, kv_seq_len)
final_output, _, _ = _module.mla_decode_h16_fp8_fp8(
q.contiguous(),
kv_fp8.contiguous(),
kv_scale.contiguous(),
splitkv,
float(config["sm_scale"]),
_hsaco_tensor if _hsaco_tensor.numel() else None,
)
return final_output.contiguous()
scrolls · 133 lines total
Source code from GPU Mode and the KernelBot dataset · June 9 Researcher Reciprocity License v1.0
Best evidence level for this revision: reported
JSON