什么是Swift Tensorflow中的#tfop,它的定义在哪里?

3
我正在浏览Swift TensorFlow代码,并遇到了一些实例。
var result = #tfop("Mul", a, b)

#tfop在文档这里已经很好地解释了它的作用,但我也想从语言角度或函数实现的角度了解它的实际含义。除了作为计算图的句柄之外,#tfop还代表什么?为什么要加'#'?如果我想找到tfop的实现在哪里可以找到?(我浏览了代码,但没有找到,虽然我不能保证我没有漏掉任何东西)。

1
请注意,还有一个swift@tensorflow.org邮件列表 - Martin R
好观点(虽然我更喜欢SO的格式)。现在正在考察它。 - Alex
1个回答

4

根据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

来源在此处


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接