Операторы являются частью protocol SIMD
, протокола, которому соответствуют «SIMD векторные типы» .
Они были введены в Swift 5 с SE-0229 .Из этого предложения:
Давайте обсудим Маски.SIMD являются Equatable, поэтому они имеют операторы == и! =, Но они также предоставляют «поточечное сравнение» .==
и .!=
операторы, которые сравнивают полосы двух векторов и создают маску, которая является векторомбулевых значений.Каждая полоса маски имеет значение true
или false
, в зависимости от результата сравнения значений в соответствующих дорожках.Пример:
(swift) let x = SIMD4<Int>(1,2,3,4)
// x : SIMD4<Int> = SIMD4<Int>(1, 2, 3, 4)
(swift) let y = SIMD4<Int>(3,2,1,0)
// y : SIMD4<Int> = SIMD4<Int>(3, 2, 1, 0)
(swift) x .== y
// r0 : SIMDMask<SIMD4<Int.SIMDMaskScalar>> = SIMDMask<SIMD4<Int>>(false, true, false, false)
здесь вторая дорожка - true
, потому что 2 == 2
, тогда как все остальные дорожки ложные, потому что элементы x и y в этих дорожках не равны.
Выписка из protocol SIMD
:
SIMD-вектор фиксированного числа элементов.
static func .== (Self, Self) -> SIMDMask<Self.MaskStorage>
// Returns a vector mask with the result of a pointwise equality comparison.
static func .> (Self, Self) -> SIMDMask<Self.MaskStorage>
// Returns a vector mask with the result of a pointwise greater than comparison.
Другойпример:
import simd
let x = SIMD3<Float>(1.0, 2.0, 3.0)
let y = SIMD3<Float>(3.0, 2.0, 1.0)
print(x .== y) // SIMDMask<SIMD3<Int32>>(false, true, false)
print(x .!= y) // SIMDMask<SIMD3<Int32>>(true, false, true)
print(x .< y) // SIMDMask<SIMD3<Int32>>(true, false, false)