任务调度系列(2) | 多任务编排篇
0x00 : 前言
上一篇任务调度系列(1) | Celery篇只是简单介绍了单一任务的高并发调度。随着需求的变化,任务类型逐渐丰富,任务之间也出现了相互依赖的情况,经常会需要通过编排不同的任务形成完整的工作流。
上一篇任务调度系列(1) | Celery篇只是简单介绍了单一任务的高并发调度。随着需求的变化,任务类型逐渐丰富,任务之间也出现了相互依赖的情况,经常会需要通过编排不同的任务形成完整的工作流。
上一篇文章CUDA学习系列(2) | 运行篇主要介绍了CUDA的Thread Hierarchy,本文则介绍CUDA另一个重要特性Memory Hierarchy,意思是CUDA Memory有很多种类,这些种类可以根据层次进行划分。事实上,Thread Hierarchy和Memory Hierarchy中的层次性讲的是同一个东西,本质上都是由硬件的层次性决定的。除了显存的层次性外,显存中不同类型的Memory也是眼花缭乱。针对不同的情况选择不同的Memory,会对CUDA的运行有巨大影响。
上一篇主要学习了CUDA编译链接相关知识CUDA学习系列(1) | 编译链接篇。了解编译链接相关知识可以解决很多CUDA编译链接过程中的疑难杂症,比如CUDA程序一启动就crash很有可能就是编译时候Real Architecture版本指定错误。当然,要真正提升CUDA程序的性能,就需要对CUDA本身的运行机制有所了解。顺便提及一下,CUDA有两个非常重要的特性,一个是Thread Hierarchy,主要是说CUDA运行时,其线程是如何分层次执行的,另一个是Memory Hierarchy,主要说CUDA显存是如何分层次进行分配和管理的。这篇文章主要阐述的是CUDA运行机制,也就是CUDA Thread Hierarchy,至于Memory Hierarchy则放在下一篇CUDA学习系列(3) | 显存篇进行详细介绍。
CUDA的编译链接其实只需要看官方文档cuda-compiler-driver-nvcc即可。本文主要是在此官方文档的基础上,对其内容进行了补充说明,并增加了一些我个人的理解。
官方文档中总共有四张图片,我个人认为只要理解透了这四张图片,对CUDA编译链接的理解基本上在日常开发中够用了。下面我会结合这四张图片详细谈谈我对它们的理解。