simd_mul vs *运算符

时间:2018-01-26 20:29:34

标签: swift xcode simd

在许多官方Apple样本和Xcode模板中,使用float4x4将两个simd_mul矩阵相乘,如:

simd_mul(viewMatrix, modelMatrix)

现在,simd.h为它的类型提供了*运算符,因此上面的行可以写成

viewMatrix * modelMatrix

上述两种方法的使用或性能有何不同?我只能查看simd.h,因此我不知道该方法是如何实际实现的,但我想这只是对simd_mul的调用。

1 个答案:

答案 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

这样它最终会扩展到所有的*运算符定义 可能的矩阵操作数组合。