latest posts

In working on my Silicon Graphics Indy (as detailed in these posts: R5000 upgrade and the initial post), I realized I hadn't built a jcBENCH MIPS3/Irix release before and hadn't released a revamped MIPS4/Irix build on the cross-platform code I worked on a few weeks ago.

Without further adieu:

MIPS3 Release:

MIPS4 Release:

More to come in the coming days in regards to jcBENCH.
After a few days of development, jcBENCH2 is moving along nicely. Features completed:

1. WebAPI and SQL Server Backend for CRUD Operations of Results
2. Base UI for the Windows Store App is completed
3. New Time Based CPU Benchmark inside a PCL
4. Bing Maps Integration for viewing the top 20 results

Screenshot of the app as of tonight:
jcBENCH2 Day 4

What's left?

7/17/2013 - Social Networking to share results
7/18/2013 - Integrate into the other #dev777 projects
7/19/2013 - Bug fixes, polish and publish

More details of the development process after the development is complete - I would rather focus on the actual development of the app currently.
Starting a new, old project this weekend as part of the #dev777 project, jcBENCH 2. The idea being, 7 developers, develop 7 apps and have them all communicate with each other on various platforms.

Those that have been following my blog for a while, might know I have a little program I originally wrote January 2012 as part of my trip down the Task Parallel Library in C# called, jcBENCH. Originally I created Mac OS X, IRIX (in C++), Win32 and Windows Phone 7 ports. This year I created a Windows Phone 8 app and a revamped WPF port utilizing a completely new backend.

So why revisit the project? The biggest reason: never being 100% satisfied because of my skill set constantly being expanded I find myself always wanting to go back and make use of a new technology even if the end user sees no benefit. It's the principle - never let your code rot.

So what is Version 2 going to entail? Or better put, what are some of the issues in the jcBENCH 1.x codebase?

Issues in the 1.x Codebase

Issue 1

As it stands today all of the ports have different code bases. In IRIX's case this was a necessity since Mono hasn't been ported to IRIX (yet). With the advent of PCL (Portable Class Libraries) I can now keep one code base for all but the IRIX port, leaving only the UI and other platform specific APIs in the respective ports.

Issue 2

On quad core machines or faster the existing benchmark completes in a fraction of the time. This poses two big problems - doesn't represent a real test of performance over a few second span (meaning all of the CPUs may not have enough time to be tasked before completion) and on the flip side those devices that are much slower (like a cell-phone) it could take several minutes. Solution? Implement a 16 second time benchmark and then calculate the performance based on how many objects were processed during tha time.

Issue 3

When testing multi-processor performance, it was cumbersome to test all of the various scenarios. For instance if you had an 8 core CPU as I do with my AMD FX-8350, I had to select 1 CPU, run the benchmark and then record the result, select 2 CPUs and repeat so on and so forth. This took a long time when in reality it would make sense to offer the ability to either run the benchmark on using all cores by default and then via an advanced option allow the end user to select a specific test or have it do the entire test automatically.

Issue 4

No easy way to share the results exists across the board in the current version. In recent versions I added a centralized result database and charting so no matter the device you could see how your device compared, but there was no easy to get a screenshot of the benchmark, send the results via email or post on a social network. Where is the fun in a benchmark if you can't brag about it easily? In Version 2 I plan to focus on this aspect.

Proposed Features for Version 2

1. Rewritten from the ground up utilizing the latest approaches to cross-platform development I have learned since jcBENCH's original release 1/2012. This includes the extensive use of MVVMCross and Portable Class Libraries to cut down on the code duplication among ports.

2. Sharing functionality via Email and Social Networking (Twitter and Facebook) will be provided, in addition a new Bing Map will visually reflect the top performing devices across the globe (if the result is submitted with location access allowed)

3. Using WebAPI (JSON) instead of WCF XML backend for result submission and retrieval. For this app since there is no backend processing between servers, WebAPI makes a lot more sense.

4. New Timed Based Benchmark as opposed to time to process X amount of tasks

5. Offer an "advanced" mode to allow the entire test suite to be performed or individual tests (by default it will now use all of the cores available)

6. At launch only a Windows Store app will be available, but Windows Phone 7/8 and Mac OS X ports will be released later this month.

Future Features

Ability to benchmark GPUs is something I have been attempting to get working across platforms and for those that remember I had a special Alpha release last Fall using OpenCL. Once the bugs and features for Version 2 are completed I will shift focus to making this feature a reality.

Implement all of this functionality in a upgraded IRIX port and finally create a Linux port (using Mono). One of the biggest hurdles I was having with keeping the IRIX version up to date was the SOAP C++ Libraries not being anywhere near the ease of user a Visual Studio/C# environment offers. By switching over to HTTP/JSON I'm hoping to be able to parse and submit data much easier.

Next Steps

Given that the project is an app in 7 days, today marks the first day of development. As with any project, the first step was getting a basic feature set as mentioned above and now to create a project timeline based on that functional specification.

As with my WordPress to MVC Project in April, this will entail daily blog posts with my progress.

Day 1 (7/13/2013) - Create the new SQL Server Database Schema and WebAPI Backend
Day 2 (7/14/2013) - Create all of the base UI Elements of the Windows Store App
Day 3 (7/15/2013) - Create the PCL that contains the new Benchmark Algorithms
Day 4 (7/16/2013) - Integrate Bing Maps for the location based view
Day 5 (7/17/2013) - Add Social Networking and Email Sharing Options
Day 6 (7/18/2013) - Integrate with fellow #dev777 projects
Day 7 (7/19/2013) - Bug fixing, polish and Windows Store Submission

So stay tuned for an update later today with my the successes and implementation of the new SQL Server Database Schema and WebAPI Backend
It's been a very long time since I released something, so without further adieu, I present jcBENCH. It's a floating point CPU benchmark. Down the road I hope to add further tests, this was just something I wrote on the airplane coming back from San Francisco. You'll need to have .NET 4 installed, if you don't have it, click here. Or you can get it from Windows Update. Click here to download the latest version. I'll make an installer in a few days, just unzip it somewhere on your machine and run. Upon running it, the results get automatically uploaded to my server, a results page will be created shortly.