主要内容

测量和提高GPU性能

测量GPU的性能

测量代码GPU的性能

您的代码的性能的一个重要措施是需要多长时间。时间代码运行在GPU的最好办法是使用gputimeit函数运行一个函数多次平均变异和补偿开销。的gputimeit函数还确保所有操作在GPU完成之前记录的时间。

例如,测量的时间函数计算一个随机矩阵的LU分解一个的大小N——- - - - - -N。要执行该测量,创建一个函数句柄函数和传递函数句柄gputimeit

N = 1000;兰德(N =“gpuArray”);f = @陆()();numOutputs = 2;numOutputs gputimeit (f)

你也可以时间代码使用抽搐toc。然而,为了获得准确的时间信息代码运行在GPU,你必须在调用之前等待操作完成抽搐toc。要做到这一点,您可以使用等待函数与一个gpuDevice对象作为输入。例如,测量时间计算矩阵的LU分解一个使用抽搐,toc,等待

D = gpuDevice;等待(D)抽搐(L U) = lu (A);等待(D) toc

您可以查看代码的每一部分需要多长时间使用MATLAB®分析器。分析代码的更多信息,请参阅配置文件概要文件代码来提高性能。识别性能瓶颈的分析器是有用的在您的代码中但不能准确时间GPU代码,因为它不占重叠执行,这是很常见的,当你使用GPU。

使用这个表格来帮助你决定使用哪一个计时方法。

计时方法 合适的任务 限制
gputimeit 个人时间函数
  • 因为gputimeit函数需要一个函数句柄作为参数,你只能用这个方法一个函数。然而,你的时间的函数可以包含调用其他函数。

  • 因为gputimeit函数执行函数的次数占初始化开销,这种方法通常是不适合时间长时间运行的功能。

抽搐toc 时间多行代码或者整个工作流
  • 确保所有的GPU计算完成后,您必须调用等待在调用之前toc。类似地,如果前面的代码运行在GPU,电话等待在调用之前抽搐

  • 你不能使用抽搐toc测量的执行时间gputimeit

MATLAB分析器 发现性能瓶颈

分析器独立运行的每一行代码,不占重叠执行,这是很常见的,当你使用GPU。你不能使用GPU代码分析器来准确的时间。

GPU基准测试

基准测试是有用的对于识别的优点和缺点GPU和比较不同GPU的性能。测量GPU的性能通过使用这些基准测试:

提高GPU性能

在MATLAB GPU计算的目的是加快您的代码。可以取得更好的性能在GPU上实现编写代码的最佳实践和配置您的GPU硬件。下面讨论了各种方法来提高性能,从最简单的实现。

用这个表来帮助你决定使用哪些方法。

性能改进方法 我什么时候应该使用这种方法? 限制

使用GPU数组——支持GPU数组传递给函数在GPU上运行万博1manbetx您的代码

普遍适用的

函数必须支持万博1manbetxgpuArray输入。支持的MATLAB函数的列表万博1manbetxgpuArray输入,看到运行在GPU MATLAB函数

概要文件和改善你的MATLAB代码——文件代码识别瓶颈

普遍适用的

分析器不能用于准确时间代码运行在GPU中描述测量代码GPU的性能部分。

Vectorize计算——用矩阵和向量操作代替for循环

运行代码时作用于向量或矩阵在for循环

有关更多信息,请参见使用向量化

执行计算的精度——减少使用低精度的计算数据

当小范围的值和较低的精度是可以接受的

某些类型的计算,如线性代数问题,可能需要双精度加工。

使用arrayfun——执行element-wise函数使用一个定制的CUDA®内核

  • 当使用一个函数来执行许多element-wise操作

  • 当一个嵌套函数需要访问其父函数中声明的变量

  • 操作,改变大小或形状的输入或输出数组(,重塑不支持等等)。万博1manbetx

  • 并不是所有支持内置的MATLAB函数。万博1manbetx

支持信息功能和额外的限制,明白了万博1manbetxarrayfun

使用pagefun——在一个调用中执行大批量的矩阵运算

当使用一个函数来执行独立的矩阵运算大量的小型矩阵

并不是所有支持内置的MATLAB函数。万博1manbetx支持信息功能和额外的限制,明白了万博1manbetxpagefun

编写包含CUDA墨西哥人文件的代码——访问GPU的附加的库函数

当你想要访问NVIDIA®库或高级CUDA功能 需要使用CUDA c++编写的代码框架。

为GPU的性能配置您的硬件——充分利用您的硬件

普遍适用的
  • 并不是所有的NVIDIA GPU设备支持苑模式。万博1manbetx

  • GPU设备在太极拳模式仅用于计算,不提供输出显示。

使用GPU数组

如果所有的功能,你的代码使用支持GPU,唯一必要的修改是将输入数据转移到GPU通过调用万博1manbetxgpuArray。支持的MATLAB函数的列表万博1manbetxgpuArray输入,看到运行在GPU MATLAB函数

一个gpuArray对象将数据存储在GPU内存。因为大多数在MATLAB数值函数和其它许多工具箱支持万博1manbetxgpuArray对象,通常你可以在GPU上运行您的代码通过最小的变化。这些功能需要gpuArray输入,GPU执行计算,并返回gpuArray输出。一般来说,这些功能支持相同的参数和数据类型作为标准MAT万博1manbetxLAB函数在CPU上运行。

