Advertisement
bogdb

Untitled

Nov 7th, 2018
299
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.16 KB | None | 0 0
  1. public static class BatchOperationsVector {
  2.     public const int BATCHSIZE = 64;
  3.     private static readonly int STRIDE = Vector<double>.Count;
  4.  
  5.     public static void Load(double[] a, double[] b) {
  6.       Array.Copy(b, a, BATCHSIZE);
  7.     }
  8.  
  9.     public static void Add(double[] a, double[] b) {
  10.       for (int i = 0; i < BATCHSIZE; i += STRIDE) {
  11.         var va = new Vector<double>(a, i);
  12.         var vb = new Vector<double>(b, i);
  13.         (va + vb).CopyTo(a, i);
  14.       }
  15.     }
  16.  
  17.     public static void Sub(double[] a, double[] b) {
  18.       for (int i = 0; i < BATCHSIZE; i += STRIDE) {
  19.         var va = new Vector<double>(a, i);
  20.         var vb = new Vector<double>(b, i);
  21.         (va - vb).CopyTo(a, i);
  22.       }
  23.     }
  24.  
  25.     public static void Div(double[] a, double[] b) {
  26.       for (int i = 0; i < BATCHSIZE; i += STRIDE) {
  27.         var va = new Vector<double>(a, i);
  28.         var vb = new Vector<double>(b, i);
  29.         (va / vb).CopyTo(a, i);
  30.       }
  31.     }
  32.  
  33.     public static void Mul(double[] a, double[] b) {
  34.       for (int i = 0; i < BATCHSIZE; i += STRIDE) {
  35.         var va = new Vector<double>(a, i);
  36.         var vb = new Vector<double>(b, i);
  37.         (va * vb).CopyTo(a, i);
  38.       }
  39.     }
  40.  
  41.     public static void Neg(double[] a, double[] b) {
  42.       for (int i = 0; i < BATCHSIZE; i += STRIDE) {
  43.         var vb = new Vector<double>(b, i);
  44.         Vector.Negate(vb).CopyTo(a, i);
  45.       }
  46.     }
  47.  
  48.     public static void Inv(double[] a, double[] b) {
  49.       for (int i = 0; i < BATCHSIZE; i += STRIDE) {
  50.         var vb = new Vector<double>(b, i);
  51.         (Vector<double>.One / vb).CopyTo(a, i);
  52.       }
  53.     }
  54.  
  55.     public static void Log(double[] a, double[] b) {
  56.       for (int i = 0; i < BATCHSIZE; ++i)
  57.         a[i] = Math.Log(b[i]);
  58.     }
  59.  
  60.     public static void Exp(double[] a, double[] b) {
  61.       for (int i = 0; i < BATCHSIZE; ++i)
  62.         a[i] = Math.Exp(b[i]);
  63.     }
  64.  
  65.     public static void Sin(double[] a, double[] b) {
  66.       for (int i = 0; i < BATCHSIZE; ++i)
  67.         a[i] = Math.Sin(b[i]);
  68.     }
  69.  
  70.     public static void Cos(double[] a, double[] b) {
  71.       for (int i = 0; i < BATCHSIZE; ++i)
  72.         a[i] = Math.Cos(b[i]);
  73.     }
  74.   }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement