2011-01-06 52 views
1

我的問題是特定於iPhone,iPod和iPad的,因爲我假設架構有很大的不同。我希望在某個地方有一個規範(對於不同的芯片),或者爲每個特定指令測量T的可靠方法。我知道我可以使用任意數量的工具來衡量所用的聚合處理器時間,使用的內存等。我想在較低的層次上進行量化。如何找到操作的時間值來優化新算法設計?

因此,我能夠弄清楚我經歷了算法的主要部分多少次。例如,我在一個樸素的實現中迭代了n * (n-1)次,在另一個迭代中迭代了n(最好的情況)和n + n * (n-1)(最差的情況)。我還可以對指令總數(+ - =%* /和邏輯語句)進行合理計數,我可以比較這些計數,但假設每個操作的權重是相同的。此外,我不知道如何加權邏輯陳述的實際時間值(if,else,for,while)與數學運算符......每次我是「if」還是像「+」一樣工作用它?我很想知道在哪裏可以找到這些信息。因此,爲了清楚起見,我的目標是發現CPU(或GPU或任何U)需要多少處理器時間,以便能夠圍繞處理器時間設計最佳算法。有人能給我一個iOS硬件從何入手的想法嗎?

編輯:This link to ClockServices.c SIMD在開發者平臺上的東西可能是對此感興趣的人的一個好開始。今晚我可能還會再喝幾杯咖啡;

+0

我想評估的大部分只是C.我會很高興。但是,知道通過NSArray迭代的代價是很好的;但這聽起來像它可能是複雜和可變的。我只是不知道我能找到多少希望......我肯定會接受基本的C操作;) – Rab 2011-01-06 09:45:35

+0

是的,我想到了(百萬測試),但這是一個很好的評論。我認爲像你說的那樣運行測試,但我對結果有兩個恐懼。其中之一是我的測試在某種程度上會很幼稚,我會爲編譯器決定做不同事情時所沒有的信息做很多工作。其次,我只有一些設備,有些有不同的芯片。所以我最親愛的希望是,也許有人對特定處理器的C操作的時間價值進行了估計。 – Rab 2011-01-06 09:56:51

+0

從NSArray評論中得到一絲笑意。我希望我的NSArray不會對我或某物產生藍屏效果;) – Rab 2011-01-06 09:58:14

回答

2

在現代平臺上,處理器時間並不是唯一的限制因素。內存訪問通常是。

儘管如此,處理器時間:
您在爲處理器負載的估計基本方法是確定的,雖然,是明智的:請根據您的典型平臺,知識成本的粗略估計。

In this article表1顯示了.NET中典型基本操作的時間。儘管您的平臺可能會有所不同,但相對時間通常非常相似。也許你可以找到 - 甚至可以 - 爲iStuff做一個。

(我還沒有碰到過一個如此徹底其他平臺,除了處理器/指令集手冊,但他們處理的彙編指令)

內存位置:
高速緩存未命中可以花費你幾百個的週期,一個磁盤訪問千倍以上。因此,控制您的內存訪問模式(即減少工作集,重構和以緩存友好的方式訪問數據)是評估算法的重要部分。

0

xCode擁有測量每個功能/操作性能的工具,您可以簡單地使用它們。