То мисленето е хубаво нещо, но не винаги води до верни изводи. :)
Можеш ли да напишеш cycle accurate simulator на arm или x86 с меш и т.н. в 64К?
0 1 2 3 4 ...10 11 12 13 14 ...21 22 23 24 25
То мисленето е хубаво нещо, но не винаги води до верни изводи. :)
Можеш ли да напишеш cycle accurate simulator на arm или x86 с меш и т.н. в 64К?
ИИ може би може да се напише на 64К, няма нищо сложно в едно ИИ. Десетина функции са. Ще е бавно, няма да има throughput, но ще работи.
Даже има IOCCC победител:
https://github.com/ioccc-src/winner/blob/master/2024/cable1/prog.c
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#include<sys/mman.h>
#define a(_)typedef _##t
#define _(_)_##printf
#define x f(i,
#define N f(k,
#define u _Pragma("omp parallel for")f(h,
#define f(u,n)for(I u=0;u<(n);u++)
#define g(u,s)x s%11%5)N s/6&33)k[u[i]]=(t){(C*)A,A+s*D/4},A+=1088*s;
a(int8_)C;a(in)I;a(floa)F;a(struc){C*c;F*f;}t;enum{Z=32,W=64,E=2*W,D=Z*E,H=86*E,V='}\0'};C*P[V],X[H],Y[D],y[H];a(F
_)[V];I*_=U" 炾ોİ䃃璱ᝓ၎瓓甧染ɐఛ瓁",U,s,p,f,R,z,$,B[D],open();F*A,*G[2],*T,w,b,c;a()Q[D];_t r,L,J,O[Z],l,a,K,v,k;Q
m,e[4],d[3],n;I j(I e,F*o,I p,F*v,t*X){w=1e-5;x c=e^V?D:0)w+=r[i]*r[i]/D;x c)o[i]=r[i]/sqrt(w)*i[A+e*D];N $){x
W)l[k]=w=fmax(fabs(o[i])/~-E,i?w:0);x W)y[i+k*W]=*o++/w;}u p)x $){I _=0,t=h*$+i;N W)_+=X->c[t*W+k]*y[i*W+k];v[h]=
_*X->f[t]*l[i]+!!i*v[h];}x D-c)i[r]+=v[i];}I main(){A=mmap(0,8e9,1,2,f=open(M,f),0);x 2)~f?i[G]=malloc(3e9):exit(
puts(M" not found"));x V)i[P]=(C*)A+4,A+=(I)*A;g(&m,V)g(&n,V)g(e,D)g(d,H)for(C*o;;s>=D?$=s=0:p<U||_()("%s",$[P]))if(!
(*_?$=*++_:0)){if($<3&&p>=U)for(_()("\n\n> "),0<scanf("%[^\n]%*c",Y)?U=*B=1:exit(0),p=_(s)(o=X,"[INST] %s%s [/INST]",s?
"":"<<SYS>>\n"S"\n<</SYS>>\n\n",Y);z=p-=z;U++[o+=z,B]=f)for(f=0;!f;z-=!f)for(f=V;--f&&f[P][z]|memcmp(f[P],o,z););p<U?
$=B[p++]:fflush(0);x D)R=$*D+i,r[i]=m->c[R]*m->f[R/W];R=s++;N Z){f=k*D*D,$=W;x 3)j(k,L,D,i?G[~-i]+f+R*D:v,e[i]+k);N
2)x D)b=sin(w=R/exp(i%E/14.)),c=1[w=cos(w),T=i+++(k?v:*G+f+R*D)],T[1]=b**T+c*w,*T=w**T-c*b;u Z){F*T=O[h],w=0;I A=h*E;x
s){N E)i[k[L+A]=0,T]+=k[v+A]*k[i*D+*G+A+f]/11;w+=T[i]=exp(T[i]);}x s)N E)k[L+A]+=(T[i]/=k?1:w)*k[i*D+G[1]+A+f];}j(V,L
,D,J,e[3]+k);x 2)j(k+Z,L,H,i?K:a,d[i]+k);x H)a[i]*=K[i]/(exp(-a[i])+1);j(V,a,D,L,d[$=H/$,2]+k);}w=j($=W,r,V,k,n);x
V)w=k[i]>w?k[$=i]:w;}}
Тука има и малко по нов модел пак от същия автор:
https://github.com/adriancable/qwen3.c
Е, не може да се мери по бързина с инференсе на CUDA ама пък за 1000 реда чисто Ц си е екстра.
И не, че нещо ама е направил и х86 симулатор на по малко от 140к реда код
Виждам, че продължаваш да се излагаш. Cycle-accurate ли е симулатора? 8086 модерен процесор ли е?
Така и не разбрах колко реда код е gem5, дето не е писан от ИИ. :)
Моят pet peeve с езиците за програмиране е че НИКОЙ не експоузва онион менталния модел който хюманите ползваме - изчистено ядро и после ЯСНИ слоеве, сичко е някъв безумен мазаляк от 'абстракции' въпреки че повечето претендират, всъщност в крайна сметка засега чистото Ц мирише най-яко на лук, гаден, смачкан, но сепак лук, не 'абстракции' :)
Пак започнах да тъка на три стана, три различни идеи в различни прозорци. Ще е забавно като трябва да се мърджват бранчовете.
Както може би трябваше да се сетя отдавна, симулирането на една cycle-approximate машина с 512 ядра бързо еволюира до симулирането на 16 машини с по 32 ядра, вързани с ROCE карти. :)
То така ще стане ефтинко че Рабиняка да го търкаля бе :)
Не знам, не знам. В сорса на симулатора се споменава 70 пъти volatile...
Ще попречиш така на картите да комутират неравномерни комбинации нули/единици, аз така знам от майстора на звЪнците :)
Добавянето на SVE ми разказа играта. Кода е вече 200 хиляди реда, от тях 50 хиляди са тестовете.
610 нови инструкции. RISC, huh?
Клод трябваше да си пише интерпретатор за да може да върти примерния код какво правят инструкциите описани в спецификацията.
Ако някой случайно не е гледал разказа как AI са хакнали HuggingFace, препоръчвам да го гледат.
0 1 2 3 4 ...10 11 12 13 14 ...21 22 23 24 25