public static void Test_2(int Count, GPU myGPU) { Console.WriteLine("Initializing data..."); myGPU.InitializeData(Count); var tests = 100000; myGPU.PrepareExecution(); var random = new Random(123456); ValueIdItem[] randoms = new ValueIdItem[tests]; for (int i = 0; i < tests; i++) { long z = random.Next(Count - 1); try { randoms[i] = myGPU[z]; } catch (Exception ex) { Console.WriteLine(ex.Message); } } var startTime = DateTime.Now; for (int i = 0; i < tests; i++) { var result = myGPU.FindFirst(myGPU[i].Value); } var endTime = DateTime.Now; Console.WriteLine("GPU test done:"); Console.WriteLine(tests / ((endTime - startTime).TotalSeconds) + " matchins per second !"); Dictionary <long, long> DiRecs = new Dictionary <long, long>(); try { for (int i = 0; i < Count; i++) { DiRecs.Add(i, myGPU[i].Value); } } catch (Exception ex) { Console.WriteLine(ex.Message); } startTime = DateTime.Now; for (int i = 0; i < tests; i++) { var result = DiRecs[randoms[i].Id]; } endTime = DateTime.Now; Console.WriteLine("CPU test done:"); Console.WriteLine((tests / ((endTime - startTime).TotalMilliseconds + 0.0001)) * 1000 + " matchins per second !"); }
public static void Test_0(int Count, GPU myGPU) { Console.WriteLine("Initializing data..."); myGPU.InitializeData(Count); myGPU.PrepareExecution(); Console.WriteLine("Running kernel..."); for (int i = 0; i < 8; i++) { myGPU.MultiplyAsync(2); } Console.WriteLine("Copying data back..."); myGPU.CopyToHost(); // note: usually you try to minimize how much you need to // fetch from the device, as that can be a bottleneck; you should prefer fetching // minimal aggregate data (counts, etc), or the required pages of data; fetching // *all* the data works, but should be avoided when possible. Console.WriteLine("Waiting for completion..."); myGPU.Synchronize(); var tests = 100000; var random = new Random(123456); ValueIdItem[] randoms = new ValueIdItem[tests]; Dictionary <long, long> DiRecs = new Dictionary <long, long>(); try { for (int i = 0; i < Count; i++) { DiRecs.Add(i, myGPU[i].Value); } } catch (Exception ex) { Console.WriteLine(ex.Message); } for (int i = 0; i < tests; i++) { long z = random.Next(Count - 1); try { randoms[i] = myGPU[z]; } catch (Exception ex) { Console.WriteLine(ex.Message); } } Console.WriteLine("all done; testing to find " + tests + " items"); var startTime = DateTime.Now; for (int i = 0; i < tests; i++) { //Console.WriteLine($"{i}: {nameof(record.Id)}={record.Id}, {nameof(record.Value)}={record.Value}"); var result = myGPU.FindFirst(myGPU[i].Value); //if (result < 0) //{ // Console.WriteLine("Not found"); //} //else //{ Console.WriteLine("Found at " + result); //} } var endTime = DateTime.Now; Console.WriteLine("GPU test done:"); Console.WriteLine(tests / ((endTime - startTime).TotalSeconds) + " matchins per second !"); startTime = DateTime.Now; for (int i = 0; i < tests; i++) { var result = DiRecs[randoms[i].Id]; } endTime = DateTime.Now; Console.WriteLine("CPU test done:"); Console.WriteLine(tests / ((endTime - startTime).TotalSeconds) + " matchins per second !"); }