var result = #tfop("Mul", a, b)
#tfop在文档这里已经很好地解释了它的作用,但我也想从语言角度或函数实现的角度了解它的实际含义。除了作为计算图的句柄之外,#tfop还代表什么?为什么要加'#'?如果我想找到tfop的实现在哪里可以找到?(我浏览了代码,但没有找到,虽然我不能保证我没有漏掉任何东西)。
var result = #tfop("Mul", a, b)
根据Chris Lattner的说法:
#tfop 是张量操作中使用的“众所周知”的表示形式。它是我们堆栈的内部实现细节,不是面向用户的,可能随时间而变化。
在Swift中,“#foo(bar: 42)”是用于“宏类”和“编译器魔术”操作的通用语法。例如,C语言中的FILE在Swift中拼写为#file:
https://github.com/apple/swift-evolution/blob/master/proposals/0034-disambiguating-line.md
C预处理器使用的“#line 42”语法用这种方式表示:#sourceLocation(file: "foo", line: 42)
特别是在#tfop的情况下,它在Swift AST中表示为ObjectLiteralExpr,这是此类事物的常规AST节点:
https://github.com/google/swift/blob/tensorflow/include/swift/AST/Expr.h#L1097
我们使用特殊的降级魔术将其转换为SILGen中的SIL builtin指令,这些指令带有“__tfop_”前缀:
https://github.com/google/swift/blob/tensorflow/lib/SILGen/SILGenExpr.cpp#L3009
我想摆脱使用builtin指令,并引入一个第一类sil指令,由以下内容跟踪:
https://github.com/google/swift/issues/16
这些指令被GPE的分区传递特别识别:
https://github.com/google/swift/blob/tensorflow/lib/SILOptimizer/Mandatory/TFUtilities.cpp#L715
来源在此处