什么是Swift Tensorflow中的#tfop以及定义在哪里?

时间:2018-04-29 10:54:05

标签: swift tensorflow tensor

我正在浏览swift tensorflow代码,偶然发现了

的实例
var result = #tfop("Mul", a, b)

#tfop在文档here中得到了很好的解释,其含义是'它做什么'但我也对从语言角度或作为功能实现的实际内容感兴趣。

#tfop代表什么,除了计算图的句柄?为什么'#&#39 ;?如果我愿意,我在哪里可以找到tfop实现? (我浏览了代码,但没有运气,虽然我不能保证我没有错过任何东西)。

1 个答案:

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