PeakStream's software . RapidMind also provided stream processing software that worked with ATI and NVIDIA, as well as Cell processors. Software Development Kit After abandoning their short-lived Close to Metal API, AMD focused on OpenCL. AMD first released its Stream Computing SDK (v1.0), in December 2007 under the AMD EULA, to be run on Windows XP. The SDK includes "Brook+", an AMD hardware optimized version of the Brook language developed by Stanford University, itself a variant of the ANSI C (C language), open-sourced and optimized for stream computing. The AMD Core Math Library (ACML) and AMD Performance Library (APL) with optimizations for the AMD FireStream and the COBRA video library (further renamed as "Accelerated Video Transcoding" or AVT) for video transcoding acceleration will also be included. Another important part of the SDK, the Compute Abstraction Layer (CAL), is a software development layer aimed for low-level access, through the CTM hardware interface, to the GPU architecture for performance tuning software written in various high-level programming languages. In August 2011, AMD released version 2.5 of the ATI APP Software Development Kit, which includes support for OpenCL 1.1, a parallel computing language developed by the Khronos Group. The concept of compute shaders, officially called DirectCompute, in Microsoft's next generation API called DirectX 11 is already included in graphics drivers with DirectX 11 support. AMD APP SDK Benchmarks According to an AMD-demonstrated system with two dual-core AMD Opteron processors and two Radeon R600 GPU cores running on Microsoft Windows XP Professional, 1 teraflop (TFLOP) can be achieved by a universal multiply-add (MADD) calculation. By comparison, an Intel Core 2 Quad Q9650 3.0 GHz processor at the time could achieve 48 GFLOPS. In a demonstration of Kaspersky SafeStream anti-virus scanning that had been optimized for AMD stream processors, was able to scan 21 times faster with the R670 based acceleration than with search running entirely on an Opteron, in 2007. Limitations Recursive functions are not supported in Brook+ because all function calls are inlined at compile time. Using CAL, functions (recursive or otherwise) are supported to 32 levels. Only bilinear texture filtering is supported; mipmapped textures and anisotropic filtering are not supported. Functions cannot have a variable number of arguments. The same problem occurs for recursive functions. Conversion of floating-point numbers to integers on GPUs is done differently than on x86 CPUs; it is not fully IEEE-754 compliant. Doing "global synchronization" on the GPU is