2017-08-04 9 views
1

Ich versuche zu finden, wo die Implementierung einer tatsächlichen Conv2D-Operation ist, damit ich Speicherzugriffsmuster bewerten kann. Bei der Verfolgung von Dingen sieht es so aus, als würde die Ausführung einer Conv2D-Operation Eigen mit einem Funktionsaufruf contract() eingeben. Das Problem ist, ich kann die Definition oder Deklaration der Funktion weder in TensorFlow noch in der Eigen-Quelle finden.TensorFlow Conv2D Implementierung?

Welche Funktionen sind hauptsächlich für die Ausführung eines Conv2D-Vorgangs in TensorFlow verantwortlich? Ich würde gerne sehen, wie es gelähmt ist, was das allgemeine Speicherzugriffsmuster ist und wie die rohen Berechnungen gemacht werden.

Diese Abfrage ist für CPU spezifisch, wie ich bereits in GPU-Ausführung zu einem gewissen Grad untersucht habe.

Antwort

1

Nach einigem Suchen fand ich die tatsächliche Implementierung der CPU Conv2D in deep_conv2d.cc.

+0

Weißt du, was ist der Unterschied zwischen Deep und Direct Faltung, die in dieser Datei implementiert sind? –

0

Ich denke Conv2dCPU in dieser Datei conv ops Line 61 onwards Eigen mit implementiert

+0

Nicht wirklich, das ist Setup für den Vorgang (Aufruf ein paar optimierte Methoden für vereinfachte Fälle). Beachten Sie den Aufruf von 'funktor :: SpatialConvolution () (ctx-> eigen_device (), Ausgabe-> tensor (), input.tensor (), filter.tensor (), row_stride, col_stride, padding)' im abschließenden 'else'. Dies beginnt einen gewundenen Pfad von Funktionsaufrufen, die ich nicht auf irgendeine Art von Struktur zu verfolgen scheint, die aussieht, um Multiplikationen/for-Schleifen usw. zu machen. –

+0

Sie können sich https://github.com/tensorflow/tensorflow ansehen /blob/master/tensorflow/core/kernels/conv_ops.cc#L277 –

0

contract() gibt einen abstrakten Ausdruck, deren Auswertung in TensorContraction.h umgesetzt wird. Es ist im Wesentlichen eine Hülle über Eigen Matrix-Matrix oder Matrix-Vektor-Produkten.

Verwandte Themen