Contoh untuk Pengembang CUDA yang mendemonstrasikan fitur di CUDA Toolkit. Versi ini mendukung CUDA Toolkit 12.5.
Bagian ini menjelaskan catatan rilis untuk Sampel CUDA di GitHub saja.
Unduh dan instal CUDA Toolkit 12.5 untuk platform Anda yang sesuai. Untuk persyaratan sistem dan petunjuk instalasi cuda toolkit, silakan merujuk ke Panduan Instalasi Linux, dan Panduan Instalasi Windows.
Menggunakan git clone repositori Sampel CUDA menggunakan perintah di bawah ini.
git clone https://github.com/NVIDIA/cuda-samples.git
Tanpa menggunakan git, cara termudah untuk menggunakan contoh ini adalah dengan mengunduh file zip yang berisi versi saat ini dengan mengklik tombol "Unduh ZIP" di halaman repo. Anda kemudian dapat mengekstrak seluruh arsip dan menggunakan sampelnya.
Sampel Windows dibuat menggunakan Visual Studio IDE. File solusi (.sln) disediakan untuk setiap versi Visual Studio yang didukung, menggunakan format:
*_vs<version>.sln - for Visual Studio <version>
File solusi sampel lengkap ada di direktori induk repo:
Setiap sampel memiliki kumpulan file solusinya sendiri di: <CUDA_SAMPLES_REPO>Samples<sample_dir>
Untuk membangun/memeriksa semua sampel sekaligus, file solusi lengkap harus digunakan. Untuk membuat/memeriksa satu sampel, file solusi sampel individual harus digunakan.
Sampel Linux dibuat menggunakan makefile. Untuk menggunakan makefile, ubah direktori saat ini ke direktori sampel yang ingin Anda buat, dan jalankan make:
$ cd <sample_dir>
$ make
Sampel makefile dapat memanfaatkan opsi tertentu:
TARGET_ARCH= - kompilasi silang yang menargetkan arsitektur tertentu. Arsitektur yang diizinkan adalah x86_64, ppc64le, armv7l, aarch64. Secara default, TARGET_ARCH disetel ke HOST_ARCH. Pada mesin x86_64, tidak menyetel TARGET_ARCH sama dengan menyetel TARGET_ARCH=x86_64.
$ make TARGET_ARCH=x86_64
$ make TARGET_ARCH=ppc64le
$ make TARGET_ARCH=armv7l
$ make TARGET_ARCH=aarch64
Lihat di sini untuk detail lebih lanjut tentang kompilasi sampel cuda lintas platform.
dbg=1 - membangun dengan simbol debug
$ make dbg=1
SMS="AB..." - mengganti arsitektur SM yang sampelnya akan dibuat, dengan "AB ..."
adalah daftar arsitektur SM yang dibatasi spasi. Misalnya, untuk menghasilkan SASS untuk SM 50 dan SM 60, gunakan SMS="50 60"
.
$ make SMS="50 60"
HOST_COMPILER=<host_compiler> - mengganti kompiler host g++ default. Lihat Panduan Instalasi Linux untuk daftar kompiler host yang didukung.
$ make HOST_COMPILER=g++
Contoh CUDA dasar untuk pemula yang mengilustrasikan konsep utama dengan menggunakan API runtime CUDA dan CUDA.
Contoh utilitas yang menunjukkan cara menanyakan kemampuan perangkat dan mengukur bandwidth GPU/CPU.
Sampel yang menunjukkan konsep terkait CUDA dan teknik pemecahan masalah umum.
Sampel yang menunjukkan Fitur CUDA (Grup Koperasi, Paralelisme Dinamis CUDA, Grafik CUDA, dll).
Contoh yang mendemonstrasikan cara menggunakan perpustakaan platform CUDA (NPP, NVJPEG, NVGRAPH cuBLAS, cuFFT, cuSPARSE, cuSOLVER dan cuRAND).
Sampel yang khusus untuk domain (Grafik, Keuangan, Pemrosesan Gambar).
Contoh yang menunjukkan optimalisasi kinerja.
Sampel yang menunjukkan penggunaan libNVVVM dan NVVM IR.
Beberapa Sampel CUDA mengandalkan aplikasi dan/atau pustaka pihak ketiga, atau fitur yang disediakan oleh Toolkit dan Driver CUDA, untuk membangun atau mengeksekusi. Ketergantungan ini tercantum di bawah ini.
Jika sampel memiliki ketergantungan pihak ketiga yang tersedia di sistem, namun tidak diinstal, sampel akan mengabaikan dirinya sendiri pada waktu pembuatan.
Dependensi setiap sampel tercantum di bagian Dependensi README.
Ketergantungan pihak ketiga ini diperlukan oleh beberapa sampel CUDA. Jika tersedia, dependensi ini akan diinstal pada sistem Anda secara otomatis, atau dapat diinstal melalui manajer paket sistem Anda (Linux) atau situs web pihak ketiga.
FreeImage adalah perpustakaan pencitraan sumber terbuka. FreeImage biasanya dapat diinstal di Linux menggunakan sistem manajer paket distribusi Anda. FreeImage juga dapat diunduh dari situs FreeImage.
Untuk mengatur FreeImage pada sistem Windows, ekstrak distribusi DLL FreeImage ke dalam folder ../../../Common/FreeImage/Dist/x64
sehingga berisi file .h dan .lib. Salin file .dll ke folder bin/win64/Debug
tingkat root dan bin/win64/Release
.
MPI (Message Passing Interface) adalah API untuk mengkomunikasikan data antar proses terdistribusi. Kompiler MPI dapat diinstal menggunakan sistem manajer paket distribusi Linux Anda. Ini juga tersedia di beberapa sumber online, seperti Open MPI. Di Windows, untuk membangun dan menjalankan aplikasi MPI-CUDA seseorang dapat menginstal MS-MPI SDK.
Beberapa sampel hanya dapat dijalankan pada sistem operasi 64-bit.
DirectX adalah kumpulan API yang dirancang untuk memungkinkan pengembangan aplikasi multimedia pada platform Microsoft. Untuk platform Microsoft, Driver CUDA NVIDIA mendukung DirectX. Beberapa Sampel CUDA untuk Windows menunjukkan Interoperabilitas CUDA-DirectX, untuk membuat sampel seperti itu kita perlu menginstal Microsoft Visual Studio 2012 atau lebih tinggi yang menyediakan Microsoft Windows SDK untuk Windows 8.
DirectX 12 adalah kumpulan API pemrograman tingkat rendah tingkat lanjut yang dapat mengurangi overhead driver, dirancang untuk memungkinkan pengembangan aplikasi multimedia pada platform Microsoft dimulai dengan OS Windows 10 dan seterusnya. Untuk platform Microsoft, Driver CUDA NVIDIA mendukung DirectX. Beberapa Sampel CUDA untuk Windows menunjukkan Interoperabilitas CUDA-DirectX12, untuk membuat sampel seperti itu seseorang perlu menginstal Windows 10 SDK atau lebih tinggi, dengan VS 2015 atau VS 2017.
OpenGL adalah perpustakaan grafis yang digunakan untuk rendering 2D dan 3D. Pada sistem yang mendukung OpenGL, implementasi OpenGL NVIDIA dilengkapi dengan Driver CUDA.
OpenGL ES adalah perpustakaan grafis sistem tertanam yang digunakan untuk rendering 2D dan 3D. Pada sistem yang mendukung OpenGL ES, implementasi OpenGL ES NVIDIA dilengkapi dengan Driver CUDA.
Vulkan adalah grafis 3D dan API komputasi lintas platform dengan overhead rendah. Vulkan menargetkan aplikasi grafis 3D realtime berkinerja tinggi seperti video game dan media interaktif di semua platform. Pada sistem yang mendukung Vulkan, implementasi Vulkan NVIDIA dilengkapi dengan Driver CUDA. Untuk membangun dan menjalankan aplikasi Vulkan, seseorang perlu menginstal Vulkan SDK.
OpenMP adalah API untuk pemrograman multiprosesor. OpenMP dapat diinstal menggunakan sistem manajer paket distribusi Linux Anda. Biasanya sudah diinstal sebelumnya dengan GCC. Itu juga dapat ditemukan di situs OpenMP.
Layar adalah sistem windowing yang terdapat pada sistem operasi QNX. Layar biasanya ditemukan sebagai bagian dari sistem file root.
X11 adalah sistem windowing yang biasa ditemukan pada sistem operasi gaya *-nix. X11 dapat diinstal menggunakan manajer paket distribusi Linux Anda, dan sudah diinstal sebelumnya pada sistem Mac OS X.
EGL adalah antarmuka antara API rendering Khronos (seperti OpenGL, OpenGL ES, atau OpenVG) dan sistem windowing platform asli yang mendasarinya.
EGLOutput adalah sekumpulan ekstensi EGL yang memungkinkan EGL merender langsung ke tampilan.
EGLSync adalah sekumpulan ekstensi EGL yang menyediakan objek sinkronisasi yang primitif sinkronisasi, mewakili peristiwa yang penyelesaiannya dapat diuji atau ditunggu.
NvSci adalah sekumpulan pustaka antarmuka komunikasi yang di dalamnya CUDA melakukan interop dengan NvSciBuf dan NvSciSync. NvSciBuf memungkinkan aplikasi mengalokasikan dan menukar buffer di memori. NvSciSync memungkinkan aplikasi untuk mengelola objek sinkronisasi yang berkoordinasi ketika rangkaian operasi dimulai dan diakhiri.
NvMedia menyediakan pemrosesan data multimedia yang kuat untuk akselerasi perangkat keras sesungguhnya di seluruh perangkat NVIDIA Tegra. Aplikasi memanfaatkan Antarmuka Pemrograman Aplikasi (API) NvMedia untuk memproses data gambar dan video.
Fitur CUDA ini diperlukan oleh beberapa sampel CUDA. Mereka disediakan oleh CUDA Toolkit atau CUDA Driver. Beberapa fitur mungkin tidak tersedia di sistem Anda.
Rutinitas Panggilan Balik CUFFT adalah rutinitas kernel yang disediakan pengguna yang akan dipanggil CUFFT saat memuat atau menyimpan data. Rutinitas panggilan balik ini hanya tersedia di sistem Linux x86_64 dan ppc64le.
CDP (CUDA Dynamic Parallelism) memungkinkan kernel diluncurkan dari thread yang berjalan pada GPU. CDP hanya tersedia pada GPU dengan arsitektur SM 3.5 atau lebih tinggi.
Grup Koperasi Multi Blok (MBCG) memperluas Grup Koperasi dan model pemrograman CUDA untuk mengekspresikan sinkronisasi antar-utas-blok. MBCG tersedia pada GPU dengan Pascal dan arsitektur yang lebih tinggi.
Grup Koperasi Multi Perangkat memperluas Grup Koperasi dan model pemrograman CUDA yang memungkinkan blok thread yang dijalankan pada beberapa GPU untuk bekerja sama dan melakukan sinkronisasi saat dijalankan. Fitur ini tersedia pada GPU dengan arsitektur Pascal dan lebih tinggi.
CUBLAS (Subrutin Aljabar Linier Dasar CUDA) adalah versi perpustakaan BLAS yang dipercepat GPU.
IPC (Interprocess Communication) memungkinkan proses untuk berbagi penunjuk perangkat.
CUFFT (CUDA Fast Fourier Transform) adalah pustaka FFT yang dipercepat GPU.
CURAND (CUDA Random Number Generation) adalah perpustakaan RNG yang dipercepat GPU.
CUSPARSE (CUDA Sparse Matrix) menyediakan subrutin aljabar linier yang digunakan untuk perhitungan matriks sparse.
Pustaka CUSOLVER adalah paket tingkat tinggi berdasarkan pustaka CUBLAS dan CUSPARSE. Ini menggabungkan tiga perpustakaan terpisah di bawah satu payung, yang masing-masing dapat digunakan secara mandiri atau bersama dengan perpustakaan toolkit lainnya. Tujuan dari CUSOLVER adalah untuk menyediakan fitur-fitur mirip LAPACK yang berguna, seperti faktorisasi matriks umum dan rutinitas penyelesaian segitiga untuk matriks padat, pemecah kuadrat terkecil renggang, dan pemecah nilai eigen. Selain itu cuSolver menyediakan pustaka refaktorisasi baru yang berguna untuk menyelesaikan rangkaian matriks dengan pola ketersebaran bersama.
NPP (NVIDIA Performance Primitives) menyediakan fungsi pemrosesan gambar, video, dan sinyal dengan akselerasi GPU.
NVGRAPH adalah perpustakaan analisis grafik yang dipercepat GPU.
Pustaka NVJPEG menyediakan fungsionalitas decoding JPEG berperforma tinggi yang dipercepat GPU untuk format gambar yang biasa digunakan dalam pembelajaran mendalam dan aplikasi multimedia hyperscale.
NVRTC (CUDA RunTime Compilation) adalah pustaka kompilasi runtime untuk CUDA C++.
Prioritas Aliran memungkinkan pembuatan aliran dengan prioritas tertentu. Prioritas Streaming hanya tersedia pada GPU dengan arsitektur SM 3.5 atau lebih tinggi.
UVM (Unified Virtual Memory) memungkinkan memori dapat diakses oleh CPU dan GPU tanpa penyalinan eksplisit di antara keduanya. UVM hanya tersedia di sistem Linux dan Windows.
FP16 adalah format titik mengambang 16-bit. Satu bit digunakan untuk tanda, lima bit untuk eksponen, dan sepuluh bit untuk mantissa.
Dukungan NVCC untuk fitur C++11.
Sampel libNVVM dibuat menggunakan CMake 3.10 atau lebih baru.
Kami menyambut masukan Anda mengenai masalah dan saran untuk sampel. Saat ini kami tidak menerima kontribusi dari publik, periksa kembali di sini saat kami mengembangkan model kontribusi kami.
Kami menggunakan Panduan Gaya Google C++ untuk semua sumber https://google.github.io/styleguide/cppguide.html
Jawaban atas pertanyaan umum tentang CUDA dapat ditemukan di http://developer.nvidia.com/cuda-faq dan di Catatan Rilis CUDA Toolkit.