Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rust:从切片到编译的排序代码的定级内置排序给x16带来了什么区别?_Rust - Fatal编程技术网

Rust:从切片到编译的排序代码的定级内置排序给x16带来了什么区别?

Rust:从切片到编译的排序代码的定级内置排序给x16带来了什么区别?,rust,Rust,我想在Rust编写的排序算法上运行一些基准测试(基准测试使用Criteria和cargo bench)。当我比较编译版本和内置sort()时,我发现速度上有一个数量级的差异 我的问题是:切片上的“开箱即用”排序如何比作为库编译的代码快得多 为了尝试将苹果与苹果进行比较,我采用了Rust源代码()中的快速排序算法。当我直接将其与开箱即用的sort()函数进行比较时,我注意到速度上有x16的差异。我还尝试在Cargo.toml中使用优化设置,但这些设置没有太大区别 我的测试设置如下: #[宏使用]

我想在Rust编写的排序算法上运行一些基准测试(基准测试使用Criteria和cargo bench)。当我比较编译版本和内置sort()时,我发现速度上有一个数量级的差异

我的问题是:切片上的“开箱即用”排序如何比作为库编译的代码快得多

为了尝试将苹果与苹果进行比较,我采用了Rust源代码()中的快速排序算法。当我直接将其与开箱即用的sort()函数进行比较时,我注意到速度上有x16的差异。我还尝试在Cargo.toml中使用优化设置,但这些设置没有太大区别

我的测试设置如下:

#[宏使用]
外部板条箱标准;
外部板条箱分类试验;
外部板条箱;
使用准则::准则;
使用标准::BenchmarkId;
使用兰德::前奏::*;
使用sort_test::rust_libcore::{heapsort,quicksort};
pub fn标准\u基准(c:&mut标准){
设mut group=c.benchmark_group(“sort”);
设mut rng=thread_rng();
对于0..10中的j{
让mut arr_A:[u8;160]=[0;160];
让mut arr_B:[u8;160]=[0;160];
对于0中的i..arr_A.len(){
让mut e:u8=rng.gen();
环路{
让mut是唯一的=真;
对于0..i中的j{
如果arr_A[j]==e{
e=rng.gen();
is_unique=false;
打破
}
}
如果你是唯一的{
打破
}
}
arr_A[i]=e;
arr_B[i]=e;
}
带输入(基准ID::new(“锈色快速排序”,j)、&j、| b、j | b.iter(|快速排序(&mut arr|A,&mut u8::lt)))的组台架;
带输入(基准ID::new(“rust heapsort”,j)、&j、| b、j | b.iter(| heapsort(&mut arr|U A,&mut u8::lt)))的工作台组;
带有输入(BenchmarkId::new(“内置不稳定”,j),&j,| b,j | b.iter(| arr|u C.sort_unstable()));
带有输入(BenchmarkId::new(“内置稳定”,j),&j,| b,j | b.iter(| arr|u C.sort()));
}

总而言之,即使在比较(据我所知)实际锈蚀排序代码与内置等效代码时,我也看到x16在速度上的差异。这是为什么?我知道基准测试可能是一门微妙的艺术,也许我的基准编写不正确。

啊,我发现了我的错误

在基准测试的每次迭代中,我都会将相同的数组传递给sort函数。第一次迭代中,sort实际上完成了它的工作,但是如果数组已经排序,内置的sort函数会快速退出(因此在100次迭代中的99次迭代中,内置的sort函数只是提前退出)。我复制的代码只是快速排序/堆排序,没有快速退出检查。我正在测试的其他排序算法也没有快速退出