Metal.jl 0.2: Shader Kinerja Logam

 – Beragampengetahuan
3 mins read

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:

XCode sedang melihat jejak Metal.jl .capture

Perbaikan lainnya

  • Julia 1.9 didukung tetapi membutuhkan versi macOS terbaru (dikeluarkan pada macOS 12.4);

  • SATU mtl fungsi telah ditambahkan untuk mengonversi larik Julia menjadi larik Logam, mirip dengan cu fungsi 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_multiplyDan simdgroup_multiply_accumulate dalam 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 aktif CartesianIndices;

  • itu libcmt perpustakaan 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 libcmt ditingkatkan;

  • 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.

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

Tinggalkan Balasan

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