Advertisement
Guest User

Untitled

a guest
Aug 20th, 2019
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.62 KB | None | 0 0
  1. #![feature(test)]
  2.  
  3. extern crate test;
  4.  
  5. use std::time::{Instant, Duration};
  6. use test::black_box;
  7.  
  8. pub fn iterate() -> u32 {
  9. #[inline(never)]
  10. fn inner() -> u32 {
  11. let divisor: f32 = black_box(5.25);
  12. black_box(black_box(25.0 / divisor).round() as u32);
  13. black_box(black_box(25.0 / divisor).round() as u32);
  14. black_box(black_box(25.0 / divisor).round() as u32);
  15. black_box(black_box(25.0 / divisor).round() as u32);
  16. black_box(black_box(25.0 / divisor).round() as u32);
  17. black_box(black_box(25.0 / divisor).round() as u32);
  18. black_box(black_box(25.0 / divisor).round() as u32);
  19. black_box(black_box(25.0 / divisor).round() as u32);
  20. black_box(black_box(25.0 / divisor).round() as u32);
  21. black_box(black_box(25.0 / divisor).round() as u32);
  22. black_box(black_box(25.0 / divisor).round() as u32);
  23. black_box(black_box(25.0 / divisor).round() as u32);
  24. black_box(black_box(25.0 / divisor).round() as u32);
  25. black_box(black_box(25.0 / divisor).round() as u32);
  26. black_box(black_box(25.0 / divisor).round() as u32);
  27. black_box(black_box(25.0 / divisor).round() as u32);
  28. black_box(black_box(25.0 / divisor).round() as u32);
  29. black_box(black_box(25.0 / divisor).round() as u32);
  30. black_box(black_box(25.0 / divisor).round() as u32);
  31. black_box(black_box(25.0 / divisor).round() as u32);
  32. black_box(black_box(25.0 / divisor).round() as u32);
  33. black_box(black_box(25.0 / divisor).round() as u32);
  34. black_box(black_box(25.0 / divisor).round() as u32);
  35. black_box(black_box(25.0 / divisor).round() as u32);
  36. black_box(black_box(25.0 / divisor).round() as u32);
  37. black_box(black_box(25.0 / divisor).round() as u32);
  38. black_box(black_box(25.0 / divisor).round() as u32);
  39. black_box(black_box(25.0 / divisor).round() as u32);
  40. black_box(black_box(25.0 / divisor).round() as u32);
  41. black_box(black_box(25.0 / divisor).round() as u32);
  42. black_box(black_box(25.0 / divisor).round() as u32);
  43. black_box(black_box(25.0 / divisor).round() as u32);
  44. black_box(black_box(25.0 / divisor).round() as u32);
  45. black_box(black_box(25.0 / divisor).round() as u32);
  46. black_box(black_box(25.0 / divisor).round() as u32);
  47. black_box(black_box(25.0 / divisor).round() as u32);
  48. black_box(black_box(25.0 / divisor).round() as u32);
  49. black_box(black_box(25.0 / divisor).round() as u32);
  50. black_box(black_box(25.0 / divisor).round() as u32);
  51. black_box(black_box(25.0 / divisor).round() as u32);
  52. black_box(black_box(25.0 / divisor).round() as u32);
  53. black_box(black_box(25.0 / divisor).round() as u32);
  54. black_box(black_box(25.0 / divisor).round() as u32);
  55. black_box(black_box(25.0 / divisor).round() as u32);
  56. black_box(black_box(25.0 / divisor).round() as u32);
  57. black_box(black_box(25.0 / divisor).round() as u32)
  58. }
  59.  
  60. black_box(inner());
  61. black_box(inner());
  62. inner()
  63. }
  64.  
  65. pub fn main() {
  66. const PERIOD: Duration = Duration::from_nanos(558);
  67.  
  68. let start = Instant::now();
  69.  
  70. let mut cycles: u32 = 0;
  71. let mut offset = Duration::from_nanos(0);
  72. let mut missed = 0;
  73.  
  74. loop {
  75. cycles += iterate();
  76.  
  77. if cycles >= 5000000 { break; }
  78.  
  79. let target = start + offset + (PERIOD * cycles);
  80. let mut now = Instant::now();
  81.  
  82. if now < target {
  83. while now < target {
  84. now = Instant::now();
  85. }
  86. } else {
  87. offset += now - target;
  88. missed += 1;
  89. }
  90. }
  91.  
  92. println!("{}", missed);
  93. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement