What We Need Is More Heterogeneity

Current processors offer some variety in the types of computational engines. They consist of multiple identical general purpose cores, embedded multi-core graphics cores (GPUs), and accelerators for video and audio compression. Recently, Intel has integrated Field Programmable Gate Array (FPGA) into the server-class processors, for even more customizable computational flexibility. Modern CPU’s (Intel, AMD, ARM, […]

Read more "What We Need Is More Heterogeneity"

Faster Merge in C# and C++

Merging of two pre-sorted arrays into a single array is a core part of the merge sort algorithm. In this blog I’ll discuss a couple of high performance implementations for a serial merge, and a way to reduce the number of comparisons. static public void Merge(int[] a, Int32 aStart, Int32 aEnd, int[] b, Int32 bStart, […]

Read more "Faster Merge in C# and C++"

Faster Sorting in C#

Update: A follow on blog Even Faster Sorting in C# is taking shape. C# has several built-in algorithms for sorting arrays, lists and other containers. Array.Sort and List.Sort have many variations for sorting full or partial containers, using an algorithm that runs on a single CPU core. Array.Sort and List.Sort uses a hybrid sorting algorithm […]

Read more "Faster Sorting in C#"

High Performance C#

C# is a wonderfully powerful object oriented language with support for many modern constructs, supporting variety of abstractions, managed environment, numerous libraries, with one of the most enjoyable and productive development environments. At each level of abstraction, as one of my friends reminded me, we can loose performance, such as when going from assembly language […]

Read more "High Performance C#"

High Performance Parallel C#

C# provides a powerful set of algorithms for standard containers, such as array and List, when you add “using System.Linq;” statement to your code. Arrays and List containers gain such functionality as Sort, Equal, Sum, Union, Where, Min, Max, First, Last, and so on. For instance, these make it simple to find the minimum element […]

Read more "High Performance Parallel C#"

Parallel Algorithms in C#

C# is a wonderful programming language, evolving quickly. Microsoft has pushed C# into parallel programming by adding the Task Parallel Library, simplifying development of efficient parallel algorithms.  In this blog I’ll describe the parallel library that I’ve developed, with some excellent preliminary results. Preliminary Performance Results Parallel Sorting is running more than 2X faster than […]

Read more "Parallel Algorithms in C#"

Indianapolis Video Heritage

With the possibility of Amazon choosing Indianapolis for its second headquarters, many have written about the benefits of Indy’s tech scene. I ran across a wonderful article a few days ago in the Indianapolis Monthly which inspired this blog. This article talked about variety of Indianapolis legacies that have shaped and are shaping the city’s […]

Read more "Indianapolis Video Heritage"

Memory Hierarchy Bandwidth

This is a reprint of my Dr. Dobb’s article from May of 2004. Yet, it is still relevant today, with memory bandwidth within the memory hierarchy being critical to reaching full performance potential. Optimization often demands diving into system memory and processor cache. Intel architecture CPUs are made of several parts working together to execute […]

Read more "Memory Hierarchy Bandwidth"