±à¼ÍƼö: |
±¾ÎĽ²ÊöGPUÉϵľØÕó¼Ó·¨£¬GPUäÖȾ¹ÜÏߣ¬P&D DEMͼÏñÔ¤´¦ÀíËã·¨¼ÓËÙЧ¹ûµÈ£¬Ï£Íû¶ÔÄúÓÐËù°ïÖú
±¾ÎÄÀ´×ÔÓÚcsdnÓÉ»ðÁú¹ûÈí¼þDelores±à¼ÍƼö¡£ |
|
1 GPUÊÇʲô
Èçͼ1Ëùʾ£¬Õą̂PC»úÓëÆÕͨPC»ú²»Í¬µÄÊÇÕâÀï²åÁË7ÕÅÏÔ¿¨£¬×óϽÇÊÇÏÔ¿¨£¬ÔÚÖмäµÄ¾ÍÊÇGPUоƬ¡£ÏÔ¿¨µÄ´¦ÀíÆ÷³ÆÎªÍ¼Ðδ¦ÀíÆ÷£¨GPU£©£¬ËüÊÇÏÔ¿¨µÄ¡°ÐÄÔࡱ£¬ÓëCPUÀàËÆ£¬Ö»²»¹ýGPUÊÇרΪִÐи´ÔÓµÄÊýѧºÍ¼¸ºÎ¼ÆËã¶øÉè¼ÆµÄ¡£
GPU¼ÆËãÄÜÁ¦·Ç³£Ç¿º·£¬¾Ù¸öÀý×Ó£ºÏÖÔÚÖ÷Á÷µÄi7´¦ÀíÆ÷µÄ¸¡µã¼ÆËãÄÜÁ¦ÊÇÖ÷Á÷µÄӢΰ´ïGPU´¦ÀíÆ÷¸¡µã¼ÆËãÄÜÁ¦µÄ1/12¡£

ͼ1 ÏÔ¿¨ÓëGPU
2 ΪʲôGPU¼ÆËãÄÜÁ¦Èç´ËÇ¿º·£¿
ͼ2¶ÔCPUÓëGPUÖеÄÂß¼¼Ü¹¹½øÐÐÁ˶Աȡ£ÆäÖÐControlÊÇ¿ØÖÆÆ÷¡¢ALUËãÊõÂß¼µ¥Ôª¡¢CacheÊÇcpuÄÚ²¿»º´æ¡¢DRAM¾ÍÊÇÄÚ´æ¡£¿ÉÒÔ¿´µ½GPUÉè¼ÆÕß½«¸ü¶àµÄ¾§Ìå¹ÜÓÃ×÷Ö´Ðе¥Ôª£¬¶ø²»ÊÇÏñCPUÄÇÑùÓÃ×÷¸´ÔӵĿØÖƵ¥ÔªºÍ»º´æ¡£´Óʵ¼ÊÀ´¿´£¬CPUоƬ¿Õ¼äµÄ5%ÊÇALU£¬¶øGPU¿Õ¼äµÄ40%ÊÇALU¡£ÕâÒ²Êǵ¼ÖÂGPU¼ÆËãÄÜÁ¦³¬Ç¿µÄÔÒò¡£

