我試圖來衡量我的代碼性能的改進,當我多核設備上運行多線程我的Android應用程序(如S3)與單核Android設備。爲了衡量性能,我順序運行任務而不是並行運行。我已經實現了普通的Java線程,這似乎沒有什麼區別。我因此嘗試了AsynchTask,但我只獲得了一點性能改進。我如何確保我的線程/進程在不同內核上運行
你能不能讓我知道我可以編寫代碼,可以確保我的每一個任務/線程正在不同的內核上運行,而不是單一的一個?如果這是不可能的,我怎樣才能最大限度地利用我的應用程序的多個核心?
下面是執行任務的活動的onCreate方法的代碼。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_local_executor);
multiplicationTask t1 = new multiplicationTask();
t1.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
multiplicationTask t2 = new multiplicationTask();
t2.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
multiplicationTask t3 = new multiplicationTask();
t3.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
multiplicationTask t4 = new multiplicationTask();
t4.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}
下面是從onCreate方法
class multiplicationTask extends AsyncTask<Integer, Integer, String> {
protected void onPreExecute()
{
Log.v("PrintLN", "Executing Task");
}
@Override
protected String doInBackground(Integer... params) {
//Do lots of floating point operations that are independent of anything whatsoever
}
protected void onPostExecute(String result) {
Log.v("PrintLN", "Done Task: " + resulting_time);
}
}
FWIW,這被稱爲「線程親和性」,甚至在標準Java中都不支持 - 至少[不在JCL中](http://stackoverflow.com/questions/2238272/java-thread-affinity) 。 – 2013-02-17 06:54:33
你的矩陣乘法是如何實現的?我不知道JIT是否執行循環操作。如果不是,則矩陣乘法可以由存儲器傳輸而不是處理器內計算控制。我建議用很少或沒有內存訪問的東西代替純計算的東西。 – 2013-02-17 07:12:50
@PatriciaShanahan出於測試目的,我將兩個8x8浮點數組相乘 - 您會建議什麼? – afahim 2013-02-17 07:17:17