84242

Benchmarking RAM performance - UWP and C#

I'm developing a benchmarking application using Universal Windows Platform that evaluates CPU and RAM performance of a Windows 10 system.

Although I found different algorithms to benchmark a CPU, I still didn't found any solid algorithm or solution to evaluate the write and read speeds of memory.

How can I achieve this in C#?

Thanks in advance :)

Answer1:

I don't see why this would not be possible from managed code. Array access code turns into normal x86 memory instructions. It's a thin abstraction. In particular I don't see why you would need a customized OS.

You should be able to test sequential memory speed by performing memcpy on big arrays. They must be bigger than the last level cache size.

You can test random access by randomly indexing into a big array. The index calculation must be cheap, unpredictable and there must be a dependency chain that serializes the memory instructions so that the CPU cannot parallelize them.

Honestly I don't think its possible. RAM benchmarks usually run off of dedicated OS's

RAM testing is different from RAM benchmarking.

C# doesn't give you that kind of control over RAM

Of course, just new up a big array and access it. Also, understand the overheads that are present. The only overhead is a range check.

The GC has no impact during the benchmark. It might be triggered by an allocation.

Recommend

  • 'System.ComponentModel.INotifyPropertyChanging' in two places with MVVMLight Portable libr
  • Kinect API written solely in Java without native functions?
  • How can I determine if process is 32 or 64Bit from a handle?
  • No rows to manipulate in html table created with jQuery csvToTable?
  • How to remove left and right margins from all wrapped rows in flexbox (without nth-child or js)
  • undefined reference to `SOIL_load_OGL_texture'?
  • How to create a custom Powershell operator?
  • Get current user from inside the model in Sails
  • Lua: Line breaks in strings
  • Wrapping a c#/WPF GUI around c++/cli around native c++
  • EntLib Way to Bind “Null” Value to Parameter
  • Available space left on drive - WinAPI - Windows CE
  • Where these are stored?
  • Memory error in python- how to use more memory
  • Django model inheritance, filtering models
  • Spark job failing in YARN mode
  • Is it possible to open regedit and navigate to straight to a specific key using process.start?
  • How to handle images sent by a mobile device?
  • x64 applications using gdi+: what are the consequences on performance?
  • Recording logins for password protected directories
  • PHPUnit_Framework_TestCase class is not available. Fix… - Makegood , Eclipse
  • Pass value from viewmodel to script in zk
  • DotNetZip - Calculate final zip size before calling Save(stream)
  • Date difference with leap year
  • Is possible to count alias result on mysql
  • Knitr HTML Loop - Some HTML output, some R output
  • Updated Ionic CLI but shows previous version (Windows)
  • Weird JavaScript statement, what does it mean?
  • Rearranging Cells in UITableView Bug & Saving Changes
  • Apache 2.4 - remove | delete | uninstall
  • R: gsub and capture
  • Windows forms listbox.selecteditem displaying “System.Data.DataRowView” instead of actual value
  • Unit Testing MVC Web Application in Visual Studio and Problem with QTAgent
  • Acquiring multiple attributes from .xml file in c#
  • Angular 2 constructor injection vs direct access
  • How to CLICK on IE download dialog box i.e.(Open, Save, Save As…)
  • IndexOutOfRangeException on multidimensional array despite using GetLength check
  • How can I remove ASP.NET Designer.cs files?
  • java string with new operator and a literal
  • Net Present Value in Excel for Grouped Recurring CF