Wednesday, September 30, 2015

Intel i7-6700k vs AMD FX-8350

Never thought the day would come - but I have switched back to Intel for my primary desktop. My now almost three year old AMD FX-8350 and 990FX motherboard has been slowing dying on me for the last couple months. First a year ago the motherboard "lost" its ability to support 4x8gb DDR3 sticks providing me a much needed 32gb of ram. Then a few months later, I had to underclock the remaining 2 sticks of DDR to 1066mhz otherwise I would get BSODs throughout the day. Now for the last 3-4 months I have had to run a large house fan directly into my Corsair Carbide 540 - which has made VOIP meetings interesting when I have had to present. Long and short I was set to buy a brand new AMD FX-9590 and the newly released MSI 970 board that had USB 3.1 support, but it got me thinking - why am I paying for what is largely three year old technology? Knowing that when Zen is released next year I would be swapping whatever I chose to upgrade to, I decided I might as well go back to Intel for the next year while I wait for Zen to arrive.

Fortunately, Skylake has just arrived along with a slew of new motherboards. Seeing the prices of the Intel boards being considerably higher priced than AMD (even 990FX boards), I went middle of the ground with the Asus ROG Maximus VIII Hero which uses the Z170 chipset. For CPU, I was pleasantly surprised to find the newly released top end CPU from Intel, the 6700K was in my "AMD Pricepoint".

Three new features that I was excited to finally get was DDR4 support, USB 3.1 and having an M.2 slot for a future Samsung M.2 based SSD.

In addition, I was extremely curious how my FX-8350 and the i7 would compare. I know the i7 being built on a 14nm process versus the 32nm FX-8350, the i7 would produce less heat and use less power. My particular i7 uses 95W versus my FX-8350 which uses 125W, a reduction of 24%. Funny enough both are clocked at 4ghz and then there is still the i7 "Quad Core with Hyper-threading" versus the 4 module "8 core" of the FX-8350 (8 Integer Units and 4 Floating Point Units).


In addition to the i7 6700k "Skylake" processor and Asus ROG Maximus VIII Hero, I purchased a Corsair H100i GTX Extreme Performance Water cooler and 16gb of Corsair DDR4 3000. For the remainder of the system I am going to reuse my relatively new MSI Radeon R9 280X, hard drives, Corsair Carbide 540 and Corsair 750W power supply.


After having used Corsair closed loop coolers, it was pretty painless install in my Corsair Carbide 540. I mounted it in the front, which I am considering moving to the top and having air blow out the front (something to play with down the road). After installing the motherboard I was very surprised the overall layout has not changed much from the now 3 year old Asus Sabertooth 990FX motherboard I was using previously.


My first goto benchmark for comparing the two cpus was 3D Mark. Running with the same video card, I was hoping for a huge boost in CPU, fortunately I was correct.

Cloud Gate saw a 31% increase, Fire Strike 8%, Sky Diver 17% and Ice Storm 32%. For a CPU clocked at the same speed (4ghz) and half the cores (see above) to get between 8 and 32 percent increase was quite huge.

Next up was my other goto jcBENCH.

My earlier hunch about the integer cores looks to have been correct. With Hyper-Threading, I still only have 4 Integer Units while my old FX-8350 had 8. Interestingly enough - my FX-8350 actually did slightly better in Integer processing when using 8 threads. Floating Point was a completely different story - over double the performance in 8 threads - the IPC differences really show their colors there.

Closing Thoughts

Was it the large leap in performance I was expecting? Yes and no - in floating point operations (i.e. gaming/compute/etc), I can definitely see how things would perform much faster when all the cores are used. However in integer based tasks, I am not sure I will really see the advantage. In the coming weeks I will do some more comparisons and dive into some overclocking with the new machine. Still crossing my fingers for AMD to come through with Zen next year...

Sunday, September 13, 2015

jcEHL and JCON

For some time now going back several years I have been attempting to figure out a way to make data smaller without degradation. On the flight back from a Labor Day Weekend trip to Silicon Valley I started writing out some ideas for compression. What I came to realize is that to be efficient, for each popular file type the compression should adjust to the data inside. For example, XML, there is a lot of duplication of data by design. For each element in an XML Document you essientially have the same text again to close the element. A dictionary compression would reduce file size immensely, conversely a JSON file of the same data wouldnt benefit as much.

An hour or so later I started picking apart JSON, thinking about making a transport that would be even more efficient. My solution: JCON.

While not for everyone, the solution I came up with does away with the property names entirely and braces - reducing the size even more so than JSON.

For instance take the following class:
public class Person {
  public string FirstName { get; set; }

  public string LastName { get; set; }
Assume you initialize the class like so:
var person = new Person { FirstName = "John", LastName = "Doe" };
With that class and then serialized you get the following size in bytes:

XML: 218
JSON: 37
JCON: 12

JCON ends up being almost 20 times smaller than XML and 3 times smaller than JSON. Wanting to make sure when dealing with collections of objects JCON continued to be efficient, assuming 100 Person objects (in bytes):

XML: 8973
JSON: 3801
JCON: 1000

Not as huge of an impact, but still almost 9 times smaller than XML and almost 4 times smaller than JSON.

Knowing data duplication can exist in the data itself outside of the data transport definition so I will be working on adding in a compression flag so no other libraries are needed on either client or server side. For example, if there are 2 or more people with the same last name or first name, then you would save a couple bytes.

As with any of my projects, this project is completely open source on my GitHub profile.