FLOP (các chữ thường cho biết số nhiều FLOP, theo nhận xét của Martinho Fernandes) là tham chiếu đến hướng dẫn điểm động của ngôn ngữ máy, do đó, nó phụ thuộc vào số lượng lệnh mà mã của bạn biên dịch xuống.
Trước hết, nếu tất cả các biến này là số nguyên, thì không có FLOP trong mã này. Tuy nhiên, giả sử rằng ngôn ngữ của bạn nhận ra tất cả các hằng số và các biến này là các biến số dấu chấm động chính xác đơn (sử dụng độ chính xác đơn làm cho việc tải các hằng số dễ dàng hơn).
Mã này có thể biên dịch (trên MIPS):
Assignment of variables: x is in $f1, a is in $f2, i is in $f3.
All other floating point registers are compiler-generated temporaries.
$f4 stores the loop exit condition of 10.0
$f5 stores the floating point constant 1.0
$f6 stores the floating point constant 2.0
$t1 is an integer register used for loading constants
into the floating point coprocessor.
lui $t1, *upper half of 0.0*
ori $t1, $t1, *lower half of 0.0*
lwc1 $f3, $t1
lui $t1, *upper half of 10.0*
ori $t1, $t1, *lower half of 10.0*
lwc1 $f4, $t1
lui $t1, *upper half of 1.0*
ori $t1, $t1, *lower half of 1.0*
lwc1 $f5, $t1
lui $t1, *upper half of 2.0*
ori $t1, $t1, *lower half of 2.0*
lwc1 $f6, $t1
st: c.gt.s $f3, $f4
bc1t end
add.s $f1, $f1, $f5
lui $t1, *upper half of 5.0*
ori $t1, $t1, *lower half of 5.0*
lwc1 $f2, $t1
mul.s $f2, $f2, $f1
add.s $f2, $f2, $f6
add.s $f3, $f3, $f5
j st
end: # first statement after the loop
Vì vậy, theo định nghĩa của Gabe của, có 4 thất bại bên trong vòng lặp (3x add.s
và 1x mul.s
). Có 5 FLOP nếu bạn cũng tính so sánh vòng lặp c.gt.s
. Nhân số này với 10 cho tổng số 40 (hoặc 50) FLOP được chương trình sử dụng.
Trình biên dịch tối ưu hóa tốt hơn có thể nhận ra rằng giá trị a
không được sử dụng bên trong vòng lặp, do đó, nó chỉ cần tính giá trị cuối cùng của a
. Nó có thể tạo ra mã trông giống như
lui $t1, *upper half of 0.0*
ori $t1, $t1, *lower half of 0.0*
lwc1 $f3, $t1
lui $t1, *upper half of 10.0*
ori $t1, $t1, *lower half of 10.0*
lwc1 $f4, $t1
lui $t1, *upper half of 1.0*
ori $t1, $t1, *lower half of 1.0*
lwc1 $f5, $t1
lui $t1, *upper half of 2.0*
ori $t1, $t1, *lower half of 2.0*
lwc1 $f6, $t1
st: c.gt.s $f3, $f4
bc1t end
add.s $f1, $f1, $f5
add.s $f3, $f3, $f5
j st
end: lui $t1, *upper half of 5.0*
ori $t1, $t1, *lower half of 5.0*
lwc1 $f2, $t1
mul.s $f2, $f2, $f1
add.s $f2, $f2, $f6
Trong trường hợp này, bạn có 2 bổ sung và 1 so sánh bên trong vòng lặp (mutiplied 10 mang đến cho bạn 20 hoặc 30 flops), cộng với 1 nhân và 1 Ngoài ra bên ngoài vòng lặp. Do đó, chương trình của bạn hiện có 22 hoặc 32 FLOP tùy thuộc vào việc chúng tôi có tính các so sánh hay không.
nitpick: flops ** FL ** thả nổi điểm ** O ** perations ** P ** er ** S ** econd, một thước đo về hiệu suất. FLOP được ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **. FLOP (chữ thường) là số nhiều của FLOP. –
Bạn không đề cập đến các loại biến. Nếu tất cả là ints, nó là 0 flops. –
FLOPS dành riêng cho các hoạt động điểm động. Có lẽ bạn đang quan tâm đến "chu kỳ" (số ticks nó cần CPU để thực hiện một số nhiệm vụ)? –