可否介绍一下,cuda对于任务并行的支持情况?如果想实现任务的并行,目前有哪些方法?
NVIDIA高级系统架构师易成:
GPU的并行包括thead级别,即GPU线程的并行;更高层次是kernel级别的并行。Thead并行体现在,我们在执行一段程序代码时,可以使用单指令多线程(SIMT)来管理和执行线程,支持成百上千的线程并发执行,这里只有一个kernel在运行。如果要实现多个kernel并行,可以通过stream来实现了,可以通过MPS多进程服务,以前叫Hyper-Q,来实现多个stream的调度,不同的stream实现不同的任务。如果只是想在一个GPU上运行多个GPU应用,比如同时提交amber,Gromacs作业,这个也是可以的。如果GPU的利用率不高,这样做没问题,如果GPU利用率已经是100%,运行多个作业会导致计算速度变慢。如果使用slurm调度,它只会给空闲的GPU资源分配任务。
问题来源