public unsafe void SGEMM(float *Ap, int AN, int AM, float *Bp, int BN, int BM, float *Cp, int CN, int CM, int bs, bool transposeA = false, bool transposeB = false) { if (transposeA) { var tmp = AN; AN = AM; AM = tmp; } if (transposeB) { var tmp = BN; BN = BM; BM = tmp; } UnsafeMatrixBlockMultiplyUnrolled8xhJob job = new UnsafeMatrixBlockMultiplyUnrolled8xhJob(); job.A = Ap; job.AN = AN; job.AM = AM; job.B = Bp; job.BN = BN; job.BM = BM; job.C = Cp; job.CN = CN; job.CM = CM; job.bs = bs; job.transposeA = transposeA; job.transposeB = transposeB; //D.Log($"Matrix mul {AN},{AM} x {BN},{BM}"); JobHandle fence; if (AN < BM) { job.scheduleRowA = false; fence = job.Schedule((BM / bs) + (BM % bs > 0 ? 1 : 0), 1); } else { job.scheduleRowA = true; fence = job.Schedule((AN / bs) + (AN % bs > 0 ? 1 : 0), 1); } fence.Complete(); }
public bool IsCurrentPlatformSupported() { try { // Sanity test if all the dependencies of the job are met at runtime // Also prevent compiler from optimising this out var test = new UnsafeMatrixBlockMultiplyUnrolled8xhJob(); D.Log($"Loaded: {test}"); } catch (Exception e) { D.Log($"C# Job system not found. Disabling {this.GetType()}. Error: {e}"); return(false); } return(true); }