Mahtavaa hommaa on enkä edes guruile pahemmin agenttien kanssa vaan pidän selkeämpänä kirjotella speksit ja pistää ihan selaimessa arviointiin speksin laadusta ja sitten korjausten jälkeen iteroidaan itse koodia kuntoon. Näin pysyy punainen lanka itsellä ja tarpeeksi pienet palat tulee hyvin tekoälyltä.
Viime aikoina tehnyt kuvankäsittelyyn koodia Raspberry Pi minikoneelle ja siinä tuli niin sanotusti tehokkuusseinä vastaan ja pahasti. Enpä olisi kuukausi sitten uskonut pystyväni tekemään menestyksellä ARM64 assemblerilla noita tehokkuuskriittisiä juttuja käyttäen uusimpien ARM-prossujen NEON SIMD vektorikäskyjä, joilla pystyy siis käsittelemään yksillä konekielen käskyillä vektorirekisteissä suurempia datamääriä. Ja tulee muuten aika tehokasta koodia noin. Tuollaista kamaa ei hirveästi ole tekoälyjen oppimateriaalissa ja ainakin tässä tapauksessa Github Copilotin sisältämistä tekoälyistä näyttäisi ainoastaan Claude Opus pystyvän tekemään tuota lähes virheittä. Muilla tulee aika kuraa joka ei mene kääntäjästäkään läpi. Viimeksi koodannut assemblerilla vuonna 1992 Amigalla Motorola 68000 prossalla
Tuo ARM64 vektoriassembly ei todellakaan ole mitään ihmisen hommaa. Käskyjä ja niiden variaatioita on "aika paljon". Otetaan vaikka esimerkki yhdestä käskystä:
ld2 {v4.8h, v5.8h}, [x13]
Yksi käsky lataa muistista x13 sisältämästä osoitteesta kahteen 128bitin vektorirekisteriin molempiin 8 kappaletta 16-bittisiä lukuja ja tekee sen vielä samalla vuorotellen ristikkäin poimien niin että toiseen rekisteriin tulee joka toinen luku järjestyksessä ja toiseen rekisteriin joka toinen (tässä tapauksessa sensorilta tulevan RAW kuvadatan vuorottelevat väripikselit tulee siis purettua omiin rekistereihin samalla kun ne haetaan muistista). Saa olla melko guru jos tollasenkin käskyn tajuaa itse ottaa käyttöön. Siitä voi laskea montako perinteistä konekielen käskyä tuohon menisi...Nyt kestää 2300x1300 pikselin RAW kuvan alkukäsittely alle 1ms ja onnistuu samassa säikeessä yhdellä ytimellä joka lukee bufferia. Kuvia tulee 20ms välein, mutta vielä on monta monimutkaisempaa steppiä tekemättä jotka pitäisi mahduttaa tuohon aikaan.
(Tiedän että grafiikkakorteilla saisi vielä tehoa lisää, mutta niiden käyttömahdollisuudet linux Raspberryssä on vielä vähän huonot ja niissä on myös ongelma, että datan liikuttelu prossun ja grafiikkakortin välillä on hidasta enkä kuitenkaan kaikkea voi tehdä grafiikkakortissa.)