LSD Radix Sort algorithm has been around for a long time with first computer usage in 1950’s and 1960’s to sort punch cards by performing several passes at the stack of cards. It has resurfaced in the last decade with GPUs having hundreds and even thousands of processor with internal local truly random access memories […]Read more "Faster LSD Radix Sort"
Computer Scientists develop algorithms for all kinds of tasks, such as sorting numbers, searching the web for information, showing web pages and interacting with them, and so on – thousands of different algorithms. Even a task such as sorting a bunch of numbers, has more than 20 different algorithms. When you need to choose one […]Read more "Big-O by a Concrete Example"
Parallel algorithms are here! Parallel algorithms are now standard, accessible in VisualStudio 2017 (version 15.8). According to a wonderful Microsoft blog C++17 parallel algorithms are no longer experimental. Algorithms such as sort, for_each, reduce, equal, count, and many more. This give us a standard and portable way to use all of the cores in a multi-core processor. […]Read more "Standard Parallel Algorithms Have Arrived"
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"
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++"
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. The Linq library can also sort containers, using a single CPU core or multiple cores in parallel. These are powerful, flexible, […]Read more "Faster Sorting in 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#"
.NET developers rely on many NuGet packages to extend functionality of the software they create. These NuGet packages can come from variety of NuGet repositories on the web, or corporate intranets. They can also come from the local hard drive on your computer. I’ll show you how to set this up in this blog. Most […]Read more "Source NuGet Packages From Your Local Drive"
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#"
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#"