使用 AutoBench 测试大型输入时标准报告无效
Invalid Criterion report when testing on large inputs with AutoBench
几天以来,我一直在使用 AutoBench 测试欧拉筛在不同输入尺寸下的性能。
我的测试只要求欧拉筛生成的列表中的第 n 个素数。
虽然标准在 n 的小输入上运行良好,但当 n 大于 7000 时似乎无法生成有效报告。
这是我测试的 Input.hs 文件:
eS :: Int -> Int
eS x = (eulerSieve [2..]) !! x where
eulerSieve cs@(p:tcs) = p:eulerSieve (minus tcs (map (p*) cs))
tDat :: UnaryTestData Int
tDat =
[ (1000, return 1000)
, (2000, return 2000)
, (3000, return 3000)
, (4000, return 4000)
, (5000, return 5000)
, (6000, return 6000)
, (7000, return 7000)
, (8000, return 8000)
, (9000, return 9000)
, (10000, return 10000)
, (11000, return 11000)
, (12000, return 12000)
, (13000, return 13000)
, (14000, return 14000)
, (15000, return 15000)
, (16000, return 16000)
, (17000, return 17000)
, (18000, return 18000)
, (19000, return 19000)
, (20000, return 20000)
]
ts :: TestSuite
ts = def {
_progs = ["eS"],
_dataOpts = Manual "tDat"
}
这是我得到的错误:
benchmarking Input Size 8000/Input.eS
• Executed benchmarking file ✔
• Generating test report
File error: Invalid Criterion report: Error in $: not enough input
Testing cancelled. Press any key to exit...
Leaving AutoBench.
我认为这与程序回答第 n 个素数所需的执行时间有关,但我没有在网上找到任何东西,但官方文档没有提及任何相关内容。
经过一些分析后,我发现当 n 大于 7000 时,欧拉程序会迅速使 ram 饱和,从而导致 Criterion 崩溃。
解决此问题的唯一方法是增加 ram 或切换到不同的 algorithm/implementation。
几天以来,我一直在使用 AutoBench 测试欧拉筛在不同输入尺寸下的性能。
我的测试只要求欧拉筛生成的列表中的第 n 个素数。
虽然标准在 n 的小输入上运行良好,但当 n 大于 7000 时似乎无法生成有效报告。
这是我测试的 Input.hs 文件:
eS :: Int -> Int
eS x = (eulerSieve [2..]) !! x where
eulerSieve cs@(p:tcs) = p:eulerSieve (minus tcs (map (p*) cs))
tDat :: UnaryTestData Int
tDat =
[ (1000, return 1000)
, (2000, return 2000)
, (3000, return 3000)
, (4000, return 4000)
, (5000, return 5000)
, (6000, return 6000)
, (7000, return 7000)
, (8000, return 8000)
, (9000, return 9000)
, (10000, return 10000)
, (11000, return 11000)
, (12000, return 12000)
, (13000, return 13000)
, (14000, return 14000)
, (15000, return 15000)
, (16000, return 16000)
, (17000, return 17000)
, (18000, return 18000)
, (19000, return 19000)
, (20000, return 20000)
]
ts :: TestSuite
ts = def {
_progs = ["eS"],
_dataOpts = Manual "tDat"
}
这是我得到的错误:
benchmarking Input Size 8000/Input.eS
• Executed benchmarking file ✔
• Generating test report
File error: Invalid Criterion report: Error in $: not enough input
Testing cancelled. Press any key to exit...
Leaving AutoBench.
我认为这与程序回答第 n 个素数所需的执行时间有关,但我没有在网上找到任何东西,但官方文档没有提及任何相关内容。
经过一些分析后,我发现当 n 大于 7000 时,欧拉程序会迅速使 ram 饱和,从而导致 Criterion 崩溃。
解决此问题的唯一方法是增加 ram 或切换到不同的 algorithm/implementation。