#include "../backend_cuda.h" #include #include #include #include #include static double run(ColiCudaTensor *g,ColiCudaTensor *u,ColiCudaTensor *d, const float *x,float *y,int rows,int iterations,int mode){ ColiCudaTensor *gs[1]={g},*us[1]={u},*ds[1]={d}; int rs[1]={rows}; if(mode==2){setenv("COLI_CUDA_TC_INT4","1",1);setenv("COLI_CUDA_TC_MIN_ROWS","1",1);} else unsetenv("COLI_CUDA_TC_INT4"); setenv("COLI_CUDA_W4_PACKED",mode==0?"0":"1",1); if(!coli_cuda_expert_group(gs,us,ds,rs,1,y,x))std::exit(2); auto begin=std::chrono::steady_clock::now(); for(int i=0;i(end-begin).count()/iterations; } int main(){ constexpr int D=6144,I=2048,O=8; int device=0;if(!coli_cuda_init(&device,1))return 77; std::vector hidden((size_t)I*D/2),down((size_t)D*I/2); std::vector hs(I),ds(D),x((size_t)O*D),a((size_t)O*D),b((size_t)O*D),c((size_t)O*D); for(size_t i=0;i