2016-04-11 16 views
0

Ich habe eine OpenCL-Anwendung, die die Fähigkeiten von Intel Xeon Phi zu wenig nutzt.Concurrent Simulationen mit OpenCL auf Intel Xeon Phi

Der Kernel verwendet eine Datenbank für einige statistische Berechnungen. Daher denke ich, wenn es möglich ist, einen zweiten Kernel hinzuzufügen, der dieselbe Datenbank verwendet und sie gleichzeitig auf Phi ausführt.

Z. B bis n/2 Gewinde für Kernel 1 verwenden und n/2 Fäden für Kernel 2 usw.

Irgendwelche Vorschläge?

+0

Geben Sie Ihren Code ein. –

Antwort

0

unter-nutzt die Fähigkeiten von Intel Xeon Phi.

  • Speicher ungenutzt? Arithmetische Einheiten? Zwischenspeicher? SIMD?
    • Haben Sie es profiliert, um Probleme zu pinnen?

Verwendung n/2 Gewinde für kernel 1 und n/2 Fäden für Kernel 2 etc

  • Wenn Kernel zu viel Speicher verwendet und Cache-Treffer nicht, Sie kann die Grenzen von Loops im Kernel reduzieren, so dass jeder Thread mit weniger Speicher arbeitet und wahrscheinlich öfter den Cache trifft, dann den zweiten Kernel an den verbleibenden Loops anwendet. Wenn es m Elemente pro Faden man kann:

    • n Fäden (für i = 0 bis m/2) + n Fäden (für i = m/2 bis m)
      • ähnliche Multiplikation Matrix in Patches mehr Cache
  • vectorize kernel manuell zu 16 weiten Komponenten zu verwenden, wie INT16 und float16.

+0

Ich benutze das Roofline-Modell, um die Auslastung zu bestimmen und für meine optimierte Version ist es ungefähr 16% Auslastung der Spitzenleistung von Phi. – Michalis

+0

Sie meinen, Ihre Datenbank bottle ist und Sie müssen mit der Berechnung beginnen, sobald der erste Blob empfangen wird, und die Arbeitsspeicher-Latenzen des Arbeitsspeichers/db durch Computerarbeit verbergen? Vielleicht ist es in der Lage, 20 Datenbanken gleichzeitig zu bedienen? –