Files
x264_sad_benchmark/unittest.cpp
2025-03-17 20:57:27 +08:00

50 lines
1.6 KiB
C++

#include <iostream>
#include <cassert>
#include <chrono>
#include <cstdint> // 使用 std::uint8_t 替代用户定义的 uint8_t
#include <limits>
// 声明外部实现的 SAD 函数(不包含函数体)
extern "C" {
int x264_pixel_sad_16x16(uint8_t *pix1, int i_stride_pix1,
uint8_t *pix2, int i_stride_pix2);
}
// 单元测试函数(保持不变)
void test_sad() {
// ...(与之前相同)
}
// 改进的计时函数(多次执行取平均)
void measure_time(int iterations = 1000) {
// 准备测试数据(可填充任意数据)
uint8_t pix1[16 * 16] = {0};
uint8_t pix2[16 * 16] = {0};
// 避免编译器优化掉循环
int result_sum = 0;
auto start = std::chrono::high_resolution_clock::now();
for (int i = 0; i < iterations; ++i) {
result_sum += x264_pixel_sad_16x16(pix1, 16, pix2, 16);
}
auto end = std::chrono::high_resolution_clock::now();
// 计算时间差(微秒)
auto total_duration = std::chrono::duration_cast<std::chrono::microseconds>(end - start).count();
auto avg_duration = total_duration / static_cast<double>(iterations);
std::cout << "Total Execution Time for " << iterations << " iterations: "
<< total_duration << " μs" << std::endl;
std::cout << "Average Execution Time: " << avg_duration << " μs" << std::endl;
std::cout << "Total Result Sum: " << result_sum << std::endl; // 验证结果未被优化掉
}
int main() {
// 运行单元测试
test_sad();
std::cout << "All tests passed!" << std::endl;
// 执行计时(默认 1000 次迭代)
measure_time();
return 0;
}