public UBigIntHandle Multiply(MultiplicationMethod method, UBigIntHandle u, UBigIntHandle v) { IntPtr w; HandleResultCode((PMC_STATUS_CODE)PMCCS_Multiply_I_UX_UX((Int32)method, u.NativeHandle, v.NativeHandle, out w)); return(new UBigIntHandle(w)); }
static void Analize() { // Test multiplication with sizes from 100 to 1000 with step 100 Array methods = Enum.GetValues(typeof(MultiplicationMethod)); //for (int i = methods.Length - 1; i >= 0; i--) for (int i = 0; i < methods.Length; i++) { MultiplicationMethod method = (MultiplicationMethod)methods.GetValue(i); Console.WriteLine("\nMethod: " + method); MatrixMultiplier multiplier = MatrixMultiplier.GetMatrixMultiplier(method); //MatrixMultiplier multiplier = new WinogradMultiplier(); for (int size = 100; size <= 400; size += 100) { Matrix left = new Matrix(size, size); Matrix right = new Matrix(size, size); Matrix.GenerateRandom(left, 0, size); Matrix.GenerateRandom(right, 0, size); long ticksAvg = TestNTimes(multiplier, left, right, 1); Console.WriteLine("Size: " + size + ". Ticks: " + ticksAvg); } } }
public static MatrixMultiplier GetMatrixMultiplier(MultiplicationMethod method) { MatrixMultiplier multiplier = null; switch (method) { case MultiplicationMethod.Simple: multiplier = new SimpleMultiplier(); break; case MultiplicationMethod.Winograd: multiplier = new WinogradMultiplier(); break; } return(multiplier); }
public UBigInt Multiply(MultiplicationMethod method, UBigInt v) { return(new UBigInt(EngineObject.Multiply(method, Handle, v.Handle))); }