Saturday, July 15, 2017

Qt

Qt (pronounced cute) is a free and open-source widget toolkit for creating graphical user interfaces as well as cross-platform applications that run on various software and hardware platforms such as Linux, Windows, macOS, Android or embedded systems with little or no change in the underlying code base.

~ Wiki

Sunday, June 4, 2017

Machine Learning

Machine Learning extends (IS-A type of) Artificial Intelligence (AI) by incorporating algorithms - are often categorized as supervised and unsupervised - into computers with an ability to learn without being explicitly programmed when exposed to the new data. 

Tuesday, May 9, 2017

Saturday, April 22, 2017

OpenCV

Open Source Computer Vision is a library of functions, designed for computational efficiency with a strong focus on real-time computer vision applications. Having written in optimized C/C++, the library can take advantage of multi-core processing. Enabled with OpenCL, so it can take advantage of the hardware acceleration of the underlying heterogeneous compute platform.

It has C, C++, Python, Java and MATLAB interfaces and supports Windows, Linux, Android and Mac OS.

Deployed uses span the range from stitching street view images together, detecting intrusions in surveillance video, monitoring mine equipment, helping robots navigate and pick up objects, detection of swimming pool drowning accidents, checking runways for debris and inspecting labels on products in factories on to rapid face detection.
~ Wiki

Saturday, March 18, 2017

Intel IPP

Intel® Integrated Performance Primitives is a multi-core, multi-OS and multi-platform ready, computationally intensive and highly optimized software library that meets all your Imaging, Vision, Signal, Storage and Security needs.
~ Wiki

Tuesday, February 7, 2017

OpenCL

Open Computing Language is the open standard for cross-platform, parallel programming diverse processors found in personal computers, servers, mobile devices and embedded platforms. It greatly improves the speed and responsiveness of a wide spectrum of applications including gaming, scientific, medical software, professional creative tools and vision processing etc...

To put it in a nutshell, the open standard for parallel programming of heterogeneous systems.
~ Wiki

Sunday, January 1, 2017

CUDA vs OpenGL

CUDA is a parallel computing platform API, which extended the usage of GPU (which was otherwise used only for graphics processing) for general purpose processing. But the scope is limited to CUDA-enabled GPUs manufactured by NVIDIA only and does not work on different GPUs by other manufacturers. CUDA platform is designed to work with C, C++ and Fortran programming languages hence easier to code straight to GPU. Compatible with most standard operating systems.
e.g. Identify hidden plaque in arteries, Analyze air traffic flow and Visualize molecules etc...

OpenGL is a graphics library, which provides set of API that makes use of GPU (hardware-accelerated) to render graphics faster - focus is specific to rendering on GPUs. Supported on essentially every GPU. Required advanced skills in graphics programming. It is language and platform independent.
e.g. CAD, Virtual reality, Flight simulation and Video games etc...

Friday, December 9, 2016

CUDA

Compute Unified Device Architecture is a parallel computing platform and API to use a CUDA-enabled GPU for general purpose processing (GPGPU), which leads to dramatic increase in computing performance by harnessing the power of the GPU. 

The CUDA platform gives direct access to the GPU's virtual instruction set and parallel computational elements to execute compute kernels. Supports OpenCL programming framework.
~ Wiki

Friday, November 4, 2016

OpenGL

Open Graphics Library (OpenGL) is a low level abstract API to interact with graphics processing unit (GPU) to draw 2D and 3D graphics and is a cross-language, cross-platform API typically used to achieve hardware-accelerated rendering, which is faster over software rendering.

OpenGL deals with only rendering and provides, no APIs related to input, audio or windowing. 
~ Wiki

Wednesday, October 12, 2016

Synchronization Primitives

Critical section, Mutex, Event, Semaphore and Waitable timers are the different available synchronization objects on windows.

Critical Section

Synchronizes threads (/allows one at a time) to have an access to a shared resource with in a process that it is created in and hence cannot be accessed across processes - limited scope. The remaining primitives have got system wide scope and so can be accessed across processes too.

Mutex

As the name indicates, mutually exclusive, so if one thread gets an access, all others will be on wait (or restrained from accessing) until the first one relinquishes - allows one thread at a time as if the critical sections does but it can be accessed across processes or network boundaries.
e.g. Toll gate (one vehicle per ticket)

Event

Mutex, upon relinquishing, causes to release one thread from the wait to have its turn among all bunch of threads, whereas event releases all the waiting threads in one go. Event signals (/notifies) all the waiting threads when a current thread is done its job.
e.g. Traffic Signals.

Semaphore

It maintains a count between zero and some maximum number, which indicates how many threads can access the shared resource simultaneously. It means one can restrict the no. of accesses to a resource. The count is reduced every time a thread gets an access to semaphore and is incremented every time a thread releases the semaphore. When the count reaches ZERO, no more threads can access the resource. The semaphore state is set to signaled when the count is greater than ZERO and non signaled when it is ZERO.
e.g. Movie tickets

Waitable Timers

Notifies one or more waiting threads that a specified time has arrived. A waitable timer object is a synchronization object whose state is set to signaled when the specified due time arrives. There are two types of waitable timers that can be created: manual-reset and synchronization. A timer of either type can also be a periodic timer.