我正在浏览swift tensorflow代码,偶然发现了
的实例var result = #tfop("Mul", a, b)
#tfop在文档here中得到了很好的解释,其含义是'它做什么'但我也对从语言角度或作为功能实现的实际内容感兴趣。
#tfop代表什么,除了计算图的句柄?为什么'#&#39 ;?如果我愿意,我在哪里可以找到tfop实现? (我浏览了代码,但没有运气,虽然我不能保证我没有错过任何东西)。
答案 0 :(得分:4)
根据Chris Lattner的说法:
#tfop是用于张量操作的“众所周知的”表示。 这是我们堆栈的内部实现细节,并不意味着 用户可见,并可能随着时间的推移而改变。
在Swift中," #foo(bar:42)“是用于”宏像“的一般语法 和“编译魔术”操作。例如,像 FILE 这样的C语言 拼写为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
我们使用特殊降低魔法将其变成SIL内置 SILGEN中的指令,以" __ tfop _"为前缀 https://github.com/google/swift/blob/tensorflow/lib/SILGen/SILGenExpr.cpp#L3009
我想放弃使用内置指令,以及 引入一流的sil指令,通过以下方式跟踪: https://github.com/google/swift/issues/16
分区通道特别识别这些指令 GPE: https://github.com/google/swift/blob/tensorflow/lib/SILOptimizer/Mandatory/TFUtilities.cpp#L715
来源here