3 mins read

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

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

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *