Ich habe einige Tests auf Android durchgeführt, um zu überprüfen, wie gut die Leistung eines Algorithmus (wie FFT) verbessert werden kann, wenn es parallelisiert wird. Ich habe die Algorithmen mit pthread mit JNI (FFTW) und Java-Threads (von JTransforms) implementiert. Anstatt eine bessere Leistung zu erzielen, indem Threads wie erwartet verwendet werden, habe ich bessere Ergebnisse mit dem seriellen Algorithmus. Es ist mir unklar, warum ich diese Ergebnisse erhalten habe, seit ich diese Tests an Multicore-Geräten durchgeführt habe. Es scheint, dass der Zeitplanungsalgorithmus, der vom Android-System verwendet wird, sich von dem von Linux verwendeten unterscheidet, und Sie haben kein Glück, wenn Sie mehr als eine CPU für die Multiprozessorverarbeitung auf Android verwenden möchten.Multiprocessing auf Android
Beispiel mit FFTW: Der JNI-Code ist in https://github.com/maxrosan/DspBenchmarking/blob/master/jni/fftw_jni.c und seine Schnittstelle ist https://github.com/maxrosan/DspBenchmarking/blob/master/src/br/usp/ime/dspbenchmarking/algorithms/fftw/FFTW.java.
Die in Tests aufgerufene Methode ist 'Ausführen'.
Beispiel mit reinem Java: https://github.com/maxrosan/DspBenchmarking/blob/master/src/br/usp/ime/dspbenchmarking/algorithms/jtransforms/fft/DoubleFFT_1D2TAlgorithm.java
Hier die Methode 'ausführen' genannt wird.
'execute' und 'perform' werden in einem anderen Thread aufgerufen.
Verwenden Sie ThreadPoolExecutor oder AsyncTask mit executeOnExecutor. –
Ich bin mir nicht sicher über Ihren letzten Satz, welche Art von Tests haben Sie versucht? Kannst du uns etwas Code zeigen? – Desert
Oh, Sie benutzen C++ Multithreading. Ich schlage vor, Sie versuchen, Java Multithreading oder konsultieren Sie mit Menschen, die C++ gut, nur um zu überprüfen, ob alles in Ordnung ist. – Desert