最新のリリースでは,このページがまだ翻訳されていません。このページの最新版は英语でご覧になれます。

GPUでのMATLAB关数の実行

gpuArray引数をもつMATLAB关数

MATLAB®および他のツールボックスの数百もの关数はgpuArray引数を渡すことで自动的にGPUで実行されます。

A = gpuArray([1 0 1 -1 -2 0 0 1 -1]);E = EIG(A);

少なくとも1つのgpuArrayをデータ入力引数としてこれらの关数を呼び出すたびに,その关数がGPUで実行されます。关数は结果としてgpuArrayを生成します。ただし,MATLABデータを返すことがより适切である场合を除きます(例:尺寸)。同じ关数呼び出しでgpuArrayとMATLAB配列の両方を使用して,入力を混在させることができます.GPUまたはCPUで关数が実行されるタイミングの详细については,gpuArray入力の特殊な条件を参照してください.GPU対応の关数には,离散フーリエ変换(FFT),行列乘算(mtimes),行列の左除算(mldivide),および数百のその他の关数があります。详细については,GPUをサポートする关数の确认を参照してください。

GPUをサポートする关数の确认

MATLAB关数がGPUをサポートしている场合,その关数のページでGPUの使用に关する追加情报を参照できます。关数ページの最后にある「拡张机能」节の「GPU配列」を参照してください。

ヒント

GPU配列をサポートするすべてのMATLAB关数のフィルター处理されたリストについては,关数リスト(GPU配列)を参照してください。

关数のGPUサポートを阅覧し,制品别にフィルター处理することができます。[ヘルプ]バーで[关数]をクリックします。关数リストの左ペインを参照し,MATLABなどの制品を选択します。左ペイン下部で,[GPU配列]を选択します.GPU対応关数のない制品を选択した场合,[GPU配列]フィルターは使用できません。以下に例を示します。

个々のGPU対応关数の更新の详细については,リリースノートを参照してください。

GPUのチェックまたは选択

GPUがある场合,MATLABは自动的にGPUでの计算に使用します。关数gpuDeviceを使用してGPUをチェックできます。复数のGPUがある场合は,gpuDeviceを使用してその1つを选択するか,并列プールで复数のGPUを使用することができます例。は,GPUの识别と选択并列プールにおける复数のGPUの使用を参照してください.GPUがサポートされていることをチェックするには,リリース别のGPUサポートを参照してください。

深层学习向けに,MATLABは复数のGPUの自动并列处理をサポートしています。MATLABによる复数のGPUでの深层学习(深学习工具箱)を参照してください。

GPUでのMATLAB关数の使用

この例では,GPU対応のMATLAB关数を使用してgpuArrayを处理する方法を说明します。关数gpuDeviceを使用してGPUのプロパティをチェックできます。

gpuDevice
ANS = CUDADevice与属性:名称: '的GeForce GTX 1080' 索引:1个ComputeCapability: '6.1' SupportsDouble:1 Dr金宝appiverVersion:10 ToolkitVersion:10 MaxThreadsPerBlock:1024 MaxShmemPerBlock:49152 MaxThreadBlockSize:[1024 1024 64] MaxGridSize:[2.1475e + 0965535 65535] SIMDWidth:32 TotalMemory:8.5899e + 09 AvailableMemory:6.9342e + 09 MultiprocessorCount:20 ClockRateKHz:1733500 ComputeMode: '默认' GPUOverlapsTransfers:1 KernelExecutionTimeout:1 CanMapHostMemory:1 DeviceSupported金宝app:1 DeviceSelected:1

-15〜15の値を缲り返す行ベクトルを作成します.GPUに転送してgpuArrayを作成するには,关数gpuArrayを使用します。

X = [-15:15 0 -15:15 0 -15:15];gpuX = gpuArray(X);谁是gpuX
名称大小字节类属性gpuX 1x95 4 gpuArray

gpuArrayを处理するには,GPU対応のMATLAB关数を使用します.MATLABは自动的に计算をGPUで実行します。详细については,GPUでのMATLAB关数の実行を参照してください。たとえば,诊断expmMODABS,およびfliplrを组み合わせて使用​​します。

gpuE = expm(DIAG(gpuX,-1))* expm(DIAG(gpuX,1));gpuM = MOD(ABS(gpuE),2);gpuF = gpuM + fliplr(gpuM);

结果をプロットします。

于imagesc(gpuF);颜色表(翻转(灰色));

GPUからデータを転送して收集する必要がある场合は,收集を使用します.CPUへの收集は高コストの可能性があるため,gpuArrayをサポートしていない关数で结果を处理する必要がある场合を除いて,一般的に收集は不要です。

导致=聚集(gpuF);谁是结果
名称大小字节类属性的结果96x96的73728双

GPUを使用したイメージのシャープ化

この例では,gpuArrayとGPU対応关数を使用してイメージをシャープ化する方法を说明します。

关数gpuArrayを使用してイメージを読み取り,GPUに送信します。

图像= gpuArray(imread('peppers.png'));

イメージを双に変换し,畳み込みを适用してグラデーションイメージを取得します。次に,そのグラデーションイメージを使用して,イメージを系数でシャープ化します。

DIMAGE = im2double(图像);梯度= CONVN(DIMAGE,酮(3)./ 9,'相同') -  CONVN(DIMAGE,酮(5)./ 25,'相同');量= 5;锐化= DIMAGE +量*梯度。

元のイメージとシャープ化したイメージをリサイズしてプロットし,比较します。

imshow(imresize([DIMAGE,削尖],0.7));标题(“原始图像(左)与锐化后的图像(右)”);

GPU対応关数を使用したマンデルブロ集合の计算

この例では,GPU対応のMATLAB关数を使用して,有名な数学的构成であるマンデルブロ集合を计算する方法を说明します。关数gpuDeviceを使用してGPUをチェックしてください。

パラメーターを定义します。実数部および虚数部のグリッド上にマンデルブロアルゴリズムが反复されます。次のコードは反复回数,グリッドサイズおよびグリッドの范囲を定义します。

maxIterations = 500;gridSize = 1000;XLIM = [-0.748766713922161,-0.748766707771757];ylim = [0.123640844894862,0.123640851045266];

关数gpuArrayを使用してデータをGPUに転送し,gpuArrayを作成できます。また,GPU上で直接配列を作成することもできます。gpuArraylinspaceなどのデータ配列を作成するために使用できる多くの关数のGPUバージョンを提供します。详细については,GPU配列の直接作成を参照してください。

X = gpuArray.linspace(XLIM(1),XLIM(2),gridSize);Y = gpuArray.linspace(ylim(1),ylim(2),gridSize);谁是Xÿ
名称大小字节类属性X 1x1000的4 gpuArrayŸ1x1000的4 gpuArray

多くのMATLAB关数がgpuArraysをサポートしています.GPU対応关数にgpuArray引数を渡すと,その关数は自动的にGPUで実行されます。详细については,GPUでのMATLAB关数の実行を参照してください。アルゴリズム用に复素数のグリッドを作成し,结果用に配列计数を作成します.GPU上でこの配列を直接作成するには,关数那些を使用し,'gpuArray'を指定します。

[XGRID,YGRID] = meshgrid(X,Y);Z0 =络合物(XGRID,YGRID);计数=酮(大小(Z0),'gpuArray');

次のコードはGPU対応关数を使用してマンデルブロアルゴリズムを実装しています。このコードはgpuArrayを使用しているため,计算はGPU上で実行されます。

Z = Z0;对于N = 0:maxIterations Z = Z * Z + Z 0;内部= ABS(Z)<= 2;计数=计数+内部;结束计数= LOG(计数);

计算の终了后に结果をプロットします。

于imagesc(X,Y,计数)颜色表([射流(); flipud(喷射()); 0 0 0]);轴

GPU上でのスパース配列の处理

次の关数はスパースなgpuArrayをサポートします。

