Contenu principal

Cette page a été traduite par traduction automatique. Cliquez ici pour voir la dernière version en anglais.

gather

Transférer un tableau distribué, un objet Composite ou un objet gpuArray vers l'espace de travail local

Description

X = gather(A) peut fonctionner sur les données de tableau suivantes :

  • Sur un gpuArray : transfère les éléments de A du GPU vers l'espace de travail local et les attribue à X .

  • Sur un tableau distribué, en dehors d'une instruction spmd : rassemble les éléments de A des multiples workers vers l'espace de travail local et les affecte à X.

  • Sur un tableau codistribué, à l'intérieur d'une instruction spmd ou d'un job communicant : rassemble les éléments de A et les réplique dans X sur chaque worker.

Vous pouvez appeler gather sur d'autres types de données, tels que les tall arrays (voir gather (tall)). Si le type de données ne prend pas en charge la collecte, alors gather n'a aucun effet.

La collecte de tableaux GPU ou de tableaux distribués peut être coûteuse et n'est généralement pas nécessaire, sauf si vous devez utiliser votre résultat avec des fonctions qui ne prennent pas en charge ces types de tableaux. Pour plus d'informations sur la prise en charge des fonctions, voir Exécuter les fonctions MATLAB sur un GPU ou Exécuter les fonctions MATLAB avec des tableaux distribués .

X = gather(gpuArray(X)), X = gather(distributed(X)) ou X = gather(codistributed(X)) renvoient le tableau d'origine X .

exemple

[X1,X2,...,Xn] = gather(A1,A2,...,An) rassemble plusieurs tableaux A1,A2,...,An dans les sorties correspondantes X1,X2,...,Xn . Le nombre d'arguments d'entrée et de sortie doit correspondre.

X = gather(Cd,destination) convertit un tableau codistribué Cd en un tableau variant X, de sorte que tous les éléments soient contenus dans le worker spécifié par destination, et X est un double vide 0 par 0 sur tous les autres workers.

exemple

[X1,X2,...,Xn] = gather(Cd1,Cd2,...,Cdn,destination) rassemble les tableaux codistribués Cd1,Cd2,...,Cdn dans les sorties correspondantes X1,X2,...,Xn, avec tous les éléments du worker spécifiés par destination . Le nombre d'arguments d'entrée et de sortie doit correspondre.

X = gather(Cp) rassemble tous les éléments du tableau composite Cp des multiples workers dans l'espace de travail local et les affecte au cell array X. Le nombre de cellules dans X dépend du nombre de workers référencés par Cp. (depuis R2023a)

exemple

[X1,X2,...,Xn] = gather(Cp1,Cp2,...,Cpn) rassemble les tableaux composites Cp1,Cp2,...,Cpn dans les cell arrays correspondants X1,X2,...,Xn. Le nombre d'arguments d'entrée et de sortie doit correspondre. (depuis R2023a)

Exemples

réduire tout

Rassemblez les résultats d’une opération GPU dans l’espace de travail MATLAB®.

G = gpuArray(rand(1024,1));
F = sqrt(G);   % Input and output are both gpuArray
W = gather(G); % Return array to workspace
whos
  Name         Size            Bytes  Class       Attributes

  F         1024x1              8192  gpuArray              
  G         1024x1              8192  gpuArray              
  W         1024x1              8192  double                

Rassemblez tous les éléments d’un tableau distribué D sur le client.

n = 10;
parpool('Processes',4);
D = distributed(magic(n)); % Distribute array to workers
M = gather(D)              % Return array to client

Répartissez un carré magique sur vos workers, puis rassemblez toute la matrice sur chaque worker, puis sur le client. Ce code génère l'équivalent de M = magic(n) sur tous les workers et le client.

n = 10;
parpool('Processes',4);
spmd
  Cd = codistributed(magic(n));
  M = gather(Cd); % Gather all elements to all workers
end
S = gather(Cd)   % Gather elements to client

Rassemblez tous les éléments de Cd sur le worker 1, pour les opérations qui ne peuvent pas être effectuées sur des tableaux distribués.

n = 10;
spmd
  Cd = codistributed(magic(n));
  out = gather(Cd,1);
  if spmdIndex == 1
    % Characteristic sum for this magic square:
    characteristicSum = sum(1:n^2)/n;
    % Ensure that the diagonal sums are equal to the 
    % characteristic sum:
    areDiagonalsEqual = isequal ...
      (trace(out),trace(flipud(out)),characteristicSum)
  end
end
Worker 1: 
  
  areDiagonalsEqual =
  
    logical
  
     1
  

Depuis R2023a

Rassemblez tous les éléments du tableau composite Cp stockés sur des workers parallèles sur le client.

Utilisez une instruction spmd pour créer un carré magique sur vos workers et un tableau Composite Cp sur le client.

n = 10
p = parpool('Processes',4);
spmd
    Cp = magic(n);
end

Rassemblez les résultats stockés sur vos workers sur le client.

results = gather(Cp)
results =

  1×4 cell array

    {10×10 double}    {10×10 double}    {10×10 double}    {10×10 double}

Arguments d'entrée

réduire tout

Tableau à collecter, spécifié comme un tableau gpuArray, distributed ou codistributed.

Tableau codistribué à rassembler, spécifié comme un tableau codistributed.

Depuis R2023a

Tableau composite à rassembler, spécifié comme un tableau Composite.

Conseils

Notez que gather assemble le tableau codistribué ou distribué dans les espaces de travail de tous les workers sur lesquels il s'exécute, ou sur le client MATLAB, respectivement, mais pas les deux. Si vous utilisez gather dans une instruction spmd, le tableau collecté est accessible sur le client via son objet Composite correspondant ; voir Access Worker Variables with Composites . Si vous exécutez gather dans un job de communication, vous pouvez renvoyer le tableau collecté au client en tant qu'argument de sortie du job.

Comme la fonction gather nécessite une communication entre tous les workers, vous ne pouvez pas rassembler les données de tous les workers sur un seul worker en plaçant la fonction à l'intérieur d'une instruction conditionnelle telle que if spmdIndex == 1.

Historique des versions

Introduit dans R2006b

développer tout