Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 有没有可能禁用GPU中的某些SMX?_Linux_Cuda_Gpu_Nvidia - Fatal编程技术网

Linux 有没有可能禁用GPU中的某些SMX?

Linux 有没有可能禁用GPU中的某些SMX?,linux,cuda,gpu,nvidia,Linux,Cuda,Gpu,Nvidia,在一个GPU(如P100)中有56条SMs(流式多处理器),不同的SMs可能没有什么相关性。我想知道不同SMs的应用程序性能差异。因此,没有任何方法可以禁用特定GPU的某些SMs。我知道CPU提供了相应的机制,但是已经为GPU找到了一个好的机制。谢谢 没有CUDA提供的方法来禁用SM(流式多处理器)。由于不同程度的困难和行为,使用间接方法尝试这种方法存在一些可能性: 使用CUDA MPS,启动一个完全“占用”一个或多个SMs的应用程序,方法是仔细控制启动的块数和这些块的资源利用率。有了CUDA

在一个GPU(如P100)中有56条SMs(流式多处理器),不同的SMs可能没有什么相关性。我想知道不同SMs的应用程序性能差异。因此,没有任何方法可以禁用特定GPU的某些SMs。我知道CPU提供了相应的机制,但是已经为GPU找到了一个好的机制。谢谢

没有CUDA提供的方法来禁用SM(流式多处理器)。由于不同程度的困难和行为,使用间接方法尝试这种方法存在一些可能性:

  • 使用CUDA MPS,启动一个完全“占用”一个或多个SMs的应用程序,方法是仔细控制启动的块数和这些块的资源利用率。有了CUDA MPS,另一个应用程序可以在同一个GPU上运行,并且内核可以并发运行,前提是对它采取了足够的措施。这可能不允许直接修改测试中的应用程序代码(但需要额外的应用程序启动,以及MPS)。内核持续时间需要“长”,以便在被测应用程序运行时占用SMs

  • 在应用程序代码中,通过从与测试代码相同的应用程序启动“虚拟”内核,有效地重新创建上面第1项中列出的行为,并让虚拟内核“占用”一个或多个SMs。然后,被测试的应用程序可以启动所需的内核。这应该允许在没有MPS的情况下实现内核并发

  • 在应用程序代码中,对于正在测试的内核本身,修改内核块调度行为,使应用程序内核本身仅使用某些SMs,从而有效地减少正在使用的总数


  • 没有CUDA提供的方法来禁用SM(流式多处理器)。由于不同程度的困难和行为,使用间接方法尝试这种方法存在一些可能性:

  • 使用CUDA MPS,启动一个完全“占用”一个或多个SMs的应用程序,方法是仔细控制启动的块数和这些块的资源利用率。有了CUDA MPS,另一个应用程序可以在同一个GPU上运行,并且内核可以并发运行,前提是对它采取了足够的措施。这可能不允许直接修改测试中的应用程序代码(但需要额外的应用程序启动,以及MPS)。内核持续时间需要“长”,以便在被测应用程序运行时占用SMs

  • 在应用程序代码中,通过从与测试代码相同的应用程序启动“虚拟”内核,有效地重新创建上面第1项中列出的行为,并让虚拟内核“占用”一个或多个SMs。然后,被测试的应用程序可以启动所需的内核。这应该允许在没有MPS的情况下实现内核并发

  • 在应用程序代码中,对于正在测试的内核本身,修改内核块调度行为,使应用程序内核本身仅使用某些SMs,从而有效地减少正在使用的总数


  • 这个简单的想法对我来说非常容易理解,例如,如果我们在GPU上实现矩阵乘法,任务映射是由内核和CUDA运行时实现的,我们不关心SM的数量。现在我想知道我们是否在5,10,15,20,25,30上运行相同的矩阵乘法。。。SMs对于某个GPU,应用程序需要多长时间?应用程序性能会随着所使用的SMs号码(设备计算能力)而提高吗?您可以通过使用自己的基于原子操作的实现替换块调度器来近似效果,然后不基于来自的SM id在某些SMs上调度块。但是请注意,这不会像内置的调度程序那样执行,并且会占用额外的寄存器。我曾经在SM 1.x设备上运行我自己的块调度器,这比内置的调度器效率更高。谢谢你的帮助。我想这个解决方案需要我修改我的应用程序。但我想透明地测试性能。因为如果我修改应用程序,不清楚性能是否会因修改而改变,而不是完全受计算能力的限制。您必须运行原始应用程序、启用所有SMs的修改应用程序,以及使用较少SMs的修改应用程序。然后从这三个结果中得出结论。仔细想想,与其运行自己的块调度器,不如在另一个流中运行单独的内核,在定时循环中运行几个块,而不是运行每个请求整个SM的资源的实际内核,这样可能会更简单地阻止一些SMs。这样,您至少不必修改要基准测试的内核。对我来说,这个简单的想法非常容易理解,例如,如果我们在GPU上实现矩阵乘法,任务映射由内核和CUDA运行时实现,我们不关心SM的数量。现在我想知道我们是否在5,10,15,20,25,30上运行相同的矩阵乘法。。。SMs对于某个GPU,应用程序需要多长时间?应用程序性能会随着所使用的SMs号码(设备计算能力)而提高吗?您可以通过使用自己的基于原子操作的实现替换块调度器来近似效果,然后不基于来自的SM id在某些SMs上调度块。但是请注意,这不会像内置的调度程序那样执行,并且会占用额外的寄存器。我曾经在SM 1.x设备上运行我自己的块调度器,这比内置的调度器效率更高。谢谢你的帮助。我想这个解决方案需要我修改我的应用程序。但我想透明地测试性能。因为如果我修改应用程序,不清楚性能是否会因修改而改变,而不是完全受计算能力的限制