Metal.jl 0.2: Shader Kinerja Logam – Beragampengetahuan
Oleh: Tim Besard
Repost dari:
Metal.jl 0.2 menandai tonggak penting dalam pengembangan paket Metal.jl. Rilis ini hadir dengan dukungan awal untuk kerangka kerja Metal Performance Shaders (MPS) untuk mempercepat operasi umum seperti penggandaan matriks, serta berbagai perbaikan untuk menulis kernel Metal di Julia.
Mengutip dokumentasi Apple, kerangka kerja Metal Performance Shaders (MPS) berisi sekumpulan shader komputasional dan grafis yang sangat dioptimalkan untuk digunakan dalam aplikasi Logam. Dengan Metal.jl 0.2 kami menambahkan dukungan awal untuk framework ini dan menggunakannya untuk mempercepat operasi perkalian matriks:
julia> n = p = m = 2048
julia> flops = n*m*(2p-1)
17175674880julia> a = MtlArray(rand(Float32, n, p));
julia> b = MtlArray(rand(Float32, p, m));
julia> c = MtlArray(zeros(Float32, n, m));julia> bench = @benchmark Metal.@sync mul!(c, a, b)
BenchmarkTools.Trial: 518 samples with 1 evaluation.
Range (min … max): 9.366 ms … 13.354 ms ┊ GC (min … max): 0.00% … 0.00%
Time (median): 9.629 ms ┊ GC (median): 0.00%
Time (mean ± σ): 9.646 ms ± 192.169 μs ┊ GC (mean ± σ): 0.00% ± 0.00% ▃▂▅▅▆▆▆▇█▇▇▆▅▄▄▁▁ ▁
▄▁▄▄▄▄▆▆▆▄▄▁▇█████████████████▄█▄▁▆▁▄▁▆▁▇▁▄▄▁▁▄▄▇▁▄▆▄▁▁▁▁▁▄ █
9.37 ms Histogram: log(frequency) by time 10.1 ms < Memory estimate: 352 bytes, allocs estimate: 12.julia> flops / (minimum(bench.times)/1e9)
1.83e12
Tolok ukur di atas menunjukkan bahwa pada perkalian matriks 8-core M1 Pro kini hadir dalam 1,8 TFLOPS (dari 2,6TFLOPS kinerja teoretis). Perkalian matriks yang dipercepat tersedia untuk banyak jenis input, termasuk operasi mode campuran, dan seperti yang ditunjukkan di atas terintegrasi dengan LinearAlgebra.jl mul! menampilkan.
Tentu saja, kerangka kerja MPS tidak hanya menyediakan perkalian matriks dan kami berharap dapat mendukung lebih banyak lagi di masa mendatang. Jika Anda memiliki aktivitas tertentu yang ingin Anda gunakan dari Julia, beri tahu kami dengan membuka masalah di repositori Metal.jl.
Contents
Dukungan konfigurasi GPU
Untuk mendukung pengembangan core Metal, Max Hawkins telah menambahkan dukungan untuk profil GPU. Mirip dengan cara kerjanya di CUDA.jl, Anda dapat menjalankan kode di bawah ini Metal.@profile makro untuk merekam eksekusinya. Namun, ini membutuhkan pengaturan terlebih dahulu METAL_CAPTURE_ENABLED bendera lingkungan sebelum impor Metal.jl:
julia> ENV["METAL_CAPTURE_ENABLED"] = 1julia> using Metaljulia> a = mtl(rand(1024, 1024))
julia> Metal.@profile sum(a)
[ Info: GPU frame capture saved to jl_metal.gputrace/
Snapshot yang dihasilkan dapat dibuka dengan Xcode, menampilkan garis waktu yang sama dengan konfigurator lainnya:

Perbaikan lainnya
-
Julia 1.9 didukung tetapi membutuhkan versi macOS terbaru (dikeluarkan pada macOS 12.4);
-
SATU
mtlfungsi telah ditambahkan untuk mengonversi larik Julia menjadi larik Logam, mirip dengancufungsi di CUDA.jl; -
Beberapa GPU didukung dan
device!fungsi dapat digunakan untuk memilih satu; -
Cakupan untuk fungsi Grup SIMD telah ditingkatkan, sehingga sekarang memungkinkan untuk digunakan
simdgroup_load,simdgroup_store,simdgroup_multiplyDansimdgroup_multiply_accumulatedalam fungsi nuklir.
Pekerjaan masa depan
Sementara Metal.jl saat ini dapat digunakan untuk banyak aplikasi, masih banyak pekerjaan yang harus dilakukan sebelum dianggap siap produksi. Spesial:
-
telah mengetahui masalah kinerja dengan
mapreducedan kegiatan lainnya benar-benar aktifCartesianIndices; -
itu
libcmtperpustakaan pembungkus untuk berinteraksi dengan API Logam sulit untuk digunakan dan ditingkatkan, dan sebagai gantinya kami melihat FFI ObjectiveC asli; -
Pembungkus MPS tidak lengkap dan mirip dengan Metal API membutuhkan alternatif
libcmtditingkatkan; -
dukungan untuk operasi atom tidak ada, yang diperlukan untuk mengimplementasikan backend KernelAbstractions.jl berfitur lengkap.
Setelah (sebagian besar) masalah ini teratasi, kami akan dapat merilis Metal.jl 1.0.
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
#Metal.jl #Shader #Kinerja #Logam