{"id":1133,"date":"2011-03-27T10:36:56","date_gmt":"2011-03-27T17:36:56","guid":{"rendered":"http:\/\/mcclanahoochie.com\/blog\/?p=1133"},"modified":"2015-04-26T20:47:55","modified_gmt":"2015-04-27T03:47:55","slug":"the-history-and-evolution-of-gpu-hardware","status":"publish","type":"post","link":"https:\/\/mcclanahoochie.com\/blog\/2011\/03\/the-history-and-evolution-of-gpu-hardware\/","title":{"rendered":"The History and Evolution of GPU Hardware"},"content":{"rendered":"<p>Here is a paper survey I wrote last semester in my <a href=\"http:\/\/www.cc.gatech.edu\/~hyesoon\/fall10\/\" target=\"_blank\">CS6290<\/a> class about<em> how the Graphics Processing Units (GPUs) hardware architecture has evolved over time<\/em>. I found the research quite interesting, and spent a lot of time doing it. I&#8217;m posting this here, as I feel that more people than my professor should read and enjoy it.<\/p>\n<p><strong>Abstract<\/strong>:<\/p>\n<p><!--        @page { margin: 0.79in }        H1 { margin-top: 0.03in; margin-bottom: 0in; text-align: left }         H1.western { font-family: \"Times New Roman\", serif; font-size: 12pt }       H1.cjk { font-family: \"DejaVu Sans\"; font-size: 12pt }      H1.ctl { font-family: \"DejaVu Sans\"; font-size: 12pt; font-weight: normal }         H1.abstract-western { margin-top: 0in; margin-bottom: 0.08in; font-family: \"Times New Roman\", serif; font-size: 9pt; font-weight: normal; text-align: justify }         H1.abstract-cjk { margin-top: 0in; margin-bottom: 0.08in; font-family: \"DejaVu Sans\"; font-size: 9pt; font-weight: normal; text-align: justify }        H1.abstract-ctl { margin-top: 0in; margin-bottom: 0.08in; font-family: \"DejaVu Sans\"; font-size: 12pt; font-weight: normal; text-align: justify }       P { margin-bottom: 0.08in } --><\/p>\n<blockquote><p>The graphics processing unit (GPU) is a specialized and highly parallel microprocessor designed to offload and accelerate 2D or 3D rendering from the central processing unit (CPU). GPUs can be found in a wide range of systems, from desktops and laptops to mobile phones and super computers [3].<\/p>\n<p>This paper provides a summary of the history and evolution of GPU hardware architecture. The information in this paper, while being slightly NVIDIA biased, is presented as a set of milestones noting major architectural shifts and trends in GPU hardware.<\/p>\n<p>The evolution of GPU hardware architecture has gone from a specific single core, fixed function hardware pipeline implementation made solely for graphics, to a set of highly parallel and programmable cores for more general purpose computation. The trend in GPU technology has no doubt been to keep adding more programmability and parallelism to a GPU core architecture that is ever evolving towards a general purpose more CPU-like core.<\/p>\n<p>Future GPU generations will look more and more like wide-vector general purpose CPUs, and eventually both will be seamlessly combined as one.<\/p><\/blockquote>\n<p><strong>Link<\/strong>: \u00a0\u00a0<span style=\"font-style: italic;\"><a title=\"History and Evolution of GPU Architecture\" href=\"http:\/\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/03\/gpu-hist-paper.pdf\" target=\"_blank\">History and Evolution of GPU Architecture<\/a><\/span><\/p>\n<p>(Please excuse the horrible formatting, as this was made in Open Office &#8211; before I knew how to use LaTeX.)<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Here is a paper survey I wrote last semester in my CS6290 class about how the Graphics Processing Units (GPUs) hardware architecture has evolved over time. I found the research quite interesting, and spent a lot of time doing it. I&#8217;m posting this here, as I feel that more people than my professor should read &#8230; <a title=\"The History and Evolution of GPU Hardware\" class=\"read-more\" href=\"https:\/\/mcclanahoochie.com\/blog\/2011\/03\/the-history-and-evolution-of-gpu-hardware\/\" aria-label=\"Read more about The History and Evolution of GPU Hardware\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"advanced_seo_description":"","jetpack_seo_html_title":"","jetpack_seo_noindex":false,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[1],"tags":[202,103,100,201,200,199],"class_list":["post-1133","post","type-post","status-publish","format-standard","hentry","category-uncategorized","tag-evolution","tag-gpgpu","tag-gpu","tag-hardware","tag-history","tag-research"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/pZdXI-ih","jetpack-related-posts":[{"id":882,"url":"https:\/\/mcclanahoochie.com\/blog\/2011\/01\/uroc-gpgpu-poster\/","url_meta":{"origin":1133,"position":0},"title":"UROC GPGPU Poster","author":"mcclanahoochie","date":"January 1, 2011","format":false,"excerpt":"April 2010 I find\u00a0graphics card programming fascinating. I presented a\u00a0UROC Poster on GPGPU Molecular Dynamics\u00a0analysis and visualization on the GPU at the 2010 Georgia Tech Undergraduate\u00a0Research\u00a0Symposium. I also had a cool demo set up of the system running (above), along with my Android bonds\u00a0visualization client. \u00a0 \u00a0","rel":"","context":"In \"bonds\"","block_context":{"text":"bonds","link":"https:\/\/mcclanahoochie.com\/blog\/tag\/bonds\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/01\/bonds.png?resize=350%2C200","width":350,"height":200},"classes":[]},{"id":1663,"url":"https:\/\/mcclanahoochie.com\/blog\/2011\/08\/cuda-connected-component-labeling\/","url_meta":{"origin":1133,"position":1},"title":"GPU Connected Component Labeling","author":"mcclanahoochie","date":"August 6, 2011","format":false,"excerpt":"Connected Component Labeling (CCL): \"is used in computer vision to detect connected regions in binary digital images\", and sometimes referred to as blob coloring. Motivation: To keep AccelerEyes'\u00a0ever expanding GPU library growing, over a few weeks of this summer\u00a0I took on the project of writing a CUDA version of connected\u2026","rel":"","context":"In \"arrayfire\"","block_context":{"text":"arrayfire","link":"https:\/\/mcclanahoochie.com\/blog\/tag\/arrayfire\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/08\/coins-bwlabel-300x122.png?resize=350%2C200","width":350,"height":200},"classes":[]},{"id":1876,"url":"https:\/\/mcclanahoochie.com\/blog\/2011\/10\/gpu-convolution-opencv-gpu-and-libjacket-part-2\/","url_meta":{"origin":1133,"position":2},"title":"GPU Convolutions: OpenCV GPU and LibJacket &#8211; Part 2","author":"mcclanahoochie","date":"October 24, 2011","format":false,"excerpt":"This is a response to my earlier post comparing OpenCV's gpu::convolve() and LibJacket's jkt::conv2() convolution functions, at various image and kernel sizes. That post generated a lot of traffic, most notably from the OpenCV developer community. Taking note of this, it seems that the folks at Willow Garage have re-vamped\u2026","rel":"","context":"In \"arrayfire\"","block_context":{"text":"arrayfire","link":"https:\/\/mcclanahoochie.com\/blog\/tag\/arrayfire\/"},"img":{"alt_text":".","src":"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/10\/Screenshot-f2-2075.png?resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/10\/Screenshot-f2-2075.png?resize=350%2C200 1x, https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/10\/Screenshot-f2-2075.png?resize=525%2C300 1.5x"},"classes":[]},{"id":1810,"url":"https:\/\/mcclanahoochie.com\/blog\/2011\/09\/opencv-vs-libjacket-gpu-sobel-filtering\/","url_meta":{"origin":1133,"position":3},"title":"OpenCV vs. LibJacket: GPU Sobel Filtering","author":"mcclanahoochie","date":"September 24, 2011","format":false,"excerpt":"Update: LibJacket has been renamed to\u00a0\u00a0ArrayFire. In response to a comment on a previous post about integrating LibJacket into an OpenCV project, below is just a simple FYI performance comparison of OpenCV's GPU Sobel filter versus LibJacket's conv2\u00a0convolution\u00a0filter (with a sobel kernel)... This is an evolutionary post, so be sure\u2026","rel":"","context":"In \"arrayfire\"","block_context":{"text":"arrayfire","link":"https:\/\/mcclanahoochie.com\/blog\/tag\/arrayfire\/"},"img":{"alt_text":"Sobel filter: OpenCV GPU vs. LibJacket","src":"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/09\/cv-versus-jkt.png?resize=350%2C200","width":350,"height":200},"classes":[]},{"id":886,"url":"https:\/\/mcclanahoochie.com\/blog\/2011\/01\/mtimes-gpu-matrix-multiplication\/","url_meta":{"origin":1133,"position":4},"title":"MTIMES &#8211; GPU Matrix Multiplication","author":"mcclanahoochie","date":"January 1, 2011","format":false,"excerpt":"July 2010 OK, it's not really a project, but I did learn a lot about GPU matrix multiplication over the summer, working\u00a0at AccelerEyes. I\u00a0re-worked the back-end CUDA code for\u00a0the MTIMES Jacket function. I also modified it to accelerate SUM, MIN, and\u00a0MAX. Checkout my MTIMES wiki page!","rel":"","context":"In \"arrayfire\"","block_context":{"text":"arrayfire","link":"https:\/\/mcclanahoochie.com\/blog\/tag\/arrayfire\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/01\/fermi_gflops_single.jpg?resize=350%2C200","width":350,"height":200},"classes":[]},{"id":1896,"url":"https:\/\/mcclanahoochie.com\/blog\/2011\/11\/gpu-tv-l1-optical-flow-with-libjacket\/","url_meta":{"origin":1133,"position":5},"title":"GPU TV-L1 Optical Flow with ArrayFire","author":"mcclanahoochie","date":"November 6, 2011","format":false,"excerpt":"Update 1: LibJacket has been renamed to\u00a0\u00a0ArrayFire. Update 2: Huang Chao-Hui was nice enough to port the LibJacket code mentioned here to ArrayFire - see his work here. As one of my\u00a0Computer Vision\u00a0class\u00a0projects, I decided to implement optical flow, because I wanted to learn more about optical flow, and also\u2026","rel":"","context":"In \"arrayfire\"","block_context":{"text":"arrayfire","link":"https:\/\/mcclanahoochie.com\/blog\/tag\/arrayfire\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/11\/jkt-oflow-tvl1-1024x626.png?resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/11\/jkt-oflow-tvl1-1024x626.png?resize=350%2C200 1x, https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/11\/jkt-oflow-tvl1-1024x626.png?resize=525%2C300 1.5x"},"classes":[]}],"jetpack_likes_enabled":false,"_links":{"self":[{"href":"https:\/\/mcclanahoochie.com\/blog\/wp-json\/wp\/v2\/posts\/1133","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mcclanahoochie.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mcclanahoochie.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mcclanahoochie.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mcclanahoochie.com\/blog\/wp-json\/wp\/v2\/comments?post=1133"}],"version-history":[{"count":0,"href":"https:\/\/mcclanahoochie.com\/blog\/wp-json\/wp\/v2\/posts\/1133\/revisions"}],"wp:attachment":[{"href":"https:\/\/mcclanahoochie.com\/blog\/wp-json\/wp\/v2\/media?parent=1133"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mcclanahoochie.com\/blog\/wp-json\/wp\/v2\/categories?post=1133"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mcclanahoochie.com\/blog\/wp-json\/wp\/v2\/tags?post=1133"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}