版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
GPUArchitectureGPUArchitectureindetailandBinZHOU1•Generalguideline••Generalguideline••Keplerin3~~~~peakinst/sComparetopeakGB/sFindGeneralOptimizationStrategies:GeneralOptimizationStrategies:•FindoutthelimitingfactorinkernelMemorybandwidthbound(memory•Measureeffectivememory/instructionMemory•IftheMemory•Ifthecodeismemory-boundandeffectivememorythroughputismuchlowerthanthepeak•Purpose:accessonlydatathatareabsolutely•MajorReduceredundantaccess:read-onlycache,shared•Ifyou•IfyoufindoutthecodeisinstructionCompute-intensivealgorithmcaneasilybecomememory-boundifnotcarefulTypically,worryaboutinstructionoptimizationaftermemoryandexecutionconfigurationoptimizations•–Uselessinstructionstogetthesamejob•MajorUsehighthroughputinstructions(ex.widerReducewastedinstructions:branchdivergence,reducereplay(conflict),•Whenthecode•Whenthecodeislatency–Boththememoryandinstructionthroughputsarefarfromthe•Latencyhiding:switching–Athreadblockswhenoneoftheoperandsisn’t•Purpose:haveenoughwarpstohide•Majortechniques:increaseactivewarps,increaseCPU-GPUCPU-GPU9MinimizeCPU-GPUdataHost<->devicedataMinimizeCPU-GPUdataHost<->devicedatatransferhasmuchlowerbandwidththanglobalmemoryaccess.16GB/s(PCIex16Gen3)vs250GB/s&3.95Tinst/sSometimesit’sevenbettertorecomputeonGPUMoveCPUcodestoGPUthatdonothaveperformancegainsifitcanreducedatatransferGroupOnelargetransfermuchbetterthanmanysmallonesOverlapmemorytransferwithcomputationRevisitGPURevisitGPUProcessing CopyinputdatafromCPUmemorytoRevisitGPURevisitGPUProcessingCopyinputdatafromCPUmemorytoLoadGPUcodeandexecuteRevisitGPURevisitGPUProcessingCopyinputdatafromCPUmemorytoLoadGPUcodeandexecuteCopyresultsfromGPUmemorytoCPU•𝑇𝑡𝑜𝑡𝑎𝑙•𝑇𝑡𝑜𝑡𝑎𝑙=𝑇𝐻𝑡𝑜𝐷+𝑇𝐸𝑥𝑒𝑐+•MoreStreamStreamStreamStreamStreamsrc1,size,kernel<<<grid,Streamsrc1,size,kernel<<<grid,0,src1,size,StreamStreamcudaMemcpyAsync(dst2,src2,size,kernel<<<grid,block,0,kernel<<<grid,block,0,cudaMemcpyAsync(dst1,src1,size,cudaMemcpyDeviceToHost,KEPLERKEPLERIN•NVIDIA1.31tflops•NVIDIA1.31tflopsdouble3.95tflopssingle250gb/secmemory2,688FunctionalUnits•#1onTop500inNVIDIAGK110-KeplerGK110SMXKeplerGK110SMXvsFermi3xPowergoesNewISAEncoding:NewISAEncoding:255Registersper•Fermilimit:63registersperAcommonFermiperformanceLeadstoexcessive•Kepler:Upto255registersper–EspeciallyhelpfulforFP64•FeatureofKeplerK20GPUstoincreaseapplication•FeatureofKeplerK20GPUstoincreaseapplicationthroughputbyenablingworktobescheduledontotheGPUinparallel•TwowaystotakeCUDAStreams–nowtheyreallyareCUDAProxyforMPI–concurrentCUDAMPIprocessesononeGPUWorkWorkKeplerGridManagementPending&SuspendedStreamQueueWorkWorkKeplerGridManagementPending&SuspendedStreamQueueyemFermiA<<<>>>;B<<<>>>StreamP<<<>>>FermiA<<<>>>;B<<<>>>StreamP<<<>>>;Q<<<>>>StreamHardwareWorkX<<<>>>;Y<<<>>>;StreamFermiallows16-way–––Upto16gridscanrunatButCUDAstreamsmultiplexintoasingleOverlaponlyatstreamA<<<>>>;BStreamP<<<>>>;Q<<<>>>;StreamX<<<>>>;YA<<<>>>;BStreamP<<<>>>;Q<<<>>>;StreamX<<<>>>;Y<<<>>>;MultipleHardwareWorkStreamKeplerallows32-wayOneworkqueueperConcurrencyatfull-streamlevelNointer-streamdependenciesABCDEFCPUSharedABCDEFCPUSharedABCDEFCPUABCDEFCPUSharedABCDEFCPUABCDEFCPUSharedABCDEFCPUABCDEFCPUSharedABCDEFCPUABCDEFCPUSharedABCDEFCPUABCDEFCPUSharedABCDEFCPUABCDEFCPUSharedHyper-Q:SimultaneousCPUCUDASharedClientHyper-Q:SimultaneousCPUCUDASharedClient–ServerSoftwareABCDEFABCDEFDDCFACCBBEFFEBAAEDDDCFACCBBEFFEBAAEDWhatisDynamicTheabilitytolaunchnewWhatisDynamicTheabilitytolaunchnewkernelsfromtheDynamically-basedonrun-timeSimultaneously-frommultiplethreadsatIndependently-eachthreadcanlaunchadifferentFermi:OnlyCPUcangenerateGPUKepler:GPUcangenerateworkforWhatDoesItGPUasCo-Autonomous,DynamicWhatDoesItGPUasCo-Autonomous,DynamicNewTypesof••NewTypesof••RecursiveParallelAlgorithmslikeQuickAdaptiveMeshAlgorithmslikeComputationalallocatedtoregionsofCUDAonFamiliarProgrammingAXBYCZglobalFamiliarProgrammingAXBYCZglobalvoidB(float{X<<<...>>>Y<<<...>>>Z<<<...>>>}intmain()float*data;A<<<...>>>B<<<...>>>C<<<...>>>return0;}CodeLaunchisper-andCodeLaunchisper-anddevicefloatglobalvoidcnp(float{inttid=threadIdx.x;if(tid%2)buf[tid/2]=if(tid==0)launch<<<128,256>>>(buf);}}CodeLaunchisper-anddevicefloatCodeLaunchisper-anddevicefloatglobalvoidcnp(float{inttid=threadIdx.x;if(tid%2)buf[tid/2]=CUDAprimitivesareper-launchedkernelsandCUDAobjectslikestreamsarevisibletoallthreadsinathreadblockcannotbepassedtochildif(tid==0)launch<<<128,256>>>(buf);}}CodeLaunchisper-anddevicefloatCodeLaunchisper-anddevicefloatglobalvoidcnp(float{inttid=threadIdx.x;if(tid%2)buf[tid/2]=CUDAprimitivesareper-Syncincludesallbyanythreadintheif(tid==0)launch<<<128,256>>>(buf);}}CodeLaunchisper-anddevicefloatglobalCodeLaunchisper-anddevicefloatglobalvoidcnp(float{inttid=threadIdx.x;if(tid%2)buf[tid/2]=CUDAprimitivesareper-Syncincludesallbyanythreadintheif(tid==0)launch<<<128,256>>>(buf);}cudaDeviceSynchronize()imply}MemoryCodeLaunchimplies(childseesparentstateMemoryCodeLaunchimplies(childseesparentstateattimeofdevicefloatglobalvoidcnp(float{inttid=threadIdx.x;if(tid%2)buf[tid/2]=if(tid==0)launch<<<128,256>>>(buf);}}MemoryCodeLaunchimplies(childseesparentstateMemoryCodeLaunchimplies(childseesparentstateattimeofSyncimplies(parentseeschildwritesafterdevicefloatglobalvoidcnp(float{inttid=threadIdx.x;if(tid%2)buf[tid/2]=if(tid==0)launch<<<128,256>>>(buf);}}MemoryCodeLaunchimplies(childseesparentstateatMemoryCodeLaunchimplies(childseesparentstateattimeofSyncimplies(parentseeschildwritesafterdevicefloatglobalvoidcnp(float{inttid=threadIdx.x;if(tid%2)buf[tid/2]=Local&sharedmemoryConstantsareif(tid==0)launch<<<128,256>>>(buf);}syncthreads();if(tid==0){cudaMemcpyAsync(data,buf,}ProvidestechnologynecessarytoenablelowerlatencyProvidestechnologynecessarytoenablelowerlatencymemorytransfersbetweenGPUandotherPCIEdeviceswithoutrequiringcustomhardware.••APIanddocumentationfordevicedriver•AvailableonLinux•SupportedonKeplerQuadroandTelsaNVIDIAGPUDirect™NowSupportsNVIDIAGPUDirect™NowSupportsMorethreadsareMorethreadsare•••2-3xthroughputperclockperMemorybandwidthBiggerSMhavebiggerMorethreadare•Ifyoualreadylaunchedenoughthreads,thefollowingenhancementonkeplerMorethreadare•Ifyoualreadylaunchedenoughthreads,thefollowingenhancementonkeplerwillensureenoughactivewarpsonSMs.2xregisterfileoneach•–––E.g.63registersperthread,blockDimInFermi16activewarpsInKepler32active•2xsimultaneousblocksper–E.g.16registersperthread,blockDim–InFermi96*8/32=24active–Inkepler96*16/32=46active•Ifonekernelcan’tIfonekernelcan’tlaunchenough•ConcurrentGK110allowsupto32concurrentkernelstoHyper-Using
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2027届新疆乌鲁木齐市天山区三年级数学第一学期期末综合测试试题含解析
- 2027届黑龙江省绥化市肇东市三上数学期末学业水平测试模拟试题含解析
- 2027届广东省湛江市雷阳实验学校三年级数学第一学期期末调研模拟试题含解析
- 2027届山东省临沂市平邑县丰阳镇中心校四年级数学第一学期期末综合测试模拟试题含解析
- GB-T 47758-2026《模具随形冷却镶件》
- 2026中国涡流泵市场替代品威胁与产品创新应对策略
- 2026乳制品市场需求变化趋势与融资布局调研分析报告
- 2026Fast芯片组行业专利布局与知识产权保护研究报告
- 2026中国印刷包装行业智能化生产与数字化管理研究评估分析报告
- 2026中国渔业认证行业市场深度调研及发展趋势和投资前景预测研究报告
- 2025年教师招聘考试(心理健康教育)(中小学)综合能力测试题及答案
- 2026新版生产安全事故应急预案+两个报告
- 2026年消化系统内镜报告规范解读手册
- 2026年南昌县医疗健康集团县120急救中心自主招聘16人考试备考题库及答案详解
- 2026年CCAA国家注册审核员考试(有机产品认证基础)复习题及答案
- 2025年国家文物保护工程监理师考试试卷(附答案)
- 2026内蒙古工程建设行业供需现状调研及战略发展规划分析报告
- 2026年人教部编版新教材语文四年上册全册教案设计(含教学计划)
- 药剂师招聘笔试题试题集详解
- YY/T 0474-2025外科植入物聚丙交酯均聚物、共聚物和共混物体外降解试验
- 2026年宁德时代电池研发岗校招笔试电化学原理计算题解析
评论
0/150
提交评论