Tout le monde sait depuis longtemps que sur les cartes vidĂ©o, vous pouvez non seulement jouer Ă des jouets, mais aussi effectuer des choses qui ne sont pas liĂ©es aux jeux, par exemple, former un rĂ©seau de neurones, vous souvenir de la crypto-monnaie ou effectuer des calculs scientifiques. Comment cela s'est passĂ©, vous pouvez le lire ici , mais je voulais aborder la question de savoir pourquoi le GPU peut ĂȘtre intĂ©ressant pour le programmeur moyen (non liĂ© Ă GameDev) comment aborder le dĂ©veloppement sur le GPU sans y consacrer beaucoup de temps, dĂ©cider si regardez dans cette direction, et " dĂ©terminez sur vos doigts" quel profit vous pouvez obtenir. L'article a Ă©tĂ© Ă©crit sur la base de ma prĂ©sentation en HighLoad ++. Il aborde principalement les technologies proposĂ©es par NVIDIA. Je n'ai aucun but de faire la publicitĂ© de produits, je les donne simplement Ă titre d'exemple, et Ă coup sĂ»r, quelque chose de similaire peut ĂȘtre trouvĂ© chez les fabricants concurrents.Pourquoi compter sur le GPU?
Deux processeurs peuvent ĂȘtre comparĂ©s selon diffĂ©rents critĂšres, les plus populaires Ă©tant probablement la frĂ©quence et le nombre de cĆurs, la taille des caches, etc., mais au final, nous nous intĂ©ressons au nombre d'opĂ©rations qu'un processeur peut effectuer par unitĂ© de temps, de quel type d'opĂ©ration il s'agit, mais une question distincte Une mĂ©trique commune est le nombre d'opĂ©rations en virgule flottante par seconde - flops. Et lorsque nous voulons comparer le chaud au doux, et dans notre cas le GPU avec le CPU, cette mĂ©trique est trĂšs pratique.Le graphique ci-dessous montre la croissance de ces mĂȘmes flops au fil du temps pour les processeurs et les cartes vidĂ©o.(Les donnĂ©es sont collectĂ©es Ă partir de sources ouvertes, il n'y a pas de donnĂ©es pour 2019-20 ans, car tout n'est pas si beau lĂ -bas, mais les GPU gagnent toujours)Eh bien, c'est tentant, n'est-ce pas? Nous dĂ©plaçons tous les calculs du CPU vers le GPU et obtenons huit fois les meilleures performances!Mais, bien sĂ»r, tout n'est pas si simple. Vous ne pouvez pas tout prendre et tout transfĂ©rer sur le GPU, pourquoi, nous parlerons plus loin.Architecture GPU et sa comparaison avec le CPU
J'apporte Ă beaucoup une image familiĂšre de l'architecture du CPU et des Ă©lĂ©ments de base:CPU CoreQu'est-ce qui est si spĂ©cial? Un cĆur et un tas de blocs auxiliaires.Voyons maintenant l'architecture GPU:GPU CoreUne carte vidĂ©o a beaucoup de cĆurs de traitement, gĂ©nĂ©ralement plusieurs milliers, mais ils sont combinĂ©s en blocs; pour les cartes vidĂ©o NVIDIA, gĂ©nĂ©ralement 32 chacune, et ont des Ă©lĂ©ments communs, y compris et registres. L'architecture du noyau GPU et des Ă©lĂ©ments logiques est beaucoup plus simple que sur le CPU, Ă savoir, il n'y a pas de prefetchers, de prĂ©dicteurs de brunch et bien plus encore.Eh bien, ce sont les points clĂ©s de la diffĂ©rence dans l'architecture du CPU et du GPU, et, en fait, ils imposent des restrictions ou, inversement, ouvrent les possibilitĂ©s de ce que nous pouvons lire efficacement sur le GPU.Je n'ai pas mentionnĂ© un autre point important, gĂ©nĂ©ralement la carte vidĂ©o et le processeur ne «fouinent» pas entre eux et n'Ă©crivent pas de donnĂ©es sur la carte vidĂ©o et ne lisent pas le rĂ©sultat - ce sont des opĂ©rations distinctes et peuvent se rĂ©vĂ©ler ĂȘtre un «goulot d'Ă©tranglement» dans votre systĂšme, un graphique du temps de pompage par rapport Ă la taille les donnĂ©es sont donnĂ©es plus loin dans l'article.Limitations et fonctionnalitĂ©s du GPU
Quelles limitations cette architecture impose-t-elle aux algorithmes exĂ©cutables:- Si nous calculons sur un GPU, alors nous ne pouvons pas sĂ©lectionner un seul cĆur, un bloc entier de cĆurs sera allouĂ© (32 pour NVIDIA).
- Tous les cĆurs exĂ©cutent les mĂȘmes instructions, mais avec des donnĂ©es diffĂ©rentes (nous en parlerons plus tard), ces calculs sont appelĂ©s Single-Instruction-Multiple-Data ou SIMD (bien que NVIDIA introduise son raffinement).
- En raison de l'ensemble relativement simple de blocs logiques et de registres généraux, le GPU n'aime vraiment pas la ramification, et en fait la logique complexe dans les algorithmes.
Quelles opportunitĂ©s ouvre-t-il:- En fait, l'accĂ©lĂ©ration de ces mĂȘmes calculs SIMD. L'exemple le plus simple est l'ajout Ă©lĂ©mentaire de matrices, et analysons-le.
Réduction des algorithmes classiques à la représentation SIMD
Transformation
Nous avons deux tableaux, A et B, et nous voulons ajouter un élément du tableau B à chaque élément du tableau A. Ci-dessous est un exemple en C, bien que j'espÚre qu'il sera clair pour ceux qui ne parlent pas ce langage:void func(float *A, float *B, size)
{
for (int i = 0; i < size; i++)
{
A[i] += B[i]
}
}
Bouclage classique des éléments dans une boucle et exécution linéaire.Voyons maintenant à quoi ressemblera ce code pour le GPU:void func(float *A, float *B, size)
{
int i = threadIdx.x;
if (i < size)
A[i] += B[i]
}
Et ici, c'est dĂ©jĂ intĂ©ressant, la variable threadIdx est apparue, que nous ne semblions dĂ©clarer nulle part. Oui, son systĂšme nous fournit. Imaginez que dans l'exemple prĂ©cĂ©dent, le tableau se compose de trois Ă©lĂ©ments et que vous souhaitez l'exĂ©cuter dans trois threads parallĂšles. Pour ce faire, vous devez ajouter un autre paramĂštre - le numĂ©ro d'index ou de flux. C'est ce que la carte vidĂ©o fait pour nous, bien qu'elle passe l'index en tant que variable statique et peut fonctionner avec plusieurs dimensions Ă la fois - x, y, z.Autre nuance, si vous souhaitez dĂ©marrer un grand nombre de flux parallĂšles Ă la fois, les flux devront ĂȘtre divisĂ©s en blocs (une caractĂ©ristique architecturale des cartes vidĂ©o). La taille de bloc maximale dĂ©pend de la carte vidĂ©o, et l'indice de l'Ă©lĂ©ment pour lequel nous effectuons les calculs devra ĂȘtre obtenu comme suit:int i = blockIdx.x * blockDim.x + threadIdx.x;
En consĂ©quence, ce que nous avons: beaucoup de threads exĂ©cutĂ©s en parallĂšle qui exĂ©cutent le mĂȘme code, mais avec des indices diffĂ©rents, et, par consĂ©quent, des donnĂ©es, c'est-Ă -dire le mĂȘme SIMD.C'est l'exemple le plus simple, mais si vous souhaitez travailler avec le GPU, vous devez amener votre tĂąche sous la mĂȘme forme. Malheureusement, ce n'est pas toujours possible et dans certains cas peut faire l'objet d'une thĂšse de doctorat, mais nĂ©anmoins, les algorithmes classiques peuvent encore ĂȘtre amenĂ©s Ă cette forme.AgrĂ©gation
Voyons maintenant Ă quoi ressemblera l'agrĂ©gation castĂ©e en reprĂ©sentation SIMD: Nous avons un tableau de n Ă©lĂ©ments. Ă la premiĂšre Ă©tape, nous dĂ©marrons n / 2 threads et chaque thread ajoute deux Ă©lĂ©ments, Ă savoir en une seule itĂ©ration, nous additionnons la moitiĂ© des Ă©lĂ©ments du tableau. Et puis dans la boucle, nous rĂ©pĂ©tons la mĂȘme chose pour le tableau nouvellement créé, jusqu'Ă ce que nous agrĂ©gions les deux derniers Ă©lĂ©ments. Comme vous pouvez le voir, plus la taille du tableau est petite, moins nous pouvons dĂ©marrer de threads parallĂšles, c'est-Ă -dire sur un GPU, il est logique d'agrĂ©ger des tableaux d'une taille suffisamment grande. Un tel algorithme peut ĂȘtre utilisĂ© pour calculer la somme des Ă©lĂ©ments (en passant, n'oubliez pas le dĂ©bordement possible du type de donnĂ©es avec lequel vous travaillez), rechercher le maximum, le minimum ou simplement la recherche.Tri
Mais le tri semble dĂ©jĂ beaucoup plus compliquĂ©.Les deux algorithmes de tri les plus populaires sur le GPU sont:Mais radix-sort est toujours utilisĂ© plus souvent, et une implĂ©mentation prĂȘte pour la production peut ĂȘtre trouvĂ©e dans certaines bibliothĂšques. Je n'analyserai pas en dĂ©tail le fonctionnement de ces algorithmes; ceux qui sont intĂ©ressĂ©s peuvent trouver une description de radix-sort sur https://www.codeproject.com/Articles/543451/Parallel-Radix-Sort-on-the-GPU-using-Cplusplus- AMP et https://stackoverflow.com/a/26229897Mais l'idĂ©e est que mĂȘme un algorithme non linĂ©aire tel que le tri peut ĂȘtre rĂ©duit Ă une vue SIMD.Et maintenant, avant de regarder les vrais chiffres qui peuvent ĂȘtre obtenus Ă partir du GPU, essayons de comprendre comment programmer pour ce miracle de la technologie?OĂč commencer
Les deux technologies les plus courantes pouvant ĂȘtre utilisĂ©es pour la programmation sous le GPU:OpenCL est une norme prise en charge par la plupart des fabricants de cartes vidĂ©o, notamment et sur les appareils mobiles, le code Ă©crit en OpenCL peut Ă©galement ĂȘtre exĂ©cutĂ© sur le CPU.Vous pouvez utiliser OpenCL Ă partir de C / C ++, il existe des liants vers d'autres langages.Pour OpenCL, j'ai le plus apprĂ©ciĂ© le livre OpenCL en action . Il dĂ©crit Ă©galement diffĂ©rents algorithmes sur le GPU, notamment Tri bitonique et tri Radix.CUDA est la technologie et le SDK exclusifs de NVIDIA. Vous pouvez Ă©crire en C / C ++ ou utiliser des liaisons vers d'autres langages.Comparer OpenCL et CUDA n'est pas correct, car l'un est la norme, l'autre est l'ensemble du SDK. NĂ©anmoins, beaucoup de gens choisissent CUDA pour le dĂ©veloppement de cartes vidĂ©o, malgrĂ© le fait que la technologie est propriĂ©taire, bien que gratuite et ne fonctionne que sur les cartes NVIDIA. Il y a plusieurs raisons Ă cela:Les particularitĂ©s incluent le fait que CUDA est livrĂ© avec son propre compilateur, qui peut Ă©galement compiler du code C / C ++ standard.Le livre CUDA le plus complet que j'ai rencontrĂ© Ă©tait Professional CUDA C Programming , bien qu'il soit dĂ©jĂ un peu dĂ©passĂ©, il aborde nĂ©anmoins de nombreuses nuances techniques de programmation pour les cartes NVIDIA.Mais que faire si je ne veux pas passer quelques mois Ă lire ces livres, Ă©crire mon propre programme pour une carte vidĂ©o, tester et dĂ©boguer, puis dĂ©couvrir que ce n'est pas pour moi? Comme je l'ai dit, il existe un grand nombre de bibliothĂšques qui cachent la complexitĂ© du dĂ©veloppement sous le GPU: XGBoost, cuBLAS, TensorFlow, PyTorch et autres, nous considĂ©rerons la bibliothĂšque de poussĂ©e, car il est moins spĂ©cialisĂ© que les autres bibliothĂšques ci-dessus, mais en mĂȘme temps il implĂ©mente des algorithmes de base, par exemple, le tri, la recherche, l'agrĂ©gation et, avec une forte probabilitĂ©, il peut ĂȘtre applicable Ă vos tĂąches.Thrust est une bibliothĂšque C ++ qui vise Ă "remplacer" les algorithmes STL standard par des algorithmes basĂ©s sur GPU. Par exemple, le tri d'un tableau de nombres Ă l'aide de cette bibliothĂšque sur une carte vidĂ©o ressemblerait Ă ceci:thrust::host_vector<DataType> h_vec(size);
std::generate(h_vec.begin(), h_vec.end(), rand);
thrust::device_vector<DataType> d_vec = h_vec;
thrust::sort(d_vec.begin(), d_vec.end());
thrust::copy(d_vec.begin(), d_vec.end(), h_vec.begin());
(n'oubliez pas que l'exemple doit ĂȘtre compilĂ© par un compilateur de NVIDIA)Comme vous pouvez le voir, thrust :: sort est trĂšs similaire Ă un algorithme similaire de STL. Cette bibliothĂšque cache de nombreuses difficultĂ©s, en particulier le dĂ©veloppement d'un sous-programme (plus prĂ©cisĂ©ment, le noyau), qui sera exĂ©cutĂ© sur la carte vidĂ©o, mais en mĂȘme temps prive de flexibilitĂ©. Par exemple, si nous voulons trier plusieurs gigaoctets de donnĂ©es, il serait logique d'envoyer une donnĂ©e Ă la carte pour commencer le tri, et pendant le tri, envoyez plus de donnĂ©es Ă la carte. Cette approche est appelĂ©e masquage de latence et permet une utilisation plus efficace des ressources de mappage de serveur, mais, malheureusement, lorsque nous utilisons des bibliothĂšques de haut niveau, ces opportunitĂ©s restent cachĂ©es. Mais pour le prototypage et la mesure des performances, ce sont les mĂȘmes, en particulier avec la poussĂ©e, vous pouvez mesurer les frais gĂ©nĂ©raux fournis par le transfert de donnĂ©es.J'ai Ă©crit une petite rĂ©fĂ©rence en utilisant cette bibliothĂšque, qui exĂ©cute plusieurs algorithmes populaires avec diffĂ©rentes quantitĂ©s de donnĂ©es sur le GPU, voyons quels sont les rĂ©sultats.RĂ©sultats de l'algorithme GPU
Pour tester le GPU, j'ai pris une instance dans AWS avec une carte vidéo Tesla k80, ce n'est pas la carte serveur la plus puissante à ce jour (la Tesla v100 la plus puissante), mais la plus abordable et embarquée:- 4992 CUDA Kernels
- 24 Go de mémoire
- 480 Gb / s - bande passante mémoire
Et pour les tests sur le CPU, j'ai pris une instance avec un processeur Intel Xeon CPU E5-2686 v4 @ 2.30GHzTransformation
Temps d'exĂ©cution de la transformation sur le GPU et le CPU en msComme vous pouvez le voir, la transformation habituelle des Ă©lĂ©ments du tableau est approximativement la mĂȘme dans le temps, Ă la fois sur le GPU et sur le CPU. Et pourquoi? Parce que le surcoĂ»t pour l'envoi de donnĂ©es vers la carte et le dos absorbe toute l'augmentation des performances (nous parlerons du surcoĂ»t sĂ©parĂ©ment), et il y a relativement peu de calculs sur la carte. De plus, n'oubliez pas que les processeurs prennent Ă©galement en charge les instructions SIMD et que les compilateurs dans des cas simples peuvent les utiliser efficacement. Voyons maintenant l'efficacitĂ© de l'agrĂ©gation sur le GPU.AgrĂ©gation
Temps d'exĂ©cution d'agrĂ©gation sur GPU et CPU en msDans l'exemple d'agrĂ©gation, nous constatons dĂ©jĂ une augmentation significative des performances avec une augmentation du volume de donnĂ©es. Il convient Ă©galement de prĂȘter attention au fait que nous pompons une grande quantitĂ© de donnĂ©es dans la mĂ©moire de la carte, et qu'une seule valeur agrĂ©gĂ©e est reprise, c'est-Ă -dire Les frais gĂ©nĂ©raux pour le transfert de donnĂ©es de la carte vers la RAM sont minimes.Passons Ă l'exemple le plus intĂ©ressant - le tri.Tri
Temps de tri vers le GPU et le CPU en msMalgré le fait que nous envoyons l'intégralité du tableau de données à la carte vidéo et vice versa, le tri vers le GPU 800 Mo de données est environ 25 fois plus rapide que sur le processeur.Frais généraux de transfert de données
Comme le montre l'exemple de transformation, il n'est pas toujours Ă©vident que le GPU sera efficace mĂȘme dans les tĂąches qui sont bien parallĂšles. La raison en est un surcoĂ»t pour le transfert de donnĂ©es de la RAM de l'ordinateur vers la mĂ©moire de la carte vidĂ©o (dans les consoles de jeu, en passant, la mĂ©moire est partagĂ©e entre le CPU et le GPU, et il n'est pas nĂ©cessaire de transfĂ©rer des donnĂ©es). Une des caractĂ©ristiques d'une carte vidĂ©o est la bande passante mĂ©moire ou bande passante mĂ©moire, qui dĂ©termine la bande passante thĂ©orique de la carte. Pour Tesla k80, elle est de 480 Go / s, pour Tesla v100, elle est dĂ©jĂ de 900 Go / s. De plus, la version PCI Express et l'implĂ©mentation de la façon dont vous transfĂ©rerez les donnĂ©es sur la carte affecteront le dĂ©bit, par exemple, cela peut ĂȘtre fait dans plusieurs flux parallĂšles.Examinons les rĂ©sultats pratiques obtenus pour la carte graphique Tesla k80 dans le cloud Amazon:Temps de transfert des donnĂ©es vers le GPU, tri et transfert des donnĂ©es vers la RAM en msHtoD - transfert des donnĂ©es vers la carte vidĂ©o
GPU Exécution - tri sur la carte vidéo
DtoH - copie des donnĂ©es de la carte vidĂ©o vers la RAMLa premiĂšre chose Ă noter est que la lecture des donnĂ©es de la carte vidĂ©o est plus rapide que Ă©crivez-les lĂ -bas.La seconde - lorsque vous travaillez avec une carte vidĂ©o, vous pouvez obtenir une latence de 350 microsecondes, et cela peut dĂ©jĂ ĂȘtre suffisant pour certaines applications Ă faible latence.Le graphique ci-dessous montre une surcharge pour plus de donnĂ©es:Temps de transfert des donnĂ©es vers le GPU, tri et transfert des donnĂ©es vers la RAM en msUtilisation du serveur
La question la plus courante est de savoir en quoi une carte vidéo de jeu diffÚre d'une carte serveur? Selon les caractéristiques, ils sont trÚs similaires, mais les prix diffÚrent considérablement.Les principales différences entre le serveur (NVIDIA) et la carte de jeu:- Garantie du fabricant (la carte de jeu n'est pas conçue pour une utilisation sur serveur)
- ProblĂšmes de virtualisation possibles pour une carte graphique grand public
- Disponibilité du mécanisme de correction d'erreur sur la carte serveur
- Le nombre de threads parallĂšles (pas les cĆurs CUDA) ou la prise en charge d'Hyper-Q, qui vous permet de travailler avec la carte Ă partir de plusieurs threads sur le CPU, par exemple, tĂ©lĂ©charger des donnĂ©es sur la carte Ă partir d'un thread et dĂ©marrer les calculs Ă partir d'un autre
Ce sont peut-ĂȘtre les principales diffĂ©rences importantes que j'ai trouvĂ©es.Multithreading
AprĂšs avoir compris comment exĂ©cuter l'algorithme le plus simple sur la carte vidĂ©o et quels rĂ©sultats peuvent ĂȘtre attendus, la prochaine question logique est de savoir comment la carte vidĂ©o se comportera lors du traitement de plusieurs demandes parallĂšles. En rĂ©ponse, j'ai deux graphiques de calcul sur le GPU et un processeur Ă 4 et 32 ââcĆurs:Temps nĂ©cessaire pour effectuer des calculs mathĂ©matiques sur le GPU et le CPU avec des matrices de 1000 x 60 en ms. Ce graphique effectue des calculs avec des matrices de 1000 x 60 Ă©lĂ©ments. Les calculs sont lancĂ©s Ă partir de plusieurs flux de programme, un flux sĂ©parĂ© est créé pour le GPU pour chaque flux CPU (le trĂšs Hyper-Q est utilisĂ©). Comme vous pouvez le voir, le processeur gĂšre trĂšs bien cette charge, tandis que la latence pour une demande par GPU augmente considĂ©rablement avec une augmentation du nombre de demandes parallĂšles.Le temps pour effectuer des calculs mathĂ©matiques sur le GPU et le CPU avec des matrices 10 000 x 60 en ms.Sur le deuxiĂšme graphique, les mĂȘmes calculs, mais avec des matrices 10 fois plus longues, et le GPU se comporte beaucoup mieux sous une telle charge. Ces graphiques sont trĂšs indicatifs, et nous pouvons conclure: le comportement sous charge dĂ©pend de la nature de la charge elle-mĂȘme. Un processeur peut Ă©galement gĂ©rer les calculs matriciels assez efficacement, mais dans une certaine mesure. Pour une carte vidĂ©o, il est caractĂ©ristique que pour une petite charge de calcul, les performances chutent de façon approximativement linĂ©aire. Avec une augmentation de la charge et du nombre de threads parallĂšles, la carte vidĂ©o s'adapte mieux. Il est difficile de supposer comment le GPU se comportera dans diverses situations, mais comme vous pouvez le voir, dans certaines conditions, une carte serveur peut traiter les demandes de plusieurs flux parallĂšles assez efficacement.Nous discuterons de quelques autres questions que vous pourriez avoir si vous dĂ©cidez toujours d'utiliser le GPU dans vos projets.Limite de ressources
Comme nous l'avons dĂ©jĂ dit, les deux principales ressources d'une carte vidĂ©o sont le calcul des cĆurs et de la mĂ©moire.Par exemple, nous avons plusieurs processus ou conteneurs utilisant une carte vidĂ©o, et nous aimerions pouvoir partager la carte vidĂ©o entre eux. Malheureusement, il n'y a pas d'API simple pour cela. NVIDIA propose la technologie vGPU , mais je n'ai pas trouvĂ© la carte Tesla k80 dans la liste des cartes prises en charge, et d'aprĂšs ce que je peux comprendre de la description, la technologie est plus axĂ©e sur les Ă©crans virtuels que sur les calculs. AMD propose peut-ĂȘtre quelque chose de plus appropriĂ©.Par consĂ©quent, si vous prĂ©voyez d'utiliser le GPU dans vos projets, vous devez vous fier au fait que l'application utilisera exclusivement la carte vidĂ©o, ou vous contrĂŽlerez par programme la quantitĂ© de mĂ©moire allouĂ©e et le nombre de cĆurs utilisĂ©s pour les calculs.Conteneurs et GPU
Si vous avez déterminé la limite de ressources, alors la question logique suivante: que faire s'il y a plusieurs cartes vidéo sur le serveur?Encore une fois, vous pouvez décider au niveau de l'application quel GPU il utilisera.Les conteneurs Docker sont un autre moyen plus pratique. Vous pouvez utiliser des conteneurs réguliers, mais NVIDIA propose ses conteneurs NGC , avec des versions optimisées de divers logiciels, bibliothÚques et pilotes. Pour un conteneur, vous pouvez limiter le nombre de GPU utilisés et leur visibilité sur le conteneur. Les frais généraux liés à l'utilisation des conteneurs sont d'environ 3%.Travailler en cluster
Une autre question, que faire si vous souhaitez effectuer une tĂąche sur plusieurs GPU au sein du mĂȘme serveur ou cluster?Si vous avez choisi une bibliothĂšque similaire Ă Thrust ou une solution de niveau infĂ©rieur, la tĂąche devra ĂȘtre rĂ©solue manuellement. Les cadres de haut niveau, tels que pour l'apprentissage automatique ou les rĂ©seaux de neurones, prennent gĂ©nĂ©ralement en charge la possibilitĂ© d'utiliser plusieurs cartes prĂȘtes Ă l'emploi.De plus, je voudrais noter que, par exemple, NVIDIA propose une interface pour l'Ă©change direct de donnĂ©es entre les cartes - NVLINK , qui est nettement plus rapide que PCI Express. Et il existe une technologie pour l'accĂšs direct Ă la mĂ©moire de la carte Ă partir d'autres pĂ©riphĂ©riques PCI Express - GPUDirect RDMA , incl. et rĂ©seau .Recommandations
Si vous envisagez d'utiliser le GPU dans vos projets, le GPU vous convient probablement si:- Votre tĂąche peut ĂȘtre rĂ©duite Ă une vue SIMD
- Il est possible de charger la plupart des données sur la carte avant les calculs (cache)
- Le défi passe par l'informatique intensive
Vous devez Ă©galement poser des questions Ă l'avance:- Combien de requĂȘtes parallĂšles seront
- Quelle latence attendez-vous
- Avez-vous besoin d'une carte pour votre charge? Avez-vous besoin d'un serveur avec plusieurs cartes ou d'un cluster de serveurs GPU
C'est tout, j'espÚre que le matériel vous sera utile et vous aidera à prendre la bonne décision!Références
Benchmark et résultats sur github - https://github.com/tishden/gpu_benchmark/tree/master/cudaEn plus du sujet, un enregistrement du rapport «GPU Databases - Architecture, Performance and Prospects for Use»NVIDIA NGC Containers Webinar Webinaires - http : //bit.ly/2UmVIVt ou http://bit.ly/2x4vJKF