簡體   English   中英

在iOS中快速比較數組

[英]fast comparison of arrays in iOS

我需要將一個較小的2D值數組移動到一個較大的2D值數組周圍,並將大於該較小數組中的對應值的較大數組的任何值設置為較小數組的值。 考慮一下圖像合成,但是使用兩個2D浮點數組。 我需要盡可能快地執行此操作。 只是想知道是否有某種方法可以使用NEON Assembly,Accelerate框架或我沒有聽說過的其他方法進行優化。 有沒有什么比雙重嵌套for循環來比較和替換值快得多的呢? 例如,將值存儲為1D數組而不是2D數組會更快嗎? 還是更快地跨行訪問值而不是向下訪問每一列? 只是想擠出我可以獲得的任何額外速度,但不確定如何。

我不知道Accelerate框架中的任何功能都能滿足您的需求。 您絕對可以使用NEON來加速它,而無需直接使用匯編語言,使用vmin_f32內部函數一次處理兩對浮點數,或使用vminq_f32一次處理四對浮點數。

這些鏈接可能有助於您開始使用內在函數,但是我真的沒有更好的建議給您:

如何在ARM Cortex-a8中使用乘法和累加內在函數?
ARM信息中心-NEON內部
ARM NEON優化。 一個例子

我通過搜索neon intrinsics tutorial找到了那些。

此外,開發人員工具包還包含一些ARM體系結構文檔:

Xcode 4.2: /Developer/Library/PrivateFrameworks/DTISAReferenceGuide.framework/Versions/A/Resources/ARMISA.pdf
Xcode 4.3: /Applications/Xcode.app/Contents/Applications/Instruments.app/Contents/Frameworks/DTISAReferenceGuide.framework/Versions/A/Resources/ARMISA.pdf

如果需要比較一維C structs數組,可以嘗試memcmp()來查看它是否比for循環更有效。 如果您可以負擔一些數組哈希,則可以在數組不同的情況下顯着提高性能。 例如,如果您有一個浮點數數組,則可以將它們的總和用作哈希。 如果數組的哈希值不同,則不必完全比較數組。 另一方面,如果您期望數組實際上在大多數情況下是相等的,則哈希的計算只會減慢速度。

在散列計算方面發揮創意也可能會有所幫助。 在2D陣列的情況下,散列可以是一維數組散列的多項式或者甚至一個struct與像陣列的尺寸,一維數組散列的散列等的元數據

編輯:在最壞的情況下(當數組相等時)比較大型浮點數組時,在我的機器上, memcmp()比簡單的單線程for循環快約2倍。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM