2017-04-13 5 views
0

Ich verwende OpenACC für Sparse Matrix Berechnung in C++. Ich muss Matrixoperationen innerhalb von OpenACC-Regionen verwenden.OpenACC - Sparse Matrix Bibliothek

Gibt es irgendwelche mit OpenACC kompatible dünn besetzte Matrixbibliotheken?

Ich bin zu Eigen verwendet, aber es scheint, dass es nicht kompatibel mit OpenACC ist, wenn ich nicht den Quellcode manuell ändern, die ...

+1

Sie müssen ein wenig mehr erklären, was Sie unter "kompatibel" verstehen, und wenn Sie versuchen, die Bibliothek innerhalb einer OpenACC-Rechenregion zu verwenden, wenn die Bibliothek selbst mit OpenACC beschleunigt wurde oder wenn Sie nur möchte Daten zwischen Ihrem OpenACC-Code und der Bibliothek freigeben. Wenn Sie beispielsweise eine NVIDIA-GPU verwenden, ist OpenACC mit cuSparse interoperabel, dh Sie können Daten zwischen den Aufrufen an die Bibliothek und Ihrem OpenACC-Code freigeben. Angenommen, Sie verwenden PGI, dann finden Sie Beispiele in $ PGI/linux86-64/2016/examples/CUDA-Libraries/cuSPARSE/ –

+0

Vielen Dank für Ihren Kommentar! Ja, ich möchte die Bibliothek in der OpenAcc-Region verwenden (ich habe meine Antwort bearbeitet, um darauf hinzuweisen). cuSPARSE scheint die Arbeit zu erledigen, danke! Du kannst es als Antwort geben und ich werde es akzeptieren. –

Antwort

1

Wenn Sie ein Targeting sind keine gute Idee klingen NVIDIA GPU, PGIs Implementierung von OpenACC ist interoperabel mit cuSparse, was bedeutet, dass Sie Daten zwischen den Aufrufen der Bibliothek und Ihrem OpenACC-Code teilen können. Wenn Sie PGI verwenden, finden Sie Beispiele in $ PGI/linux86-64/2016/examples/CUDA-Libraries/cuSPARSE /. Beachten Sie, dass cuSPARSE keine geräteseitigen Routinen hat und vom Host aufgerufen werden muss. OpenACC-verwaltete Gerätedaten können jedoch über die Anweisung "host_data" an die cuSPARSE-Routinen übergeben werden.

cuBLAS verfügt über Geräte-Routinen, die Sie in OpenACC-Rechenbereichen verwenden können. Natürlich sind diese nicht auf Sparse-Matrix-Operationen abgestimmt.