Phiên bản ngắn, "không".
Bài viết đó rất cổ xưa và thậm chí không áp dụng cho các hệ thống x86 hiện đại, không kể ARM. Một dàn diễn viên đơn giản với số nguyên là khá nhanh trên ARMv7 (iPhone 3GS/4), mặc dù có một gian hàng khiêm tốn chuyển dữ liệu từ thanh ghi VFP/NEON sang thanh ghi mục đích chung. Tuy nhiên, do dữ liệu float
của bạn có thể đến từ việc tính toán được thực hiện trong sổ đăng ký VFP/NEON, bạn sẽ phải trả tiền cho di chuyển đó bất kể bạn thực hiện chuyển đổi như thế nào.
Tôi không nghĩ rằng đây là một con đường có lợi nhuận để tối ưu hóa trừ khi bạn có dấu vết cho thấy rằng đây là một nút cổ chai lớn cho chương trình của bạn. Thậm chí sau đó, chuyển đổi nhanh nhất là chuyển đổi bạn không làm; bạn sẽ hầu như luôn luôn tốt hơn trong việc tìm kiếm các cách thuật toán để loại bỏ các chuyển đổi khỏi chương trình của bạn.
Nếu bạn làm thực cần phải tối ưu hóa chuyển đổi, nhìn vào vcvt.i32.f32
hướng dẫn, chuyển đổi một vector của hai hoặc bốn số dấu chấm động để một vector của hai hoặc bốn số nguyên mà không di chuyển dữ liệu ra khỏi NEON đăng ký (và do đó, mà không phát sinh gian hàng mà tôi đã đề cập). Tất nhiên, bạn sẽ cần phải thực hiện các phép tính số nguyên tiếp theo của bạn trên đơn vị NEON để có thể tối ưu hóa lợi nhuận.
Câu hỏi: Bạn là gì thực sự đang cố gắng làm gì? Tại sao bạn nghĩ rằng bạn cần chuyển đổi float-> int nhanh hơn?
Nguồn
2010-08-15 05:50:26
Vui lòng không đặt tên cho chức năng như thế này 'Chuyển đổi' trong mã thực: P –
@Billy: Tôi hiểu rõ điểm của bạn. Floor sẽ tốt hơn :-) –
trở lại trong ngày (15 hoặc nhiều năm trước) đã có một vấn đề hiệu suất trên x86 khi thực hiện bình thường typecasts (int) afloat, điều này là do float2int mặc định trong thanh ghi fpu là một tầng và không phải là một vòng. Vì vậy, cho mã để được nhanh chóng trong thời đại đặc biệt lắp ráp đã được viết. Bất kỳ mã nào được lấy từ thời điểm đó sẽ mong đợi chuyển đổi float sang số nguyên để sử dụng thao tác sàn so với một vòng bình thường. Tuy nhiên bạn có thể nhận được một hit kép bằng cách sử dụng một chức năng sàn và sau đó một diễn viên để int so với chỉ là một diễn viên để int (vòng đến gần nhất). – Medran