ABS角度BICG BICGSTAB小区CGS classUnderlying连词ctranspose deg2rad诊断结束的expm1找到修复地板全GMRES gpuArray.speye IMAG isaUnderlying isdiag
的isEmpty ISEQUAL isequaln isfloat isinteger ISLOGICAL ISNUMERIC伊斯雷尔issparse istril istriu长度log1p LSQR减去mtimes为ndims nextpow2 NNZ非零范数numel
nzmax PCG加rad2deg真正realsqrt圆形标志尺寸稀疏spfun spones sprandsym开方和时间(。*)跟踪转TRIL triu UMINUS UPLUS

gpuArray入力を指定してを呼び出すか,スパース入力を指定してgpuArrayを呼び出すことでスパースなgpuArrayを作成できます。以下に例を示します。

X = [0 1 0 0 0;0 0 0 0 1]
0 1 0 0 0 0 0 0 0 1
S =稀疏(x)的
(1,2)1(2,5)1
G = gpuArray(S);%G是稀疏gpuArrayGT =转置(克);%GT是一个稀疏gpuArrayf =完全(GT)%f是一个完整的gpuArray
0 0 1 0 0 0 0 0 0 1

スパースなgpuArrayはインデックスをサポートしていません。代わりに,を使用して,配列の非ゼロ要素,およびその行インデックスと列インデックスを特定します。次に,必要な値を置き换えて,スパースなgpuArrayを新规作成します。

GPU上での复素数の处理

GPUで実行される关数の出力が复素数になる可能性がある场合は,明示的に入力引数を复素数として指定しなければなりません。これはgpuArrayや,arrayfunで実行されるコードで呼び出される关数に适用されます。

たとえば,负の要素をもつ可能性のあるgpuArrayを作成する场合は,G = gpuArray(络合物(P))を使用すると,SQRT(G)を正常に実行できます。

あるいは,arrayfunに渡される关数において,Xが実数のベクトルで,かつ一部の要素が负の値をとる场合,SQRT(x)的はエラーを生成します。代わりにSQRT(复合物(X))を呼び出してください。

结果が复素数データからなるgpuArrayで,すべての虚数部がゼロの场合,虚数部は保持されてデータは复素数のままになります。これは分类是真实的などを使用するときに影响する可能性があります。

次の表に,复素数データを返す可能性がある关数を,出力が実数となる入力范囲と共に记载します。

关数 実数出力のための入力范囲
ACOS(x)的 ABS(X)<= 1
ACOSH(x)的 X> = 1
acoth(x)的 ABS(X)> = 1
ACSC(x)的 ABS(X)> = 1
ASEC(x)的 ABS(X)> = 1
asech(x)的 0 <= X <= 1
ASIN(x)的 ABS(X)<= 1
ATANH ABS(X)<= 1
日志(X) X> = 0
log1p(x)的 X> = -1
日志10(x)的 X> = 0
LOG2(x)的 X> = 0
功率(X,Y) X> = 0
reallog(x)的 X> = 0
realsqrt(x)的 X> = 0
SQRT(x)的 X> = 0

gpuArray入力の特殊な条件

GPU対応关数は,データがGPU上にある场合にのみGPU上で実行されます。たとえば,次のコードはデータ,つまり最初の入力がGPU上にあるため,GPU上で実行されます。

>>总和(gpuArray(魔(10)),2);
しかし,次のコードはデータ,つまり最初の入力がGPU上にないため,GPU上で実行されません。
>>总和(魔(10),gpuArray(2));
入力引数gpuArrayに次元,スケーリングファクター,反复回数などの项目が含まれる场合,关数はそれらを收集してCPU上で计算します。关数は,実际のデータ引数がgpuArrayである场合にのみGPU上で実行されます。

谢辞

岩浆は,GPU高速化を利用する线形代数ルーチンのライブラリです.gpuArray用として并行计算工具箱™に実装された线形代数关数は,MAGMAを利用して高いパフォーマンスと精度を実现しています。

参考

|

关连する例

详细