3 mins read

Metal.jl 1.6: Dukungan MPSGRAPH Awal – Beragampengetahuan

Oleh: Christian Guinard

Re -Post dari:

Metal.jl menambahkan dukungan awal untuk MPSGraph, dengan matriks rahang tertutup, memecahkan beberapa masalah matriks dalam metode sebelumnya.

Contents

Dukungan MPSGraph awal

PR #526 memicu kertas pembungkus otomatis untuk semua enumS, structObjek S, dan Objective-C untuk bingkai yang diandalkan Metal.jl. Ini membuat dukungan tambahan untuk MPSGraph, antarmuka proses kompilasi GPU Apple, pada kenyataannya.

Untuk menguji bingkai baru, konstruksi dan metode yang diperlukan memungkinkan matriks ditambahkan, serta menghubungkannya ke antarmuka linier untuk menyelesaikan masalah yang dapat ditampilkan pada perangkat M1/M2.

Lihatlah contoh sederhana untuk melakukan penggandaan pasangan berikut untuk menambahkan pasangan menggunakan mpsgraph secara langsung:

using Metal, Random
using ObjectiveC: Foundation.NSDictionary
using Metal: encode!;using .MPS: MPSCommandBuffer
using .MPSGraphs: MPSGraph, placeholderTensor, MPSGraphTensorData, MPSGraphTensor, multiplicationWithPrimaryTensor, additionWithPrimaryTensorT = Float32;a = Metal.rand(10);
b = Metal.rand(10);
c = Metal.rand(10);# To compare with the MPSGraph equivalent
res = (a .* b) .+ c;graph = MPSGraph() # Initialize the graph# Create placeholder tensors to be used to compile our graph
placeA = placeholderTensor(graph, size(a), T)
placeB = placeholderTensor(graph, size(b), T)
placeC = placeholderTensor(graph, size(c), T)# Link the placeholder tensors to the data via a Dict
feeds = Dict{MPSGraphTensor, MPSGraphTensorData}(
    placeA => MPSGraphTensorData(a),
    placeB => MPSGraphTensorData(b),
    placeC => MPSGraphTensorData(c)
)# Add multiplication to the graph
pwisemul = MPSGraphs.multiplicationWithPrimaryTensor(graph, placeA, placeB)# Add addition to the graph
pwiseadd = MPSGraphs.additionWithPrimaryTensor(graph, pwisemul, placeC)# Our output tensor will be our c MtlArray
resultdict = Dict{MPSGraphTensor, MPSGraphTensorData}(
    pwiseadd => feeds[placeC]
)# Encode and run the graph
cmdbuf = MPS.MPSCommandBuffer(Metal.global_queue(device()))
MPS.encode!(cmdbuf, graph, NSDictionary(feeds), NSDictionary(resultdict))
Metal.commit!(cmdbuf)
Metal.wait_completed(cmdbuf)# The MPSGraph result is equal to the typical way of doing things.
@assert isapprox(res, c)

Jelas, untuk kegiatan sederhana seperti di atas, ia memiliki banyak boiler tanpa banyak manfaat, tetapi untuk kegiatan yang lebih kompleks, MPSGraph akan mengoptimalkan grafik dan beroperasi sebelum menjalankan, mengurangi peluncuran kernel yang mahal dan mengurangi kegiatan yang tidak perlu.

Aspek lain yang menarik dari bingkai baru ini adalah sekarang karena menambahkan fungsi telah diperlukan lebih lama. Seseorang dapat menemukan fungsi MPSGraph yang tidak ditemukan di Metal.jl dan menulis proses pembungkus menggunakan program pembungkus yang ada sebagai titik awal. Jika ada yang tertarik untuk membantu, buka permintaan atau masalah di arsip Metal.jl dan kami akan mencoba sebaik mungkin untuk membantu Anda menyatukan kode Anda.

Perubahan kecil

Metal.jl 1.6 juga mencakup beberapa pembaruan bermanfaat lainnya:

Seperti biasa, kami mendorong pengguna untuk memperbarui ke versi terbaru untuk mendapatkan manfaat dari perbaikan dan koreksi ini. Periksa Changelog untuk daftar perubahan lengkap.

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 #Dukungan #MPSGRAPH #Awal

Tinggalkan Balasan

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