GPUArrays v11: Port ke KernelAbstractions.jl – Beragampengetahuan
Oleh: Tim Besard
Diposting ulang dari:
Versi terbaru GPUArrays.jl melibatkan pemindahan semua kernel netral vendor ke KernelAbstractions.jl. Ini akan mempermudah penambahan fungsionalitas baru dan meningkatkan kinerja kernel yang sudah ada.
Contents
DSL Nuklir bersifat netral terhadap vendor
Sebelumnya, kami membuat GPUArrays.jl untuk menghindari keharusan menulis kernel terpisah untuk setiap backend GPU, dengan mengandalkan bahasa khusus domain netral vendor (DSL) yang sangat sederhana yang dapat diterjemahkan dengan sangat mudah ke dalam bahasa berikut – bahasa kernel asli akhir. Sebagai contoh sederhana, kernel berikut digunakan untuk menghitung penjumlahan suatu vektor:
function LinearAlgebra.adjoint!(B::AbstractGPUMatrix, A::AbstractGPUVector)
gpu_call(B, A) do ctx, B, A
idx = @linearidx A
@inbounds B[1, idx] = adjoint(A[idx])
return
end
return B
end
DSL ini dirancang hampir satu dekade lalu oleh Simon Danisch dan telah membantu kami dengan baik! Sejak itu, KernelAbstractions.jl telah dikembangkan oleh Valentin Churavy, menyediakan DSL yang lebih kuat dan disiplin. Dengan banyaknya pengembang aplikasi yang berpindah ke KernelAbstractions.jl, inilah waktunya untuk memigrasikan GPUArrays.jl ke DSL baru ini.
Berkat kerja keras James Schloss yang tak kenal lelah, GPUArrays.jl v11 sekarang menggunakan KernelAbstractions.jl untuk semua kernel netral vendor. Apa yang dikatakan di atas adjoint! Kernelnya sekarang terlihat seperti ini:
function LinearAlgebra.adjoint!(B::AbstractGPUMatrix, A::AbstractGPUVector)
@kernel function adjoint_kernel!(B, A)
idx = @index(Global, Linear)
@inbounds B[1, idx] = adjoint(A[idx])
end
adjoint_kernel!(get_backend(A))(B, A; ndrange=size(A))
return B
end
Seperti yang ditunjukkan di atas, DSL KernelAbstractions.jl sangat mirip dengan DSL lama, tetapi menawarkan fleksibilitas dan kekuatan yang lebih besar (misalnya dukungan untuk atom melalui Atomix.jl). Selain itu, semakin banyak pengguna yang mengenal KernelAbstractions.jl, sehingga memudahkan mereka berkontribusi ke GPUArrays.jl. Langkah pertama yang baik di sini adalah memindahkan beberapa kernel khusus vendor dari CUDA.jl ke GPUArrays.jl, sehingga tersedia untuk semua sistem backend GPU. Jika Anda tertarik untuk berkontribusi, silakan menghubungi kami!
Meskipun demikian, perubahan bukannya tanpa tantangan. Fleksibilitas tambahan yang disediakan oleh KernelAbstractions.jl mengenai pengindeksan kini membuahkan hasil beberapa kernel lebih lambat dari sebelumnyaterutama bila tidak terdapat banyak kerumitan komputasi untuk mengamortisasi biaya pengindeksan (misalnya saat melakukan siaran yang sangat sederhana). Kami sedang berupaya memperbaikinya, namun hal ini memerlukan waktu. Bukan untuk menahan ekosistem JuliaGPU lainnya, kami merilisnya meskipun ada masalah kinerja. Anda harus mengevaluasi aplikasi Anda dengan cermat setelah meningkatkan versi ke v11 dan melaporkan penurunan kinerja apa pun
Versi paket back-end
Karena GPUArrays.jl bukan ketergantungan langsung pada sebagian besar aplikasi, pembaruan akan dilengkapi dengan versi paket backend berikut (beberapa di antaranya mungkin belum dirilis):
-
CUDA.jl v5.6
-
Logam.jl v1.5
-
oneAPI.jl v2.0
-
AMDGPU.jl v1.1
Terkait
Software Terbaru Saat Ini
Aplikasi yang sedang trend saat ini
object oriented programming, programming language, programming adalah, web programming, belajar programming, tournament software, software, software adalah, contoh software, apa itu software, pengertian software, aplikasi, aplikasi penghasil uang, aplikasi bokep, aplikasi video, programming
#GPUArrays #v11 #Port #KernelAbstractions.jl