Что такое #tfop в Swift Tensorflow и где он определен? - PullRequest
0 голосов
/ 29 апреля 2018

Я просматриваю код быстрого тензорного потока и наткнулся на экземпляры

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

# tfop хорошо объяснено в документе здесь , в смысле «что он делает», но меня также интересует, что на самом деле происходит с точки зрения языка или как реализация функции.

Что представляет собой #tfop помимо дескриптора графа вычислений? Почему '#'? Где я могу найти реализацию tfop, если захочу? (Я просмотрел код, но не повезло, хотя не могу гарантировать, что ничего не пропустил).

1 Ответ

0 голосов
/ 02 мая 2018

за Криса Латтнера:

# tfop - это «хорошо известное» представление, используемое для тензорных операций. Это внутренняя деталь реализации нашего стека, которая не предназначена быть видимым для пользователя и, вероятно, со временем изменится.

В Swift «#foo (bar: 42)» - это общий синтаксис, используемый для «macro like» и «магия компилятора». Например, C такие вещи, как FILE пишутся как #file в swift: https://github.com/apple/swift-evolution/blob/master/proposals/0034-disambiguating-line.md

И синтаксис #line 42, используемый препроцессором C, представлен с такими аргументами: #sourceLocation (файл: "foo", строка: 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

источник здесь

...