Compute Birleşik Cihaz Mimarisi

Compute Birleşik Cihaz Mimarisi CUDA.png görüntüsünün açıklaması.

Bilgi
tarafından geliştirildi Nvidia
İlk versiyon 23 Haziran 2007
Son sürüm 11.2.2 (Mart 2021)
İşletim sistemi Microsoft Windows , Linux ve macOS
Tür Programlama dili
Lisans ücretsiz
İnternet sitesi geliştirici.nvidia.com/cuda-zone

CUDA (başlangıçta Compute Unified Device Architecture'ın kısaltması ), GPGPU ( Grafik İşlem Birimlerinde Genel Amaçlı Hesaplama ) teknolojisidir, yani işlemci çekirdeği (CPU) yerine genel hesaplamalar yapmak için bir grafik işlemcisi (GPU) kullanır . Gerçekten de, bu işlemciler olağan olarak 1 'de çalışan bin işlem devrelerinin düzen ihtiva  GHz 4 merkezi bir işlemci çok daha büyük bir potansiyeli temsil,  GHz bu olsa bile, çok çekirdekli ve çok evreli , ancak ve ancak hesaplama halinde gerçekleştirilecek paralelleştirilebilir .

CUDA, GPU C'nin programlanmasına izin verir . Nvidia tarafından başlangıçta GeForce 8 Serisi grafik kartları için geliştirilmiştir ve bir akış tekniği kullanan birleşik bir sürücü kullanır .

CUDA için ilk geliştirme kiti yayınlandı15 Şubat 2007.

Uygulamalar

CUDA'da , kod kırma, yapısal hesaplamalar, akışkan simülasyonu, simüle edilmiş tavlama algoritmaları gibi asal faktörler üzerinde bağımsız hesaplamalara bölünebilenlerin yanı sıra, yoğun hesaplama gerektiren , iki veya üç boyutlu olarak birleştirilebilen her şey yapılabilir. . , çok büyük matrisler üzerinde ekonometrik hesaplamalar (bu matrisleri bloklara bölme teknikleri, ürünün büyük ölçüde paralelleştirilmesine izin verir) CUDA'dan yararlanabilir. Şifre kırma istisna değildir.

CUDA tarafından tanınan mimariler

Tesla Mimarisi

Tesla mimarisi göre NVidia sunan bir işlem gücü süper bilgisayar (tek hassas 4 TeraFLOPS, çift hassas 80 GigaFLOPS) 10.000 dolarlık bir toplamı için, CUDA üzerine inşa edilmiştir.

Pascal mimarisi

2016 yılında 2560 çekirdekli (16nm gravür) GTX1080 ve GTX1070 kartlarıyla tanıtılan ve 2,1 GHz'de hız aşırtılabilir GDDR5X kullanan Pascal mimarisi , CUDA ile de kullanılabilir. NVidia, tek hassasiyette 11 teraflop duyurdu.

Fermi mimarisi (eski)

2010 yılında GF100 ile tanıtılan Fermi mimarisi artık kullanımdan kaldırılmıştır ve 8.0.x'ten sonraki CUDA sürümleri bunu desteklememektedir.

Programlama

CUDA, GPU'larda genel hesaplamalar gerçekleştirmeyi önererek C programlamaya kıyasla çeşitli özelliklere sahiptir:

Bazı gerçekleştirmeler , eşzamanlı işlemlerin programlanmasına ve sızıntı olmadan bellek yönetimine çok odaklı Go dilinin kullanımını CUDA'nınkiyle birleştirir .

Faydaları

limitler

Örnekler

Kart öykünmesi ile örnek

#include <stdio.h> #include <stdlib.h> #include <cuda.h> #include <cuda_runtime.h> __global__ void mykernel(float *A1, float *A2, float *R) { int p = threadIdx.x; R[p] = A1[p] + A2[p]; } int main() { float A1[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; float A2[] = { 10, 20, 30, 40, 50, 60, 70, 80, 90 }; float R[9]; // 9 additions, aucune boucle ! mykernel<<<1 ,9>>>(A1, A2, R); // sortie à l'ecran for (int i = 0; i < 9; i++) { printf("%f\n", R[i]); } }

Bu örnek, yalnızca grafik kartını taklit edersek işe yarar çünkü karttaki verileri kopyalamayız.

Tarafından düzenlendi:

nvcc -deviceemu -o run prog.cu

NVidia grafik kartı ile örnek

#include <stdio.h> #include <stdlib.h> #include <cuda.h> #include <cuda_runtime.h> __global__ void mykernel(float *A1, float *A2, float *R) { int p = threadIdx.x; R[p] = A1[p] + A2[p]; } int main() { float A1[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; float A2[] = { 10, 20, 30, 40, 50, 60, 70, 80, 90 }; float R[9]; int taille_mem = sizeof(float) * 9; // on alloue de la memoire sur la carte graphique float *a1_device; float *a2_device; float *r_device; cudaMalloc((void**) &a1_device, taille_mem); cudaMalloc((void**) &a2_device, taille_mem); cudaMalloc((void**) &r_device, taille_mem); // on copie les donnees sur la carte cudaMemcpy(a1_device, A1, taille_mem, cudaMemcpyHostToDevice); cudaMemcpy(a2_device, A2, taille_mem, cudaMemcpyHostToDevice); //9 additions, aucune boucle ! mykernel<<<1, 9>>>(a1_device, a2_device, r_device); // on recupere le resultat cudaMemcpy(R, r_device, taille_mem, cudaMemcpyDeviceToHost); // sortie à l'ecran for(int i = 0; i < 9; i++) { printf("%f\n", R[i]); } }

Tarafından düzenlendi:

nvcc -o add_cuda add_cuda.cu

Notlar ve referanslar

  1. "  https://docs.nvidia.com/cuda/  "
  2. "  https://developer.nvidia.com/cuda-toolkit-archive  "
  3. (içinde) Anand Lal Shimpi ve Wilson, Derek, "  Nvidia'nın GeForce 8800 (G80) GPU'ları DirectX 10 için Yeniden Mimari Edildi  " , AnandTech,8 Kasım 2006( 16 Mayıs 2015'te erişildi ) .
  4. (in) "  http://news.developer.nvidia.com/2007/02/cuda_for_gpu_co.html  " ( ArşivWikiwixArchive.isGoogle • Ne yapmalı? ) , Nvidia'da .
  5. "  Cryptohaze  " üzerine, SourceForge (erişilen 13 Ağustos 2020 ) .
  6. https://hpcugent.github.io/easybuild/files/FOSDEM14/FOSDEM14_HPC_devroom_14_GoCUDA.pdf

Şuna da bakın:

İlgili Makaleler

Rakip ürünler

Dış bağlantılar

İşletim sistemlerine göre CUDA kurulumu CUDA mimarisi