Random Number Generators in ArrayFire v3.4

Kumar AatishArrayFire Leave a Comment

Pseudorandom number generators (PRNGs) are an integral part of many applications in statistics, modeling, and simulations. In ArrayFire v3.4, we introduce random number generation enhancements that improve speed, accuracy, storage, and unity among the ArrayFire backends. Previously in ArrayFire v3.3, each ArrayFire backend used a different PRNG. In ArrayFire v3.4, each ArrayFire backend is able to select from among 3 different random number generators. ArrayFire v3.3 (platform specific) ArrayFire v3.4 (all generators on all platforms) CUDA XORWOW CUDA, OpenCL, CPU Philox (CBRNG), Threefry (CBRNG), Mersenne Twister OpenCL Threefry (CBRNG) CPU Mersenne Twister As seen above, the XORWOW generator (which was only available for CUDA devices previously) has been replaced by the Philox generator which is available along with Threefry and Mersenne …

Sparse Matrices in ArrayFire v3.4

Shehzan MohammedArrayFire Leave a Comment

In ArrayFire v3.4, we have added support for sparse matrices, which greatly reduce the memory footprint on GPUs and accelerated devices for many applications. A sparse data structure is one where all the non-zero elements are not stored. Sparse matrices are useful when the number of zero-values elements are much greater than the number of non-zero elements (i.e. the sparsity of the matrix is high). A sparse data structure is generally stored as 3 arrays: A data or values array containing all the non-zero elements A vector for row indices (based on storage format) A vector for column indices (based on storage format) There are many ways to store sparse matrices, the most prominent of which are: Compressed Sparse Row (CSR) Compressed Storage Column (CSC) …

A Simple Particle System with ArrayFire

Stefan YurkevitchArrayFire Leave a Comment

It’s the 4th of July today and we’re celebrating at ArrayFire! The 4th of July implies fireworks, and fireworks obviously imply particle systems. Particle systems are a collection of many small images or points that can be rendered to represent some complex behaving object. So before we can launch our fireworks, we will need to create a particle system. The large number of particles in a system lends well to GPU computation. Thankfully, ArrayFire’s easy to use interface will allow us to do this simply and efficiently. First, let’s examine the structure of a typical particle system. Individual particles in a system typically have a variety of properties that govern their individual behavior. A non-comprehensive list below summarizes some of …

Visualizing the af::array with Forge

Stefan YurkevitchArrayFire Leave a Comment

The ArrayFire library attempts to make high-performance computing as easy as possible for scientists and engineers. Because many tasks need to be visualized, ArrayFire also provides a high-level interface to our Forge visualization library. In today’s “Learning ArrayFire from scratch” post we present an overview of ArrayFire’s visualization functionality and demonstrate how to use Forge to display data contained in af::array objects.

ArrayFire – CUDA Interoperability

Brian KloppenborgArrayFire, CUDA 2 Comments

Although ArrayFire is quite extensive, there remain many cases in which you may want to write custom kernels in CUDA or OpenCL. For example, you may wish to add ArrayFire to an existing code base to increase your productivity, or you may need to supplement ArrayFire’s functionality with your own custom implementation of specific algorithms. Today’s “Learning ArrayFire from scratch“, blog post discusses how you can interface ArrayFire and CUDA.

Manipulating and restructuring arrays

Stefan YurkevitchArrayFire Leave a Comment

One of the most common questions we see on the ArrayFire Google Group pertains to methods to manipulate the dimensions of ArrayFire array objects. Thus we will continue the “Learning ArrayFire from scratch” blog series by providing a detailed discussion of the numerous functions that permit you to change the dimentionality, flatten, flip, join, shift, transpose, and tile arrays.

Introduction to Vectorization in ArrayFire

Stefan YurkevitchArrayFire Leave a Comment

Programmers and Data Scientists want to take advantage of fast and parallel computational devices. One of the best ways of doing this is to write vectorized code; however, this is often easier said than done. In today’s continuation of the blog series “Learning ArrayFire from scratch“, we will discuss the various methods by which you can maximize the performance of your code by using ArrayFire’s built-in vectorization features.

Introduction to the ArrayFire array

Brian KloppenborgArrayFire Leave a Comment

The fundamental primitive of the ArrayFire Library is our container object, the array. As the next post in our blog series, “Learning ArrayFire from scratch“, we will describe how to construct arrays, what datatypes arrays support, indexing, how to query an array for various properties (content, dimensions), and how to write mathematical expressions that involve arrays.

Visit ArrayFire at GTC 2016

ScottAnnouncements, ArrayFire, Events 2 Comments

GTC is quickly approaching and we want to see you there! When: April 4-7 Where: San Jose, California ArrayFire Booth: 103 GTC is the world’s premier GPU developer conference. Connect with experts from NVIDIA and other leaders in high performance computing. At GTC you’ll discover what’s next in GPU breakthroughs and gain useful insights in hundreds of sessions and hands-on labs covering a diverse range of application domains. We invite you to attend the following talk presented by one of our knowledgeable and experienced GPU developers. Real-Time Visualization of CUDA® Data Using ArrayFire Forge Presented by Brian Kloppenborg – Wednesday April 6 at 3:30 pm (Room 211B) We will debut ArrayFire Forge, our new general-purpose data visualization library for GPUs. ArrayFire Forge is a …