ͼ2 cpuºÍgpuÓ²¼þÂß¼½á¹¹¶Ô±È
ÄÇÓÐÈ˽²ÁË£¬ÎªÊ²Ã´cpu²»ÏñgpuÄÇÑùÉè¼ÆÄØ£¬ÕâÑù¼ÆËãÄÜÁ¦Ò²Ç¿º·ÁË£¡
Ϊʲô£¿CPUÒª×öµÃºÜͨÓá£CPUÐèҪͬʱºÜºÃµÄÖ§³Ö²¢Ðкʹ®ÐвÙ×÷£¬ÐèÒªºÜÇ¿µÄͨÓÃÐÔÀ´´¦Àí¸÷ÖÖ²»Í¬µÄÊý¾ÝÀàÐÍ£¬Í¬Ê±ÓÖÒªÖ§³Ö¸´ÔÓͨÓõÄÂß¼Åжϣ¬ÕâÑù»áÒýÈë´óÁ¿µÄ·ÖÖ§Ìø×ªºÍÖжϵĴ¦Àí¡£ÕâЩ¶¼Ê¹µÃCPUµÄÄÚ²¿½á¹¹Òì³£¸´ÔÓ£¬¼ÆËãµ¥ÔªµÄ±ÈÖØ±»½µµÍÁË¡£¶øGPUÃæ¶ÔµÄÔòÊÇÀàÐ͸߶ÈͳһµÄ¡¢Ï໥ÎÞÒÀÀµµÄ´ó¹æÄ£Êý¾ÝºÍ²»ÐèÒª±»´ò¶ÏµÄ´¿¾»µÄ¼ÆËã»·¾³¡£Òò´ËGPUµÄоƬ±ÈCPUоƬ¼òµ¥ºÜ¶à¡£
¾Ù¸öÀý×Ó£¬¼ÙÉèÓÐÒ»¶ÑÏàͬµÄ¼Ó¼õ³Ë³ý¼ÆËãÈÎÎñÐèÒª´¦Àí£¬ÄǰÑÕâ¸öÈÎÎñ½»¸øÒ»¶Ñ£¨¼¸Ê®¸ö£©Ð¡Ñ§Éú¾Í¿ÉÒÔÁË£¬ÕâÀïСѧÉúÀàËÆÓÚGPUµÄ¼ÆËãµ¥Ôª£¬¶ø¶ÔһЩ¸´ÔÓµÄÂß¼ÍÆÀíµÈÎÊÌ⣬±ÈÈç¹«Ê½ÍÆµ¼¡¢¿Æ¼¼ÎÄÕÂд×÷µÈ¸ß¶ÈÂß¼»¯µÄÈÎÎñ£¬½»¸øÐ¡Ñ§ÉúÏÔÈ»²»ºÏÊÊ£¬Õâʱ´óѧ½ÌÊÚ¸üÊʺϣ¬ÕâÀïµÄ´óѧ½ÌÊÚ¾ÍÊÇCPUµÄ¼ÆËãµ¥ÔªÁË£¬´óѧ½ÌÊÚµ±È»ÄÜ´¦Àí¼Ó¼õ³Ë³ýµÄÎÊÌ⣬µ¥¸ö½ÌÊÚ¼ÆËã¼Ó¼õ³Ë³ý±Èµ¥¸öСѧÉú¼ÆËãËٶȸü¿ì£¬µ«Êdzɱ¾ÏÔÈ»¸ßºÜ¶à¡£
3 GPU±à³Ì¿â
GPU¼ÆËãÄÜÁ¦Õâôǿ£¬±»¹ã·ºÊ¹Ó㡱ÈÈçÍڿ󣨱ÈÌØ±Ò£©¡¢Í¼ÐÎͼÏñ´¦Àí¡¢ÊýֵģÄâ¡¢»úÆ÷ѧϰË㷨ѵÁ·µÈµÈ£¬ÄÇÎÒÃÇÔõô·¢»ÓGPU³¬Ç¿µÄ¼ÆËãÄÜÁ¦ÄØ£¿---±à³Ì£¡
Ôõô½øÐÐGPU±à³ÌÄØ£¿ÏÖÔÚGPUÐÎÐÎɫɫ£¬±ÈÈçNvidia¡¢AMD¡¢Intel¶¼ÍƳöÁË×Ô¼ºµÄGPU£¬ÆäÖÐ×îΪÁ÷ÐеľÍÊÇNvidiaµÄGPU£¬Æä»¹ÍƳöÁËCUDA²¢Ðбà³Ì¿â¡£È»¶øÃ¿¸öGPUÉú²ú¹«Ë¾¶¼ÍƳö×Ô¼ºµÄ±à³Ì¿âÏÔÈ»ÈÃѧϰ³É±¾ÉÏÉýºÜ¶à£¬Òò´ËÆ»¹û¹«Ë¾¾ÍÍÆ³öÁ˱ê×¼OpenCL£¬Ëµ¸÷¸öÉú²úÉ̶¼Ö§³ÖÎҵıê×¼£¬Ö»ÒªÓÐÒ»Ì×OpenCLµÄ±à³Ì¿â¾ÍÄܶԸ÷ÀàÐ͵ÄGPUоƬÊÊÓᣵ±È»ÁË£¬OpenCL×öµ½Í¨Óò»ÊÇûÓдú¼ÛµÄ£¬»á´øÀ´Ò»¶¨³Ì¶ÈµÄÐÔÄÜËðʧ£¬ÔÚNvidiaµÄGPUÉÏ£¬CUDAÐÔÄÜÃ÷ÏÔ±ÈOpenCL¸ß³öÒ»´ó½Ø¡£Ä¿Ç°CUDAºÍOpenCLÊÇ×îÖ÷Á÷µÄÁ½¸öGPU±à³Ì¿â¡£
´Ó±à³ÌÓïÑԽǶȿ´£¬CUDAºÍOpenCL¶¼ÊÇÔÉúÖ§³ÖC/C++µÄ£¬ÆäËüÓïÑÔÏëÒª·ÃÎÊ»¹ÓÐЩÂé·³£¬±ÈÈçJava£¬ÐèҪͨ¹ýJNIÀ´·ÃÎÊCUDA»òÕßOpenCL¡£»ùÓÚJNI£¬ÏÖ½ñÓи÷ÖÖJava°æ±¾µÄGPU±à³Ì¿â£¬±ÈÈçJCUDAµÈ¡£ÁíÒ»ÖÖ˼·¾ÍÊÇÓïÑÔ»¹ÊÇÓÉjavaÀ´±àд£¬Í¨¹ýÒ»ÖÖ¹¤¾ß½«javaת»»³ÉC¡£
ͼ3 GPU±à³Ì¿â
LWJGL
JOCL
JCUDA
Aparapi
JavaCL
4 CUDA³ÌÐòÁ÷³Ì
ͼ4 CUDA³ÌÐòÁ÷³Ì
5 ʵ¼ù---ÒÔͼÏñ´¦ÀíΪÀý
¼ÙÉèÎÒÃÇÓÐÈçÏÂͼÏñ´¦ÀíÈÎÎñ£¬¸øÃ¿¸öÏñËØÖµ¼Ó1¡£²¢Ðз½Ê½ºÜ¼òµ¥£¬ÎªÃ¿¸öÏñËØ¿ªÒ»¸öGPUỊ̈߳¬ÓÉÆä½øÐмÓ1²Ù×÷¡£
ͼ5 Àý×Ó
ͼ6 ºËº¯Êý
ͼ7 Ö÷Á÷³Ìº¯Êý
6 GPU¼ÓËÙЧ¹û
ÏÂͼÊÇÎÒʵÏֵĻùÓÚCUDAµÄP&D DEMͼÏñÔ¤´¦ÀíË㷨ʹÓÃGPUµÄ¼ÓËÙЧ¹û£¬GeForce GT 330ÊÇ¿éÆǪ̃ͨʽ»úÉϵÄÏÔ¿¨£¬ÏÖÔÚ¼Û¸ñÒ²¾Í500ÈËÃñ±Ò×óÓÒ£¬ÓÃËü´ïµ½ÁË20±¶µÄ¼ÓËٱȣ¬Tesla M2075ÊDZȽÏרҵµÄÏÔ¿¨£¬¼Û¸ñÒ»Íò×óÓÒ£¬ÓÃËü´ïµ½Á˽«½ü°Ù±¶µÄ¼ÓËٱȣ¬Õâ¸ö³ÌÐòi7 CPUµ¥½ø³Ìµ¥Ïß³ÌÒªÅÜ2¸öСʱ£¬¶øÓÃTesla M2075 GPUÖ»»¨ÁËÒ»·Ö¶àÖÓ¾ÍÍê³É¼ÆËã¡£
ͼ8 P&D DEMͼÏñÔ¤´¦ÀíËã·¨¼ÓËÙЧ¹û
GPUÓ¢ÎÄÈ«³ÆGraphic Processing Unit£¬ÖÐÎÄ·ÒëΪ¡°Í¼Ðδ¦ÀíÆ÷¡±¡£
ÓÉÓÚGPU¾ßÓи߲¢Ðнṹ£¨highly parallel structure£©£¬ËùÒÔGPUÔÚ´¦ÀíͼÐÎÊý¾ÝºÍ¸´ÔÓËã·¨·½ÃæÓµÓбÈCPU¸ü¸ßµÄЧÂÊ¡£Í¼1 GPU VS CPUչʾÁËGPUºÍCPUÔڽṹÉϵIJîÒ죬CPU´ó²¿·ÖÃæ»ýΪ¿ØÖÆÆ÷ºÍ¼Ä´æÆ÷£¬ÓëÖ®Ïà±È£¬GPUÓµÓиü¶àµÄALU£¨Arithmetic Logic Unit£¬Âß¼ÔËËãµ¥Ôª£©ÓÃÓÚ
Êý¾Ý´¦Àí£¬¶ø·ÇÊý¾Ý¸ßËÙ»º´æºÍÁ÷¿ØÖÆ£¬ÕâÑùµÄ½á¹¹Êʺ϶ÔÃܼ¯ÐÍÊý¾Ý½øÐв¢Ðд¦Àí¡£CPUÖ´ÐмÆËãÈÎÎñʱ£¬Ò»¸öʱ¿ÌÖ»´¦ÀíÒ»¸öÊý¾Ý£¬²»´æÔÚÕæÕýÒâÒåÉϵIJ¢ÐУ¬¶øGPU¾ßÓжà¸ö´¦ÀíÆ÷ºË£¬ÔÚÒ»¸öʱ¿Ì¿ÉÒÔ²¢Ðд¦Àí¶à¸öÊý¾Ý¡£
GPU²ÉÓÃÁ÷ʽ²¢ÐмÆËãģʽ£¬¿É¶Ôÿ¸öÊý¾Ý½øÐжÀÁ¢µÄ²¢ÐмÆË㣬Ëùν¡°¶ÔÊý¾Ý½øÐжÀÁ¢¼ÆË㡱£¬¼´£¬Á÷ÄÚÈÎÒâÔªËØµÄ¼ÆËã²»ÒÀÀµÓÚÆäËüͬÀàÐÍÊý¾Ý£¬ÀýÈ磬¼ÆËãÒ»¸ö¶¥µãµÄÊÀ½çλÖÃ×ø±ê£¬²»ÒÀÀµÓÚÆäËû¶¥µãµÄλÖ᣶øËùν¡°²¢ÐмÆË㡱ÊÇÖ¸¡°¶à¸öÊý¾Ý¿ÉÒÔͬʱ±»Ê¹Ó㬶à¸öÊý¾Ý²¢ÐÐÔËËãµÄʱ¼äºÍ1¸öÊý¾Ýµ¥¶ÀÖ´ÐеÄʱ¼äÊÇÒ»ÑùµÄ¡±¡£
ͼ2 GPUÉϵľØÕó¼Ó·¨
ͼ3 GPUäÖȾ¹ÜÏß
ÉÏͼ3ÊÇÒ»ÕŵäÐ͵Ŀɱà³ÌGPUµÄÁ÷Ë®ÏßʾÒâͼ£¬ÆäÖпɱà³ÌµÄ¶¥µã´¦ÀíÆ÷(Vertex Shader)¸ºÔð´¦Àí¶¥µãÊý¾ÝÁ÷(°üÀ¨Î»Öá¢ÑÕÉ«£¬¹âÕÕµÈ)¡£ÒòΪ¶¥µã´¦Àí²Ù×÷¶¼ÊÇÔÚ¿Õ¼äµÄ¼¸ºÎµãÉϽøÐУ¬Òò´ËVertex Shader¶ÔÓÚͨÓüÆËã¶øÑԷdz£ÊʺÏÓÚ¼¸ºÎ²Ù×÷ÀàµÄ¼ÆËã¡£¿É±à³ÌƬ¶Î×ÅÉ«Æ÷(Fragment Processor)ÔÚ¼¸ºÎ´¦ÀíºÍת»»Íê³Éºó£¬¸ºÔðΪÿ¸öÏóËØ¡°»¡±ÉÏÕýÈ·µÄÉ«²Ê£¬ËüµÄISA(ϵͳÌåϵ½á¹¹)ÀàËÆÓÚDSP»òSSEÖ¸Á£¬ÓÉFolat4µÄSIMDÖ´Ðе¥ÔªºÍ¼Ä´æÆ÷×é³É£¬´¦ÀíµÄʱºò½ÓÊÜÏÈ´Ó´æ´¢Æ÷ÖÐÈ¡³ö2¸ö´ý¼ÓÔªËØ£¬¸ù¾ÝƬ¶ÎµÄλÖýøÐÐÏòÁ¿Ïà¼Ó£¬ÏòÁ¿ºÍÒÔÑÕÉ«µÄÐÎʽ±»±£´æµ½´æ´¢Æ÷ÖУ¬¿ÉÒÔµ±×÷½á¹ûÊä³ö»òÔÚÏÂÒ»²½ÔËËãÖÐÖ±½Ó±»Ê¹Óᣴ¦ÀíµÄÒ»°ãΪ4¸öµ¥ÔªµÄÏòÁ¿£¬ÒòΪRGBÈýÖÖÉ«²Ê¼ÓÉÏAlphaͨµÀÊý¾ÝÕýºÃÊÇ4¡£Æ¬¶Î×ÅÉ«Æ÷°üº¬µÄTMU(Texture Mapping Unit)µ¥ÔªÄÜÒÔÌùͼµÄÐÎʽ´æÈ¡ÏԴ棬Òò´Ë¿ÉÒÔ±»¿´×÷Ò»¸öÖ»¶Á´æÈ¡½çÃæ¡£
²¹³ä£ºÏÂÃæÎªÎÒ¿´µ½µÄÎÄÕÂÖÐдµÄ¡£¡£ÏȼǼÏÂ
ÏñËØ×ÅÉ«Æ÷¸ºÔðÎÆÀí²ÉÑùºÍÆäËü¸ß¼¶ÖðÏñËØ´¦Àí£¬ÔÚNVIDIA SDK 9.5 µÄʾÀý VideoFilter ÖУ¬ ÔËÓÃÏñËØ×ÅÉ«Æ÷µÄ²¢ÐмÆËãÄÜÁ¦¶ÔÊÓÆµ½øÐжàÖָ߼¶Í¼Ïñ´¦Àí¼¼Êõ¡£ ÖîÈ磺 Ä£ºý¡¢Èñ»¯¡¢ ÊÓÆµ»ìºÏµÈ.
Ïà¹ØÊµÏÖ²½ÖèÈçÏ£º
(1) ´´½¨ÊÓÆµÎÆÀí¹ÜÀí¶ÔÏó£»
(2) ÔØÈëÊÓÆµÎļþ£¬ DirectShow ¸ºÔð¹ÜÀíµ÷¶ÈÊÓÆµÊý¾Ý£»
(3) ¹ØÁª DirectShow ÊÓÆµÊý¾ÝÓë Direct3D ÎÆÀí¶ÔÏó£»
(4) GPU ³õʼ»¯£¬ ¹ØÁª CPU ¶¥µãÊý¾ÝÓë GPU Íⲿ±äÁ¿£¬ ÌØ±ðÊÇ DirectShow ´¦ÀíÍêµÄÖ¡Êý¾ÝÓë GPU ÖеÄÎÆÀíÊý¾Ý¹ØÁª£»
(5)¶¥µã×ÅÉ«Æ÷½øÐÐÎÆÀí×ø±êת»»ºÍÆäËü»ùÓÚ¶¥µãµÄ²¢ÐÐËã·¨£»
(6) ÏñËØ×ÅÉ«Æ÷½øÐÐÎÆÀí²ÉÑùÒÔ¼°ÆäËüÏóËØ¼¶²¢ÐÐËã·¨¡£
|