在许多官方Apple样本和Xcode模板中,使用float4x4
将两个simd_mul
矩阵相乘,如:
simd_mul(viewMatrix, modelMatrix)
现在,simd.h为它的类型提供了*
运算符,因此上面的行可以写成
viewMatrix * modelMatrix
上述两种方法的使用或性能有何不同?我只能查看simd.h
,因此我不知道该方法是如何实际实现的,但我想这只是对simd_mul
的调用。
答案 0 :(得分:3)
没有区别。 Swift是开源的,并且在 simd.swift.gyb你会找到
% for k in [2,3,4]:
/// Matrix multiplication (the "usual" matrix product, not the elementwise
/// product).
% restype = ctype[type] + str(k) + 'x' + str(rows)
% rhstype = ctype[type] + str(k) + 'x' + str(cols)
@_transparent
public static func *(lhs: ${mattype}, rhs: ${rhstype}) -> ${restype} {
return simd_mul(lhs, rhs)
}
% end # for k in [2,3,4]
.gyb文件(“Generate Your Boilerplate”)由特殊文件预处理 Swift预处理器(比较https://lists.swift.org/pipermail/swift-users/Week-of-Mon-20151207/000226.html)。上面的代码嵌套在里面 环
%for type in floating_types:
% for rows in [2,3,4]:
% for cols in [2,3,4]:
% mattype = 'simd_' + ctype[type] + str(cols) + 'x' + str(rows)
// ....
% end # for cols in [2,3,4]
% end # for rows in [2,3,4]
%end # for type in floating_types
这样它最终会扩展到所有的*
运算符定义
可能的矩阵操作数组合。