From 7a8120321ff8b1c95b1172932c1a40a029ec33ba Mon Sep 17 00:00:00 2001 From: Christian Guinard <28689358+christiangnrd@users.noreply.github.com> Date: Sat, 28 Dec 2024 01:22:32 -0400 Subject: [PATCH 1/6] Adapt to `minver` in ObjectiveC.jl --- lib/mps/ndarray.jl | 35 ++++++++++++----------------------- 1 file changed, 12 insertions(+), 23 deletions(-) diff --git a/lib/mps/ndarray.jl b/lib/mps/ndarray.jl index 2c52bab95..1e8cc5ebe 100644 --- a/lib/mps/ndarray.jl +++ b/lib/mps/ndarray.jl @@ -49,29 +49,18 @@ export MPSNDArray @objcwrapper immutable=false MPSNDArray <: NSObject -@static if Metal.is_macos(v"15") - @objcproperties MPSNDArray begin - @autoproperty dataType::MPSDataType - @autoproperty dataTypeSize::Csize_t - @autoproperty device::id{MTLDevice} - @autoproperty label::id{NSString} setter=setLabel - @autoproperty numberOfDimensions::NSUInteger - @autoproperty parent::id{MPSNDArray} - - #Instance methods that act like properties - @autoproperty descriptor::id{MPSNDArrayDescriptor} - @autoproperty resourceSize::NSUInteger - @autoproperty userBuffer::id{MTLBuffer} - end -else - @objcproperties MPSNDArray begin - @autoproperty dataType::MPSDataType - @autoproperty dataTypeSize::Csize_t - @autoproperty device::id{MTLDevice} - @autoproperty label::id{NSString} setter=setLabel - @autoproperty numberOfDimensions::NSUInteger - @autoproperty parent::id{MPSNDArray} - end +@objcproperties MPSNDArray begin + @autoproperty dataType::MPSDataType + @autoproperty dataTypeSize::Csize_t + @autoproperty device::id{MTLDevice} + @autoproperty label::id{NSString} setter=setLabel + @autoproperty numberOfDimensions::NSUInteger + @autoproperty parent::id{MPSNDArray} + + #Instance methods that act like properties + @autoproperty descriptor::id{MPSNDArrayDescriptor} minver="15" + @autoproperty resourceSize::NSUInteger minver="15" + @autoproperty userBuffer::id{MTLBuffer} minver="15" end function Base.size(ndarr::MPSNDArray) From 56ba401cb198235d9785eaabda2f36f05fdf0494 Mon Sep 17 00:00:00 2001 From: Christian Guinard <28689358+christiangnrd@users.noreply.github.com> Date: Wed, 8 Jan 2025 10:56:14 -0400 Subject: [PATCH 2/6] Check old behaviour --- lib/mps/ndarray.jl | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/mps/ndarray.jl b/lib/mps/ndarray.jl index 1e8cc5ebe..13aa6718d 100644 --- a/lib/mps/ndarray.jl +++ b/lib/mps/ndarray.jl @@ -58,9 +58,9 @@ export MPSNDArray @autoproperty parent::id{MPSNDArray} #Instance methods that act like properties - @autoproperty descriptor::id{MPSNDArrayDescriptor} minver="15" - @autoproperty resourceSize::NSUInteger minver="15" - @autoproperty userBuffer::id{MTLBuffer} minver="15" + @autoproperty descriptor::id{MPSNDArrayDescriptor}# minver="15" + @autoproperty resourceSize::NSUInteger# minver="15" + @autoproperty userBuffer::id{MTLBuffer}# minver="15" end function Base.size(ndarr::MPSNDArray) From 8fbb4cf0261b3ba30aceed5b2a672e44f976d518 Mon Sep 17 00:00:00 2001 From: Christian Guinard <28689358+christiangnrd@users.noreply.github.com> Date: Wed, 8 Jan 2025 10:59:46 -0400 Subject: [PATCH 3/6] Version-dependant properties --- Project.toml | 2 +- lib/mps/ndarray.jl | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/Project.toml b/Project.toml index 7a2e24049..b00995a92 100644 --- a/Project.toml +++ b/Project.toml @@ -42,7 +42,7 @@ KernelAbstractions = "0.9.1" LLVM = "7.2, 8, 9" LLVMDowngrader_jll = "0.6" LinearAlgebra = "1" -ObjectiveC = "2.1, 3" +ObjectiveC = "3.2" PrecompileTools = "1" Preferences = "1" Printf = "1" diff --git a/lib/mps/ndarray.jl b/lib/mps/ndarray.jl index 13aa6718d..d7f7c8775 100644 --- a/lib/mps/ndarray.jl +++ b/lib/mps/ndarray.jl @@ -58,9 +58,11 @@ export MPSNDArray @autoproperty parent::id{MPSNDArray} #Instance methods that act like properties - @autoproperty descriptor::id{MPSNDArrayDescriptor}# minver="15" - @autoproperty resourceSize::NSUInteger# minver="15" - @autoproperty userBuffer::id{MTLBuffer}# minver="15" + @static if is_macos(v"15") + @autoproperty descriptor::id{MPSNDArrayDescriptor} + @autoproperty resourceSize::NSUInteger + @autoproperty userBuffer::id{MTLBuffer} + end end function Base.size(ndarr::MPSNDArray) From 17cd25a6496e19bda5aef5dedff69b0a69b240ff Mon Sep 17 00:00:00 2001 From: Christian Guinard <28689358+christiangnrd@users.noreply.github.com> Date: Wed, 8 Jan 2025 11:19:42 -0400 Subject: [PATCH 4/6] Fix Also clarify error message --- lib/mps/ndarray.jl | 4 ++-- test/mps/ndarray.jl | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/mps/ndarray.jl b/lib/mps/ndarray.jl index d7f7c8775..667a6dcca 100644 --- a/lib/mps/ndarray.jl +++ b/lib/mps/ndarray.jl @@ -58,7 +58,7 @@ export MPSNDArray @autoproperty parent::id{MPSNDArray} #Instance methods that act like properties - @static if is_macos(v"15") + @static if Metal.is_macos(v"15") @autoproperty descriptor::id{MPSNDArrayDescriptor} @autoproperty resourceSize::NSUInteger @autoproperty userBuffer::id{MTLBuffer} @@ -125,7 +125,7 @@ end function MPSNDArray(arr::MtlArray{T,N}) where {T,N} arrsize = size(arr) - @assert arrsize[1]*sizeof(T) % 16 == 0 "First dimension of arr must have a byte size divisible by 16" + @assert arrsize[1]*sizeof(T) % 16 == 0 "First dimension of input MtlArray must have a byte size divisible by 16" desc = MPSNDArrayDescriptor(T, arrsize) return MPSNDArray(arr.data[], UInt(arr.offset), desc) end diff --git a/test/mps/ndarray.jl b/test/mps/ndarray.jl index edd8af941..75520b8e1 100644 --- a/test/mps/ndarray.jl +++ b/test/mps/ndarray.jl @@ -64,7 +64,7 @@ using .MPS: MPSNDArray @test ndarr2.parent === nothing arr3 = MtlArray(ones(Float16, 2,3,4)) - @test_throws "First dimension of arr must have a byte size divisible by 16" MPSNDArray(arr3) + @test_throws "First dimension of input MtlArray must have a byte size divisible by 16" MPSNDArray(arr3) arr4 = MtlArray(ones(Float16, 8,3,2)) From 19abdc2dc717516147fee5e82afa4a5af1807f29 Mon Sep 17 00:00:00 2001 From: Christian Guinard <28689358+christiangnrd@users.noreply.github.com> Date: Wed, 8 Jan 2025 11:31:45 -0400 Subject: [PATCH 5/6] Add architecture property to TLDevice for supported versions Also fix MTLArchitecture --- lib/mtl/device.jl | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/mtl/device.jl b/lib/mtl/device.jl index db7feecd2..be112aca3 100644 --- a/lib/mtl/device.jl +++ b/lib/mtl/device.jl @@ -8,7 +8,7 @@ export MTLDevice, MTLCreateSystemDefaultDevice, devices @objcwrapper MTLArchitecture <: NSObject @objcproperties MTLArchitecture begin - @autoproperty architecture::id{NSString} + @autoproperty name::id{NSString} end end @@ -56,6 +56,10 @@ end @autoproperty peerCount::UInt64 @autoproperty peerIndex::UInt64 + @static if Metal.is_macos(v"14") + @autoproperty architecture::id{MTLArchitecture} + end + ## resource creation # creating buffers @autoproperty maxBufferLength::NSUInteger From f9838729cf8165e9501bf69248cec19ec42ecd86 Mon Sep 17 00:00:00 2001 From: Christian Guinard <28689358+christiangnrd@users.noreply.github.com> Date: Wed, 8 Jan 2025 12:24:18 -0400 Subject: [PATCH 6/6] Runic formatting --- lib/mps/ndarray.jl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/mps/ndarray.jl b/lib/mps/ndarray.jl index 667a6dcca..0154429bd 100644 --- a/lib/mps/ndarray.jl +++ b/lib/mps/ndarray.jl @@ -53,7 +53,7 @@ export MPSNDArray @autoproperty dataType::MPSDataType @autoproperty dataTypeSize::Csize_t @autoproperty device::id{MTLDevice} - @autoproperty label::id{NSString} setter=setLabel + @autoproperty label::id{NSString} setter = setLabel @autoproperty numberOfDimensions::NSUInteger @autoproperty parent::id{MPSNDArray} @@ -125,7 +125,7 @@ end function MPSNDArray(arr::MtlArray{T,N}) where {T,N} arrsize = size(arr) - @assert arrsize[1]*sizeof(T) % 16 == 0 "First dimension of input MtlArray must have a byte size divisible by 16" + @assert arrsize[1] * sizeof(T) % 16 == 0 "First dimension of input MtlArray must have a byte size divisible by 16" desc = MPSNDArrayDescriptor(T, arrsize) return MPSNDArray(arr.data[], UInt(arr.offset), desc) end