oneAPI.jl 1.0: oneMKL, Intel Arc dan Julia 1.9 – Beragampengetahuan
Oleh: Tim Besard
Repost dari:
Rilis oneAPI.jl 1.0 menambahkan integrasi dengan oneAPI Math Kernel Library (oneMKL) untuk mempercepat operasi aljabar linier pada GPU Intel. Ini juga mendukung Julia 1.9 dan GPU Intel Arc.
Contents
integrasi oneMKL
oneAPI.jl sekarang menggunakan Intel’s oneAPI Math Kernel Library (oneMKL), yang diunduh secara otomatis sebagai bagian dari oneAPI_Support_jll.jl, untuk mempercepat operasi BLAS dan LAPACK dalam jumlah besar pada GPU Intel. Mirip dengan penerapannya di backend GPU kami yang lain, pembungkus ini tersedia dalam berbagai tingkat abstraksi.
Pada level terendah, kami menggunakan pustaka C yang membungkus API C++ oneMKL. Misalnya, oneapi::mkl::blas::column_major::gemm fungsi untuk perkalian matriks yang dibungkus dengan fungsi C onemklSgemm, onemklDgemmdll. Pembungkus ini digunakan untuk menerapkan metode tingkat rendah seperti oneMKL.gemm!:
julia> using oneAPIjulia> A = oneArray(rand(Float32, 2, 3));
2×3 oneMatrix{Float32, oneAPI.oneL0.DeviceBuffer}:
0.44302 0.125576 0.859145
0.674291 0.428346 0.0400119
julia> B = oneArray(rand(Float32, 3, 4))
3×4 oneMatrix{Float32, oneAPI.oneL0.DeviceBuffer}:
0.592748 0.529413 0.0323396 0.659528
0.22489 0.0872259 0.253291 0.376519
0.0121506 0.591135 0.706755 0.751686
julia> C = similar(B, (2, 4));julia> oneMKL.gemm!('N', 'N', true, A, B, true, C)
2×4 oneMatrix{Float32, oneAPI.oneL0.DeviceBuffer}:
0.301279 0.753365 0.65334 0.985274
0.496501 0.417994 0.158581 0.63607julia> Array(C) ≈ Array(A) * Array(B)
true
Tentu saja, fungsi tingkat rendah ini sangat tidak ramah pengguna, jadi kami juga berintegrasi dengan pustaka standar Julia jika memungkinkan:
julia> A = oneArray(rand(Float32, 2, 3));
julia> B = oneArray(rand(Float32, 3, 4));julia> using LinearAlgebra
julia> C = A * B;julia> Array(C) ≈ Array(A) * Array(B)
true
Fungsi oneMKL BLAS yang paling sering digunakan telah dibungkus dan diintegrasikan dengan pustaka aljabar linier standar Julia. Jika Anda menemukan fungsi yang hilang, kirimkan permintaan untuk menambahkannya atau buka sumbernya dan berkontribusi ke oneAPI.jl! Keadaan pembungkus saat ini harus memudahkan untuk memperluas fungsionalitasnya, serta memberikan dasar yang baik untuk integrasi dengan perpustakaan lain seperti oneDNN.
Dukungan Intel Arc
Keluarga Arc baru dari GPU Intel terpisah sekarang didukung penuh oleh oneAPI.jl. GPU ini menawarkan peningkatan kinerja yang signifikan dibandingkan pendahulunya yang terintegrasi:
julia> using oneAPI
julia> oneAPI.versioninfo()
1 device:
- Intel(R) Arc(TM) A770 Graphics [0x56a0]julia> T = Float32;
julia> n = p = m = 2048;
julia> a = oneArray(rand(T, n, p));
julia> b = oneArray(rand(T, p, m));
julia> c = oneArray(zeros(T, n, m));julia> using BenchmarkTools, LinearAlgebra
julia> bench = @benchmark oneAPI.@sync mul!(c, a, b)
BenchmarkTools.Trial: 1510 samples with 1 evaluation.
Range (min … max): 3.233 ms … 3.791 ms ┊ GC (min … max): 0.00% … 0.00%
Time (median): 3.298 ms ┊ GC (median): 0.00%
Time (mean ± σ): 3.308 ms ± 48.426 μs ┊ GC (mean ± σ): 0.00% ± 0.00% ▁▃▄▇█▅▄▃▂ ▁▁▁
▁▁▃▃▅▇██████████████████▇▇▇▅▆▄▅▅▄▂▃▂▂▂▂▂▂▁▂▂▂▁▂▁▂▁▂▂▂▂▁▁▂▂ ▃
3.23 ms Histogram: frequency by time 3.47 ms < Memory estimate: 272 bytes, allocs estimate: 11.julia> flops = n*m*(2p-1)
17175674880julia> flops / (minimum(bench.times)/1e9)
5.3131281169900205e12
Misalnya, di sini kami mendapatkan 5+ TFlops dari kinerja Float32, 10x lebih cepat dari Intel Xe Graphics G7 yang sebelumnya kami gunakan untuk mengembangkan oneAPI.jl. Pada saat yang sama, A770 yang digunakan di atas seharusnya mampu menghasilkan hampir 20 TFlop, jadi masih ada ruang untuk perbaikan dalam kumpulan perangkat lunak kami.
Untuk menggunakan oneAPI.jl dengan GPU seri Arc, Anda harus menjalankan Linux 6.2. Pada saat penulisan ini, kernel tersebut masih dalam versi beta, jadi bacalah dokumentasi distro Anda untuk cara menginstalnya. Misalnya, di Arch Linux Anda dapat menggunakan linux-mainline paket dari AUR, Ubuntu punya kernel-ppa hosting, Fedora menyediakan stable-rc arsip, dll.
Perubahan lainnya
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
#oneAPI.jl #oneMKL #Intel #Arc #dan #Julia