Mit zwei int-Matrizen A und B, mit mehr als 1000 Zeilen und 10K Spalten, muss ich sie oft in Float-Matrizen konvertieren, um eine Beschleunigung (4x oder mehr) zu erhalten.Warum ist es schneller, float by float matrix multiplication im Vergleich zu int by int auszuführen?
Ich frage mich, warum ist das der Fall? Ich stelle fest, dass es viele Optimierungen und Vektorisierungen wie AVX usw. gibt, die mit der Multiplikation der Gleitkomma-Matrix fortfahren. Aber es gibt Anweisungen wie AVX2, für ganze Zahlen (wenn ich mich nicht irre). Und kann man SSE und AVX nicht für Ganzzahlen verwenden?
Warum gibt es keine Heuristik unter Matrixalgebra-Bibliotheken wie Numpy oder Eigen, um dies zu erfassen und ganzzahlige Matrixmultiplikation schneller auszuführen, genau wie float?
über akzeptierte Antwort: Während @ sascha Antwort sehr informativ und relevant ist, die Antwort von @ chatz ist der eigentliche Grund, warum der int durch int Multiplikation langsam ist unabhängig davon, ob BLAS ganzzahlige Matrix-Operationen existieren.
Es würde helfen, die Frage spezifischer zu machen, aber da mehr Leute es für float benötigen, wurde mehr Mühe gemacht, es für float (in Software und Hardware) zu optimieren. –
Diese Frage benötigt einen speziellen Beispielcode, um den Leistungsunterschied zu demonstrieren (siehe [mcve]). Insbesondere wenn der Code mit [C++] und [numpy] getaggt ist, ist völlig unklar, worauf Sie sich beziehen. – Zulan