Question

Je suis en observant un comportement étrange et voudrais savoir si c'est Intel Xeon Phi ou non.

J'ai un petit code d'exemple, fondamentalement, la multiplication de matrice tout le monde le sait (trois boucles for imbriquées).Je décharger le calcul d'un processeur Intel MIC avec OpenMP 4.0 target pragma et la carte de trois matrices map(to:A,B) map(tofrom:C).

Maintenant, ce que j'observe, c'est que pour les petites matrices par exemple1024x1024 la mémoire de transfert a été extrêmement long.Par rapport à la version native (même code, même la parallélisation de la stratégie, tout simplement pas de déchargement) la version de déchargement consomme environ 320ms plus de temps.J'ai fait un warm-up exécuter du code à supprimer l'initialisation de la surcharge.

Par rapport à une Nvidia Tesla K20 où la même quantité de mémoire est copié sans s'en rendre compte 320ms sont très mauvaises.

Y at-il des paramètres d'environnement qui peuvent améliorer la mémoire, la vitesse de transfert?

Un de plus à la question:J'ai activé le déchargement des rapports via le OFFLOAD_REPORT variable d'environnement.Quelles sont les différences entre les deux calendrier résultats présentés dans le rapport:

[Offload] [HOST]  [Tag 5] [CPU Time]        26.995279(seconds)
[Offload] [MIC 0] [Tag 5] [CPU->MIC Data]   3221225480 (bytes)
[Offload] [MIC 0] [Tag 5] [MIC Time]        16.859548(seconds)
[Offload] [MIC 0] [Tag 5] [MIC->CPU Data]   1073741824 (bytes)

Ce sont ces 10 secondes manquantes au MIC Temps (transfert de mémoire?)

Bien qu'une troisième question.Est-il possible d'utilisé épinglé mémoire avec Intel Micros?Si oui, comment?

Était-ce utile?

La solution

Il est peut-être l'allocation de mémoire sur les MIC qui prend du temps.Essayez et séparer les trois sources de frais généraux pour mieux comprendre où le temps passe:

// Device initialization
#pragma offload_transfer target(mic)
...
// Memory allocation and first data transfer
// This is expected to have overhead proportional to the amount of memory allocated
// Doing at least one transfer will speed up subsequent transfers
#pragma offload_transfer target(mic) in(p[0:SIZE] : alloc_if(1) free_if(0))

...
// This transfer should be faster
// For large sizes, approaching 6 GiB/s
#pragma offload_transfer target(mic) in(p[0:SIZE] : alloc_if(0) free_if(0))

Autres conseils

Puisque l'on vous dit "j'ai fait un warm-up exécuter du code à supprimer l'initialisation dessus de la tête", je suppose que vous avez commencé le déchargement de l'exécution, par le déchargement d'un mannequin section.Je me souviens il y a un réglage pour démarrer "on_offload" (par défaut) ou à l'initialisation du programme temps (OFFLOAD_INIT=on_start).De toute façon, il est aussi un fast-chemin dans le moteur DMA.La voie rapide est pris en compte lorsque les tampons (à transférer) sont conformes à la taille de la page.Pour un déchargement de l'application, vous pouvez simplement définir une variable d'environnement avec un seuil de integerB|K|M|G|T où M est méga-octets (par exemple, MIC_USE_2MB_BUFFERS=2M).Ce seuil permet de définir la taille de la mémoire tampon qui est nécessaire avant d'énormes pages sont utilisées.Ainsi, vous obtenez deux choses:énorme des pages et des transferts plus rapides!Cette fonctionnalité est encore un sens, même avec la transparence des pages immenses (THP) étant introduit sur le coprocesseur.

Après tout simplement essayer OFFLOAD_INIT=on_start et MIC_USE_2MB_BUFFERS=0, vous pouvez aligner les tampons sur le accueil côté en conséquence (max.de.vecteur de largeur et de taille ;-).Rappelez-vous, sans plus de déchargement de clauses (LEO;mais ce n'est pas sûr OpenMP 4.0) l'alignement de l'hôte de la mémoire tampon est tout simplement hérité par un déchargement de la section.L'alignement de 2 MO devrait couvrir tout (mais vous pouvez faire votre allocation beaucoup plus intelligent d'éviter de gaspiller des ressources pour les petits tampons).Avec que vous devriez avoir suffisamment de mots-clés pour trouver plus d'information si vous en avez besoin.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top