NVIDIA CUDA: GPUs become programmable compute
NVIDIA
NVIDIA posts a public beta of its CUDA C compiler and SDK, letting developers program GPUs directly in C. It made GPUs the practical substrate for deep learning, from AlexNet's 2012 win to the cuDNN library.
The event and the narrow claim
The documentable event here is a tooling release, not a scientific discovery. NVIDIA had announced its Compute Unified Device Architecture (CUDA) in November 2006 alongside the GeForce 8800 GTX, the first graphics processor designed to run general programs as well as render images. What this timeline entry records is the moment developers could obtain it: in February 2007 NVIDIA posted a public beta of the CUDA software development kit and its C compiler, downloadable for Windows XP and Linux (Red Hat Enterprise Linux 4). The company's release notes and README for that beta accompanied the download, and a trade report, Computer Graphics World's coverage dated 26 February 2007, described the kit as making the parallel computing power of the GPU accessible to virtually any developer through the standard C programming language.
Keeping the architecture announcement (2006) separate from the developer-access event (2007) matters, because the second is what changed practice. An architecture that only its vendor can program is a product specification; a documented toolchain a graduate student can install is the start of an ecosystem. The broad historical judgment, that CUDA helped make GPUs the default substrate for machine learning, is defensible, but it rests on later work by many groups rather than on the beta itself. This report keeps those two levels of claim distinct: what the release literally was, and what it later enabled.
Before CUDA: computing by pretending to draw
Before a general programming interface existed, using a GPU for non-graphics math meant disguising the computation as rendering. A researcher packed data into textures, expressed the arithmetic as a fragment (pixel) shader written in a shading language such as GLSL or Cg, and read results back out of the frame buffer. The field even had a name, GPGPU, and a real literature. Owens and colleagues' 2007 survey of general-purpose computation on graphics hardware catalogues the algorithms, data structures, and applications that people had forced through the graphics pipeline by the middle of the decade.
The most important bridge was Brook. In Buck and colleagues' 2004 SIGGRAPH paper, "Brook for GPUs", a Stanford group extended C with data-parallel "stream" and "kernel" constructs and compiled them down to graphics operations, reporting speedups up to roughly seven times a CPU baseline on kernels such as the SAXPY and SGEMV linear-algebra operators. Brook mattered twice over. It showed that a familiar language could hide the graphics plumbing, and its lead author, Ian Buck, subsequently joined NVIDIA and helped lead CUDA. The intellectual lineage from Brook to CUDA is direct, which is why CUDA is better read as the industrialization of an existing research direction than as an invention from nothing.
The constraint the release addressed
The graphics-API detour imposed concrete costs that limited who could use GPUs and for what. Arithmetic ran at whatever precision the shader pipeline offered, and early pipelines were built for pixels, not for numerical error budgets. A program could not write to an arbitrary memory address (scatter was awkward or impossible), there was no exposed on-chip scratchpad for threads to cooperate, and debugging often meant inspecting colored output pixels for signs of a wrong answer. Every problem had to be re-expressed in the vocabulary of textures, vertices, and fragments even when it had nothing to do with images.
CUDA's contribution was to remove the detour rather than to add raw speed. It let a developer address the GPU as a parallel processor directly: allocate memory, launch functions across thousands of threads, and let those threads read and write general memory. The mechanism recorded in this event is therefore a change in accessibility. The same silicon that shipped in a consumer graphics card in late 2006 became, a few months later, something a numerical programmer could target with C and a compiler. That lowered the barrier from "expert in graphics programming who can smuggle math through a shader" to "competent C programmer willing to learn a parallel model," which is a different and much larger population.
How the programming model actually works
CUDA's model is best understood through its unit of work. A programmer writes a "kernel," an ordinary-looking C function annotated to run on the device, and launches it across a grid of thread blocks; each block contains many threads, and within a block threads can synchronize and share a small, fast on-chip memory. The current CUDA C++ Programming Guide still documents this same hierarchy of threads, blocks, and grids, and the accompanying memory hierarchy (per-thread registers, per-block shared memory, and large but slower global memory) that the programmer manages explicitly.
Underneath, execution is what NVIDIA later named SIMT, single-instruction multiple-thread: the hardware groups threads into "warps" of 32 that execute the same instruction together, with divergence handled by masking. Nickolls, Buck, Garland, and Skadron's 2008 account "Scalable Parallel Programming with CUDA" lays out this model and the reasoning behind it: express parallelism as many lightweight threads, group them into cooperating blocks, and let the same source scale from a small GPU to a large one as the number of processing cores grows. That scalability claim is central. The programmer describes the parallelism once, and the runtime distributes blocks across whatever cores are present. The compiler, nvcc, splits a source file into host code for the CPU and device code for the GPU, which is what let CUDA feel like C with extensions rather than a separate language.
The silicon underneath: G80 and the Tesla architecture
The programming model needed matching hardware, and the GeForce 8800's G80 chip supplied it. Earlier GPUs had separate, fixed pools of vertex and pixel processors; G80 replaced them with a single array of programmable scalar cores (128 of them on the flagship 8800 GTX) that could be assigned to graphics or to compute. Lindholm, Nickolls, Oberman, and Montrym's 2008 IEEE Micro paper, "NVIDIA Tesla: A Unified Graphics and Computing Architecture", is the canonical description of this design and the paper that introduced the SIMT terminology for how those cores execute warps.
Two design choices in that architecture made CUDA practical rather than merely possible. First, the unified, general-purpose cores meant a compute kernel was a first-class workload, not a graphics job in disguise. Second, the on-chip shared memory per block gave threads a fast, programmer-controlled place to cooperate, which is what allows efficient implementations of operations like matrix multiplication and convolution where reuse of data is the whole game. This is worth stressing because it complicates any single-cause story. The 2007 software beta is the accessibility event, but it was co-designed with silicon whose unified, scalar, cooperative structure is what made the software model worth using. Hardware and toolchain advanced together, and neither alone explains what followed.
The concrete evidence, stated as workload-specific results
The honest way to report GPU speedups is per workload, never as a single universal multiplier. Early GPGPU results already showed this spread: Brook's roughly sevenfold gains were on specific streaming kernels, and other operations benefited far less or not at all when memory movement dominated. The gains were real, but they were properties of particular algorithms on particular hardware, not a fixed ratio between GPU and CPU.
Machine learning provided the results that mattered for this timeline. Raina, Madhavan, and Ng's 2009 paper, "Large-scale Deep Unsupervised Learning Using Graphics Processors", reimplemented deep belief networks and sparse coding on CUDA and reported speedups roughly an order of magnitude and more over well-optimized multicore CPU baselines, which turned models that had been impractically slow to train into ones a lab could iterate on in reasonable time. The load-bearing claim is not a headline number; it is a change in feasibility. When training that took weeks becomes training that takes days, researchers can run more experiments, and the pace of empirical progress rises. That mechanism, cheaper iteration rather than a magic constant, is the accurate way to describe why programmable GPUs mattered for the methods that came next.
The competing approaches of its era
CUDA was not the only attempt to open GPUs to general computation, and treating it as the inevitable winner obscures a genuine contest. The most consequential rival was the vendor-neutral standard OpenCL, developed by the Khronos Group after an initiative from Apple, with its first specification finalized at the end of 2008. OpenCL offered a similar data-parallel model that could target GPUs, CPUs, and other accelerators from multiple vendors, and it remains the portable alternative.
AMD pursued its own path, first with a low-level interface called Close to Metal, then with the Stream SDK and eventually the ROCm stack, while Microsoft added DirectCompute to DirectX 11 for Windows applications. On paper, portability favored the open standards. In practice CUDA accumulated advantages that were less about the language and more about the surrounding software: mature libraries, profilers and debuggers, thorough documentation, and a single company tuning the compiler to its own hardware. The historical point is that CUDA's durability came substantially from ecosystem depth and consistency, not from a unique idea unavailable elsewhere. A portable standard existed early; the tooling, libraries, and developer experience are where the divergence actually happened.
The documented path into machine learning
The clearest downstream influence runs through a short chain of well-attested milestones. After the 2009 demonstration that deep models trained faster on GPUs, the decisive public result arrived in 2012. Krizhevsky, Sutskever, and Hinton's ImageNet paper trained a deep convolutional network with about 60 million parameters using a custom CUDA implementation on two consumer GPUs, and won the ILSVRC-2012 image-classification challenge with a top-5 error of 15.3 percent against 26.2 percent for the next-best entry. That is a task-specific benchmark result, not a measure of general intelligence, but the margin was large enough to change the field's direction toward deep learning.
The tooling then consolidated. In 2014 NVIDIA released a dedicated library, described in Chetlur and colleagues' paper "cuDNN: Efficient Primitives for Deep Learning", which provided optimized implementations of the operations deep networks depend on (convolutions, pooling, normalization) so that framework authors did not have to hand-tune GPU kernels themselves. cuDNN was quickly adopted by the frameworks of the era, which is how the performance work of a small team propagated to thousands of researchers. The lineage from a 2007 C toolchain to a 2012 benchmark win to a 2014 primitives library is concrete and citable, and it is stronger evidence of influence than any claim that one release "caused" modern AI.
The honest limits and caveats
Several caveats keep the story accurate. CUDA is proprietary and requires compatible NVIDIA hardware; it is not a vendor-neutral standard, and code written directly against it does not run on other companies' accelerators without translation or a rewrite. That is a real constraint on portability and a source of the market concentration that later drew scrutiny. The open alternatives described above existed precisely because a single-vendor interface has costs as well as benefits.
Just as important, a programming model does not by itself determine outcomes. Training performance depends jointly on hardware, data, algorithms, memory bandwidth, and numerical precision, and a speedup measured on one kernel says nothing guaranteed about another. The early results were genuine but workload-specific, and the same is true today. It is also worth resisting the reverse error of crediting CUDA with the ideas it accelerated: backpropagation, convolutional networks, and the datasets and benchmarks that made deep learning measurable were separate contributions. CUDA lowered the cost of running those ideas at scale. That is a significant role, and it is a different role from having originated them.
How to place CUDA in AI history
The accurate placement treats the February 2007 beta as an accessibility milestone in a co-evolving story of hardware and software, not as a founding act of modern AI. The narrow, documented event is that NVIDIA made general-purpose GPU programming installable in C by ordinary developers. The wider judgment, that this helped make parallel hardware the practical foundation for machine learning, is earned by tracing later work: the GPGPU research CUDA industrialized, the unified silicon it was co-designed with, the demonstrations that deep models trained dramatically faster on it, and the libraries that spread those gains.
A reader navigating outward from this event can use three questions. Which earlier idea did it package (the stream-and-kernel model from Brook and the broader GPGPU literature)? Which later project reused the platform while changing another ingredient (the 2012 ImageNet result, which supplied the data, the depth, and the training tricks on top of CUDA)? And which limitation required further work (the portability gap that motivated OpenCL, and the tuning burden that motivated cuDNN)? Answered that way, CUDA reads as what it was: a well-timed, well-supported piece of infrastructure that reorganized who could use parallel hardware, without pretending that infrastructure alone determined everything built on top of it.
References
- NVIDIA (2007). CUDA release notes and README.
- Computer Graphics World (2007). Nvidia Releases Public Beta of CUDA Software Developer Kit.
- Buck et al. (2004). Brook for GPUs: Stream Computing on Graphics Hardware.
- Owens et al. (2007). A Survey of General-Purpose Computation on Graphics Hardware.
- Nickolls, Buck, Garland and Skadron (2008). Scalable Parallel Programming with CUDA.
- Lindholm, Nickolls, Oberman and Montrym (2008). NVIDIA Tesla: A Unified Graphics and Computing Architecture.
- NVIDIA (2025). CUDA C++ Programming Guide.
- Khronos Group (2009). OpenCL.
- Raina, Madhavan and Ng (2009). Large-scale Deep Unsupervised Learning Using Graphics Processors.
- Krizhevsky, Sutskever and Hinton (2012). ImageNet Classification with Deep Convolutional Neural Networks.
- Chetlur et al. (2014). cuDNN: Efficient Primitives for Deep Learning.
Cite this report
Chronicle. (2026, September 10). NVIDIA CUDA (2007): GPUs become programmable compute. https://epoch.founden.co/events/cuda
Connected developments
Follow the ideas behind this event and the developments that came after it. Connections indicate conceptual or historical relationships, not proof of sole causation.
General-purpose parallelism's rise · 1982Fifth Generation Computer Systems project: Japan bets a decade on logic machinesAlgorithm it made cheap to run · 1986Learning by backpropagationModels later sped up on GPUs · 2006Deep belief networks: The deep learning revivalData half of the 2012 result · 2009ImageNet changes the datasetEnabling compute · 2012AlexNet transforms image recognition