static void Main(string[] args) { Random random = new Random(); Stopwatch watch = Stopwatch.StartNew(); GPUOperator <DoubleWrapper> gpu = new GPUOperator <DoubleWrapper>(); Console.WriteLine($"GPU init: {watch.ElapsedMilliseconds}ms"); watch.Restart(); SingleThreadedOperator <DoubleWrapper> cpu = new SingleThreadedOperator <DoubleWrapper>(); Console.WriteLine($"CPU init: {watch.ElapsedMilliseconds}ms"); watch.Restart(); MultiThreadedOperator <DoubleWrapper> cpumult = new MultiThreadedOperator <DoubleWrapper>(); Console.WriteLine($"Parallel init: {watch.ElapsedMilliseconds}ms"); watch.Restart(); BufferedFastMatrix <DoubleWrapper> one = new BufferedFastMatrix <DoubleWrapper>(64, 64); BufferedFastMatrix <DoubleWrapper> two = new BufferedFastMatrix <DoubleWrapper>(64, 64); Console.WriteLine($"Two 100x100 allocations: {watch.ElapsedMilliseconds}ms"); watch.Restart(); one.CopyToGPU(); two.CopyToGPU(); Console.WriteLine($"Copy: {watch.ElapsedMilliseconds}ms"); watch.Restart(); Utilities.FillMatrix(one, 10); Utilities.FillMatrix(two, 20); Console.WriteLine($"Filling matrices: {watch.ElapsedMilliseconds}ms"); watch.Restart(); var bruh = gpu.AddShared(one, two); Console.WriteLine($"GPU Add: {watch.ElapsedMilliseconds}ms"); watch.Restart(); gpu.Multiply(one, two); Console.WriteLine($"GPU Mult: {watch.ElapsedMilliseconds}ms"); watch.Restart(); cpu.Add(one, two); Console.WriteLine($"CPU Add: {watch.ElapsedMilliseconds}ms"); watch.Restart(); cpu.Multiply(one, two); Console.WriteLine($"CPU Mult: {watch.ElapsedMilliseconds}ms"); watch.Restart(); cpumult.Add(one, two); Console.WriteLine($"Parallel Add: {watch.ElapsedMilliseconds}ms"); watch.Restart(); cpumult.Multiply(one, two); Console.WriteLine($"Parallel Mult: {watch.ElapsedMilliseconds}ms"); watch.Restart(); }
static void Add() { //process is same for parallel SingleThreadedOperator <IntWrapper> op = new SingleThreadedOperator <IntWrapper>(); //two 5*3 matrices FastMatrix <IntWrapper> one = new FastMatrix <IntWrapper>(5, 3); FastMatrix <IntWrapper> two = new FastMatrix <IntWrapper>(5, 3); Utilities.FillMatrix(one, 5); Utilities.FillMatrix(two, 10); FastMatrix <IntWrapper> result = op.Add(one, two); Console.WriteLine(result); }
static void Multiply() { //process is same for parallel SingleThreadedOperator op = new SingleThreadedOperator(); //two 5*3 matrices FastMatrix one = new FastMatrix(5, 3); FastMatrix two = new FastMatrix(3, 5); Utilities.FillMatrix(one, 5); Utilities.FillMatrix(two, 10); FastMatrix result = op.Multiply(one, two); result.Print(); }
static void Transpose() { //process is same for parallel SingleThreadedOperator op = new SingleThreadedOperator(); //5*3 matrix FastMatrix one = new FastMatrix(5, 3); Utilities.FillMatrix(one, 5); //10 will start at the bottom left and go to the top right one[0, one.GetSize(0) - 1] = 10; FastMatrix result = op.Transpose(one); result.Print(); }
static void Transpose() { //process is same for parallel SingleThreadedOperator <IntWrapper> op = new SingleThreadedOperator <IntWrapper>(); //5*3 matrix FastMatrix <IntWrapper> one = new FastMatrix <IntWrapper>(5, 3); Utilities.FillMatrix(one, 5); //10 will start at the bottom left and go to the top right one[0, one.Rows - 1] = 10; FastMatrix <IntWrapper> result = op.Transpose(one); Console.WriteLine(result); }