Hey everyone, and welcome to the final blog for SPO600. Objective ARMv9 is coming out soon, and it has improved SIMD implementation using a new technology titled Scalable Vector Extensions v2 (SVE2). This is an upgrade from SVE, an AArch64 extension used for flexible vector-length implementations. The idea for this final blog is to analyze how ffmpeg will be operating differently with the coming of SVE2 and describe the changes that will need to be extended to support SVE2. Definition Firstly, let's take a look at the official documentation for SVE2, taken straight from the ARM website. "SVE2 is a superset of SVE and Neon." This means that SVE2 will support all of the functionality of SVE and the Neon extension with extended features. By this logic, ffmpeg will require no necessary changes to support the new SVE2 overhaul. However; there's a couple of new features in SVE2 that should be utilized to improve the efficiency of ffmpeg. How do I write SVE code anyway? In ...
For the second stage of the final SPO600 project, the objective is to select one open-source project of our choosing, locate the SIMD code and examine its purpose. Professor Chris provided many open-source project options for us; I decided to go with ffmpeg. ffmpeg is a multimedia library that is used for transcoding formats, video editing (trimming, concatenating, scaling, effects, etc.). This library has been in development since its release on December 20, 2000, with the most recent commit only being a few hours ago as shown below. I decided to take a dive into their repository, searching for any sign of SIMD code. SIMD stands for Single Instruction, Multiple Data and is a parallel processing technique that is often used for 3D Graphics and multimedia applications. This makes sense because images have two dimensions, and videos even include time as an extra 'dimension' as well. Parallel processing is crucial to operate efficiently on multimedia like that. This is what...
Hey guys, and welcome back to my SPO600 blog. In this class, we took a deeper dive into 6502 Assembler. This time, we learnt some directives. Directives are instructions that set behavior for how the compiler processes input. Here's a few examples. define This directive is a very simple text replacement, which stores a given value into any word you provide to it. For example, 'define WHITE $01' makes it so that any time you mention 'WHITE', it gets substituted with $01. This is really useful if some particular values are hard to remember. In this case, $01 refers to the white color, which is definitely easy to forget. DCB DCB (define constant byte) stores a value in memory, at the very end of the memory. Once that value is declared, it can be called from the main code using LDA. The value must be either a quoted string or a numeric expression that evaluates to an integer between 128 to 255. I was interested to see the parallels between 6502 directives and C++ direct...
Comments
Post a Comment