You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

performance_utils.h 5.1 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. #pragma once
  2. #include <iostream>
  3. #include <iomanip>
  4. #include <string>
  5. // ============================================================================
  6. // 性能计算和显示工具
  7. // ============================================================================
  8. class PerformanceCalculator {
  9. public:
  10. // ReduceSum性能计算
  11. struct ReduceSumMetrics {
  12. double throughput_gps; // G elements/s
  13. };
  14. static ReduceSumMetrics calculateReduceSum(int size, float time_ms) {
  15. ReduceSumMetrics metrics;
  16. metrics.throughput_gps = (size / 1e9) / (time_ms / 1000.0);
  17. return metrics;
  18. }
  19. // SortPair性能计算
  20. struct SortPairMetrics {
  21. double throughput_gps; // G elements/s
  22. };
  23. static SortPairMetrics calculateSortPair(int size, float time_ms) {
  24. SortPairMetrics metrics;
  25. metrics.throughput_gps = (size / 1e9) / (time_ms / 1000.0);
  26. return metrics;
  27. }
  28. // TopkPair性能计算
  29. struct TopkPairMetrics {
  30. double throughput_gps; // G elements/s
  31. };
  32. static TopkPairMetrics calculateTopkPair(int size, int k, float time_ms) {
  33. TopkPairMetrics metrics;
  34. metrics.throughput_gps = (size / 1e9) / (time_ms / 1000.0);
  35. return metrics;
  36. }
  37. };
  38. // ============================================================================
  39. // 性能显示工具
  40. // ============================================================================
  41. class PerformanceDisplay {
  42. public:
  43. // 显示ReduceSum性能表头
  44. static void printReduceSumHeader() {
  45. std::cout << "\nReduceSum 性能测试..." << std::endl;
  46. std::cout << "数据类型: float -> float" << std::endl;
  47. std::cout << "计算公式:" << std::endl;
  48. std::cout << " 吞吐量 = 元素数 / 时间(s) / 1e9 (G/s)" << std::endl;
  49. std::cout << std::setw(12) << "数据规模" << std::setw(15) << "时间(ms)"
  50. << std::setw(20) << "吞吐量(G/s)" << std::endl;
  51. std::cout << std::string(47, '-') << std::endl;
  52. }
  53. // 显示SortPair性能表头
  54. static void printSortPairHeader() {
  55. std::cout << "\nSortPair 性能测试..." << std::endl;
  56. std::cout << "数据类型: <float, uint32_t>" << std::endl;
  57. std::cout << "计算公式:" << std::endl;
  58. std::cout << " 吞吐量 = 元素数 / 时间(s) / 1e9 (G/s)" << std::endl;
  59. std::cout << std::setw(12) << "数据规模" << std::setw(15) << "升序(ms)" << std::setw(15) << "降序(ms)"
  60. << std::setw(16) << "升序(G/s)" << std::setw(16) << "降序(G/s)" << std::endl;
  61. std::cout << std::string(78, '-') << std::endl;
  62. }
  63. // 显示TopkPair性能表头
  64. static void printTopkPairHeader() {
  65. std::cout << "\nTopkPair 性能测试..." << std::endl;
  66. std::cout << "数据类型: <float, uint32_t>" << std::endl;
  67. std::cout << "计算公式:" << std::endl;
  68. std::cout << " 吞吐量 = 元素数 / 时间(s) / 1e9 (G/s)" << std::endl;
  69. }
  70. static void printTopkPairDataHeader() {
  71. std::cout << std::setw(8) << "k值" << std::setw(15) << "升序(ms)" << std::setw(15) << "降序(ms)"
  72. << std::setw(16) << "升序(G/s)" << std::setw(16) << "降序(G/s)" << std::endl;
  73. std::cout << std::string(74, '-') << std::endl;
  74. }
  75. // 显示性能数据行
  76. static void printReduceSumData(int size, float time_ms, const PerformanceCalculator::ReduceSumMetrics& metrics) {
  77. std::cout << std::setw(12) << size << std::setw(15) << std::fixed << std::setprecision(3)
  78. << time_ms << std::setw(20) << std::setprecision(3) << metrics.throughput_gps << std::endl;
  79. }
  80. static void printSortPairData(int size, float asc_time, float desc_time,
  81. const PerformanceCalculator::SortPairMetrics& asc_metrics,
  82. const PerformanceCalculator::SortPairMetrics& desc_metrics) {
  83. std::cout << std::setw(12) << size << std::setw(15) << std::fixed << std::setprecision(3)
  84. << asc_time << std::setw(15) << desc_time << std::setw(16) << std::setprecision(3)
  85. << asc_metrics.throughput_gps << std::setw(16) << desc_metrics.throughput_gps << std::endl;
  86. }
  87. static void printTopkPairData(int k, float asc_time, float desc_time,
  88. const PerformanceCalculator::TopkPairMetrics& asc_metrics,
  89. const PerformanceCalculator::TopkPairMetrics& desc_metrics) {
  90. std::cout << std::setw(8) << k << std::setw(15) << std::fixed << std::setprecision(3)
  91. << asc_time << std::setw(15) << desc_time << std::setw(16) << std::setprecision(3)
  92. << asc_metrics.throughput_gps << std::setw(16) << desc_metrics.throughput_gps << std::endl;
  93. }
  94. // 显示性能文件保存消息
  95. static void printSavedMessage(const std::string& filename) {
  96. std::cout << "\n性能结果已保存到: " << filename << std::endl;
  97. }
  98. };