2012-03-23 64 views
1

program查找使用的OpenCL 1.1素數提供了以下基準:程序執行在CPU和GPU上幾乎相同的使用時間?

設備:CPU

實時:約。 3秒 使用時間:約。 32秒

裝置:GPU

實時 - 大約。 37秒 使用時間 - 約。 32秒

爲什麼GPU的執行時間不會少於CPU的執行時間?是否發生數據/任務並行化?

系統規格:64位的CentOS 5.3系統,有兩個的ATI Radeon 5970獨立顯卡+ Intel Core i7處理器(12個核心)

+0

你確定你的i7有12個核心嗎?我以爲你只能使用6個內核(12個線程) – 2012-03-26 12:05:01

回答

1

你的內核是相當低效的,下面我有一個調整一個,你要考慮。至於爲什麼它在CPU設備上運行得更好...

  1. 使用你的算法,工作項目需要不同的時間來執行。隨着測試數量的增長,他們需要更長的時間。一個GPU上的工作組將不會完成,直到其所有項目完成後,一些硬件將保持空閒狀態,直到完成最後一項。在CPU上,它的行爲更像循環遍歷內核項目的循環,因此計算每個項目所需的週期差異不會顯着影響性能。
  2. 'A'沒有被內核使用。它不應該被複制,除非它被使用。看起來你想測試A [i],而不是'我'本身。

我認爲gpu在基於FFT的素數計算甚至篩選算法上會好得多。

{ 
    int t; 
    int i = get_global_id(0); 
    int end = sqrt(i); 

    if(i%2){ 
     B[i] = 0; 
    }else{ 
     B[i] = 1; //assuming only that it should be non-zero 
    } 
    for (t = 3; (t<=end)&&(B[i] > 0) ; t+=2) { 
     if (i % t == 0) { 
      B[ i ] = 0; 
     } 
    } 
} 
相關問題