50 lines
1.6 KiB
C++
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;
|
|
} |