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
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
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
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 – OpenCL Interoperability
In last week’s “Learning ArrayFire from scratch” post we discussed how to interface ArrayFire and CUDA to improve your productivity. This week we demonstrate how to mix ArrayFire and OpenCL in your application.
ArrayFire – CUDA Interoperability
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
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
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
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
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 …