2010-11-05 19 views
12

Tại sao hoạt động MOD đắt hơn multiplication nhiều hơn một chút so với factor of 2? Xin hãy cụ thể hơn về cách CPU thực hiện phép toán phân chia và trả về kết quả cho hoạt động MOD.MOD có hoạt động mạnh hơn CPU nhân?

Trong ví dụ sau, mỗi luồng chạy trong một giây. Thử nghiệm được thực hiện trên bộ xử lý SPARC.

// multiplication 
void someThread() { 

    int a = 10234; 
    while (true) { 
     opers++; 
     a = a * a; 
     a++; 
    } 

    // opers ~ 26 * 10^6 in a sec. 
} 

// MOD 
void someThread() { 

    int a = 10234; 
    while (true) { 
     opers++; 
     a = a % 10000007; 
     a++; 
    } 

    // opers ~ 12 * 10^6 in a sec. 
} 
+2

Cả hai ví dụ mã đều giống nhau. –

+0

Đã khắc phục sự cố. – Leonid

+0

Phiên bản có '+' ở đâu? ^^ –

Trả lời

5

thuật toán (bộ vi xử lý thực hiện việc phân chia và phép nhân bởi các thuật toán thực hiện trong cửa) cho bộ phận có nhiều tốn kém hơn cho nhân. Như một vấn đề của thực tế, một số thuật toán cho bộ phận có độ phức tạp tốt đang sử dụng phép nhân như một bước cơ bản.

Thậm chí nếu bạn sử dụng các thuật toán ngây thơ được học ở trường. Cả hai đều có sự phức tạp tiệm cận giống nhau, nhưng hằng số cho sự phân chia lớn hơn (bạn phải tìm ra chữ số và đó không phải là tầm thường, vì vậy bạn có thể lộn xộn và phải sửa mớ hỗn độn).

12

MOD là thao tác chia, không phải là phép nhân. Sư đoàn đắt hơn nhân.

Thông tin thêm về các hoạt động MOD ở đây: http://en.wikipedia.org/wiki/Modulo_operation

+3

Downvoter: Tại sao? –

+2

Robert: Điều tương tự có thể được nói về phân chia - tức là phân chia là đắt hơn bởi vì nó là một hoạt động MOD, trong khi MOD là đắt hơn so với phép nhân. Tôi muốn biết thêm chi tiết ở cấp CPU tại sao phân chia/mod đắt hơn phép nhân. Câu trả lời này lặp lại câu hỏi của tôi. – Leonid

+1

Đây là câu trả lời đúng, rõ ràng là OP không coi trọng nó để so sánh mod với div. Có phải là góc bụi trên Internet ở đâu đó mà nói về nội bộ vi xử lý sparc. –

1

Vâng, mod đắt hơn nhân, vì nó được thực hiện thông qua bộ phận. (CPU thường trả về cả thương và số dư trên phân chia.) Nhưng cả hai chủ đề của bạn đều sử dụng phép nhân. sao chép/dán lỗi?

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