提示

为了减少开销,限制你的次数主机内存和GPU之间传输数据。创建数组直接在GPU上。看到的更多信息,直接创建GPU数组。同样,只有传输数据从GPU回主机内存使用收集如果需要显示的数据,保存,或使用不支持的代码万博1manbetxgpuArray对象。

形象和提高你的MATLAB代码

将MATLAB代码转换为运行在GPU时,最好先从MATLAB代码已经表现良好。许多指南编写代码在一个CPU上运行也会提高代码运行在GPU的性能。您可以配置您的CPU使用MATLAB代码分析器。行代码,以最可能会在CPU上的时间,你应该改善或考虑到GPU移动使用gpuArray对象。分析代码的更多信息,请参阅概要文件代码来提高性能

由于MATLAB分析器独立运行的每一行代码,它不考虑重叠执行,当你使用GPU中很常见。整个算法使用抽搐tocgputimeit中描述的那样测量代码GPU的性能部分。

Vectorize计算

向量,矩阵和高维操作通常对GPU执行比标量操作因为GPU实现高性能并行计算许多结果。你可以取得更好的性能通过重写循环利用高维操作。修改循环的过程中,scalar-oriented代码使用MATLAB矩阵和向量操作向量化。向量化的信息,请参阅使用向量化使用GPU和矢量化计算提高性能。这张图的使用GPU和矢量化计算提高性能示例显示了性能的增加通过vectorizing函数执行的CPU和GPU。

条形图显示显著减少vectorizing函数执行时间的计算,对CPU和GPU执行。

执行计算的精度

你可以提高代码运行在GPU的性能通过计算在单精度而不是双精度。CPU计算时不提供这种改进从双切换到单精度,因为大多数GPU卡是为图形显示设计的,要求高的单精度性能。更多信息将数据转换为单精度和对单精度数据、执行算术运算浮点数

工作流的典型例子适合GPU的单精度计算包括图像处理和机器学习。然而,其他类型的计算,如线性代数问题,通常需要双精度加工。深度学习工具箱™执行许多操作在默认情况下在单精度。有关更多信息,请参见深度学习精度(深度学习工具箱)

具体的性能改进取决于核心的GPU卡和总数。高端计算卡片通常显示一个小的改进。综合性能概述的NVIDIA GPU卡,包括单-和双精度处理能力,明白了https://en.wikipedia.org/wiki/List_of_Nvidia_graphics_processing_units

提高性能的Element-Wise功能

如果你有以聪明元素函数,通常可以改善其性能,通过调用它arrayfun。的arrayfun函数在GPU以聪明元素MATLAB函数变成一个定制的CUDA内核,从而降低执行操作的开销。你可以经常使用arrayfun与你的代码,即使一个子集arrayfun不支持你的整个代码万博1manbetx。各种element-wise的性能可以改善使用功能arrayfun,包括循环中执行许多element-wise操作的函数或分支代码,和嵌套函数的嵌套函数访问其父函数中声明的变量。

提高性能使用arrayfun Element-Wise MATLAB函数的GPU示例显示了一个基本的应用arrayfun。的使用GPU arrayfun蒙特卡罗模拟示例显示了arrayfun用于提高性能的一个函数执行一个循环内element-wise经营。的对GPU模板操作示例显示了arrayfun用于调用一个嵌套函数访问父函数中声明的变量。

提高性能的操作在小矩阵

如果有一个函数,它执行独立的矩阵运算大量的小矩阵,可以改善其性能,通过调用它pagefun。您可以使用pagefun在GPU并行执行矩阵操作而不是循环矩阵。的提高性能的小型矩阵问题使用pagefun GPU示例显示了如何提高使用性能pagefun当操作在许多小矩阵。

编写包含CUDA墨西哥人文件的代码

而MATLAB提供了一个广泛的图书馆GPU-enabled功能,您可以访问图书馆额外的MATLAB函数没有相似之处。例子包括NVIDIA库如NVIDIA表现原语(NPP)和cuRAND库。可以编译墨西哥人文件写在CUDA c++框架使用mexcuda函数。您可以执行编译后的墨西哥人在MATLAB和从NVIDIA调用函数库文件。为例,展示了如何编写和运行墨西哥人的功能gpuArray输入,并返回gpuArray输出,看到运行包含CUDA MEX-Functions代码

为GPU的性能配置您的硬件

因为许多计算需要大量的内存和大多数系统经常使用GPU图形,使用相同的GPU的计算和图形通常是不切实际的。

在Windows上®系统,GPU设备有两种操作模式:Windows显示驱动模型(WDDM)或特斯拉计算集群(太极拳)。为您的代码实现最佳性能,设置你的设备用于计算使用移行细胞癌模型。看哪个模型你的GPU设备正在使用,检查DriverModel属性返回的gpuDevice函数。为更多的信息交换模型和GPU设备支持移行细胞癌模型,查阅英伟达文档。万博1manbetx

减少的可能性在GPU内存耗尽,不要使用MATLAB GPU在多个实例之一。看到GPU设备是可用的和选择使用gpuDeviceTable函数。

另请参阅

|||||||

相关的话题