2010-07-22 40 views

Trả lời

54

Một trong những điểm khác biệt lớn nhất là kiến ​​trúc armv6 có hỗ trợ phần cứng cho số học dấu chấm động chính xác gấp đôi, trong khi armv7 chỉ cung cấp hỗ trợ phần mềm kế thừa cho số học dấu chấm động chính xác gấp đôi.

Để bù lại, kiến ​​trúc armv7 có đơn vị "NEON" cung cấp hỗ trợ phần cứng nhanh chóng nhanh chóng cho số học điểm chính xác đơn lẻ.

Đây là thứ bạn cần phải tính đến nếu bạn đang làm bất cứ điều gì liên quan đến số học dấu chấm động, cho dù bạn đang thực hiện nó với độ chính xác đơn hay kép. Nếu bạn đang thực hiện nó với độ chính xác gấp đôi, nhưng không nhất thiết cần số lượng chính xác đó, bạn có thể tăng hiệu suất đáng kể trên các thiết bị armv7 bằng cách sử dụng độ chính xác đơn thay thế.

Apple đã trình bày rất nhiều sự khác biệt giữa armv6 và armv7 và giới thiệu về khung tăng tốc trong một trong các phiên WWDC của họ trong năm nay. Các video sẽ vẫn có sẵn trên iTunes (tính đến tháng 7 '10).

+5

Trên thực tế, theo Stephen Canon, cả hoạt động điểm động đơn và đôi chính xác được thực hiện trong phần cứng trong armv6: http://stackoverflow.com/questions/1622729/double-vs-float-on-the-iphone/ 1622786 # 1622786 –

+0

Đúng vậy. Tôi đã bỏ lỡ điều đó. – Jasarien

3

Bạn phải biên dịch cho cả hai nếu bạn muốn ứng dụng của mình chạy trên iPad và tất cả các kiểu máy nghe nhạc iPod/iPhone. Các thiết bị iOS cũ hơn sử dụng arm6 và các thiết bị mới sử dụng arm7.

Lý do duy nhất để không biên dịch cho một hoặc khác sẽ giảm kích thước ứng dụng vì nó chỉ cần một phiên bản được biên dịch của mã. Nhưng trừ khi bạn có một codebase nghiêm trọng lớn, sự khác biệt về kích thước tệp này sẽ khá nhỏ.

+0

Vậy tầm quan trọng của kiến ​​trúc hoạt động trong trình đơn thả xuống để xây dựng là gì? –

+0

Tôi tin rằng họ đã thực hiện điều đó trong SDK mới nhất. Nó thường được overriden bởi các thiết lập xây dựng của bạn anyway. –

3

arm7 được tối ưu hóa hơn cho iPod Touch (thế hệ thứ 3) và iPhone 3GS và mới hơn. Bạn cần sử dụng 'Standard/arm6 + arm7' khi tạo cho các thiết bị cũ hơn. Trong thực tế, tôi đã không thấy nhiều sự khác biệt về hiệu suất trong các ứng dụng của mình.

79

Các thiết bị iOS cũ hơn (iPhone, iPhone 3G, iPod touch thế hệ thứ nhất và thứ hai) có CPU chỉ hỗ trợ tập lệnh armv6. IPhone 3G S (và iPad và iPod touch thế hệ thứ ba) có bộ xử lý mới hơn cũng hỗ trợ bộ lệnh armv7. Nói chung, armv7 nhanh hơn trên các bộ vi xử lý mới hơn và khuyên bạn ít nhất bao gồm một bản build armv7 trong các ứng dụng của bạn trong tương lai (trong một ứng dụng chỉ dành cho iPad, bạn có thể chỉ cần xây dựng cho armv7).

Như Jasarien chỉ ra, diện tích chênh lệch lớn nhất giữa các bộ chỉ lệnh là trong các phép toán dấu phẩy động. Trên armv6, các ứng dụng có xu hướng được xây dựng bằng cách sử dụng tập lệnh Thumb đã giảm để tạo ra các tệp nhị phân nhỏ hơn, nhưng hiệu suất điểm nổi của Thumb là khủng khiếp. Do đó, bạn cần tắt Thumb là bạn muốn các phép tính dấu phẩy động nhanh hơn. Trên armv7, tập lệnh Thumb-2 không còn giới hạn này, do đó, Apple khuyên bạn nên biên dịch bằng hầu hết mọi lúc.

Bạn có thể đặt cài đặt Tạo hình thu nhỏ có điều kiện để tắt thiết bị cũ và bật cho các thiết bị mới hơn. Để thực hiện việc này, hãy chuyển tới cài đặt Xcode của bạn và chọn tùy chọn Biên dịch cho ngón tay cái. Vào menu ở phía dưới bên trái của màn hình và chọn tùy chọn Add Build Setting Condition. Trong điều kiện thiết lập build mới, chọn ARMv6 cho kiến ​​trúc, tắt Thumb cho nó, thêm một điều kiện khác, chọn ARMv7 cho kiến ​​trúc của nó, và kích hoạt Thumb cho nó.

Theo câu trả lời của Stephen Canon here, cả hoạt động điểm động đơn và đôi chính xác đều được hỗ trợ trong phần cứng trong armv6.Tôi đã tìm thấy rằng số học chính xác đơn thực hiện tốt hơn một chút trên nền tảng này, có lẽ do nhiều hoạt động phù hợp với bộ nhớ cache. Trên armv7, điểm neo nổi SIMON SIMD chỉ hoạt động trên các hoạt động chính xác đơn, do đó có thể có sự khác biệt lớn về hiệu suất giữa các hoạt động chính xác đơn và đôi.

câu hỏi khác có thể là mối quan tâm về vấn đề này bao gồm:

+0

Kể từ Xcode 4.3, là một phần của quá trình di chuyển dự án, Apple đang thiết lập GCC_THUMB_SUPPORT = NO vô điều kiện. Bất kỳ bình luận? Dường như truy cập trực quan với tôi và (tất nhiên/không may) không có gì từ Apple về việc này. Tài liệu của họ vẫn nói sử dụng ngón tay cái cho armv7. – smparkes

+0

@smparkes - Nó có thể là một trục trặc trong quá trình di chuyển dự án, bởi vì tập lệnh không nên thay đổi. Nó vẫn nên được thuận lợi để có hướng dẫn Thumb-2 được tạo ra cho ARMv7. Trường hợp xấu nhất, hồ sơ ứng dụng của bạn (bộ nhớ và hiệu suất) trong cả hai điều kiện để xem cách cài đặt thay đổi mọi thứ. Mỗi khi tôi đã thử điều này, xây dựng cho Thumb đã giúp đỡ trên ARMv7. –

+0

Cảm ơn, Brad. Tôi nghĩ rằng tôi sẽ để lại phần ghi đè hiện tại của tôi trong và từ chối của Xcode. Bây giờ để sửa chữa những thứ khác 4.3 đã phá vỡ ... – smparkes

4

Đối với tôi, những lợi thế chính của ARMv7 là :

  • ngón tay cái-2
  • NEON

NEON phải được mã hóa một cách rõ ràng cho, bạn không tận dụng lợi thế của nó bằng cách đơn giản biên dịch lại, nhưng nếu bạn có thể đầu tư thời gian nó có thể thúc đẩy đa phương tiện/chơi game hoạt động theo hệ số 8. Tuy nhiên thumb-2 giảm khá nhiều kích thước mã với hầu như không có nhược điểm (trái với ngón tay cái trên ARMv6, làm cho mã dấu phẩy động chậm hơn nhiều so với chế độ ARM). Tất nhiên, việc thêm một phiên bản thực thi khác của bạn trong ARMv7 sẽ không làm giảm kích thước thực thi của bạn, nhưng nó sẽ làm giảm mã của bạn trong bộ nhớ, bộ nhớ cache, v.v.

Các vấn đề liên quan