小编lwi*_*lwi的帖子

为什么具有不同整数参数大小的相同函数更快?

从数学到通用编程这本书的推动下,我正在使用函数和不同的整数大小.

我有两个不同的主筛实现,可以使用u16u32.我用它们进行基准测试cargo bench,u16方法总是比u32方法快一点.

为什么会这样?我的假设是我的处理器(i5-7300u)能够同时进行两次添加,u16但不能用于u32u64.然而,我不知道如何验证这一点.我已经附上了大会.

基准测试结果

test tests :: bench_sift2 ... bench:74,093 ns/iter(+/- 3,765)

test tests :: bench_sift2_u16 ... bench:61,136 ns/iter(+/- 3,389)

编辑

使用不同的数组大小并使用布尔数组而不是向量的想法导致约.两种功能的速度相同.实际上,当两个向量的大小为1 << 15时,性能差异才显着.

编辑2

一些有趣的观察:我在Windows 10 Pro 10.0.1的Windows平板电脑上运行此代码.或多或少意外,我只是使用不同的省电配置运行基准测试.当我将配置设置为最高性能时,我会看到或多或少的结果报告如下.如果我将配置设置为任何其他级别,我会看到两个函数看起来行为相同的结果,但测量误差会急剧增加.

锈编码

#![feature(iterator_step_by)]
#![feature(test)]

extern crate test;

fn main() {
   let vec = sift2(1 << 15);
   // let vec = sift2_u16(1 << 15);
   println!("{}",vec[0]);
}


fn sift2(n: usize) -> Vec<bool> { …
Run Code Online (Sandbox Code Playgroud)

performance rust

7
推荐指数
1
解决办法
403
查看次数

与生产环境相比,如何在Xtext测试中使用不同的对象注入?

我尝试开始对中型Xtext项目进行单元测试。

生成器当前依赖于一些我想在测试中模拟的外部资源。因此,我将所需的对象通过@Inject注入Generator类。

例如在伪代码中:

class MyGenerator implements IGenerator{

@Inject
ExternalResourceInterface resourceInterface;

...

}
Run Code Online (Sandbox Code Playgroud)

我在语言RuntimeModule中创建了实际的绑定:

class MyRuntimeModule{
...
    @Override
    public void configure(Binder binder) {
        super.configure(binder);

        binder.bind(ExternalResourceInterface .class).to(ExternalResourceProductionAcess.class);
    }
...
}
Run Code Online (Sandbox Code Playgroud)

这对于生产环境而言效果很好。

但是,在生成器测试用例中,我想用我CompilationTestHelper的模拟版本替换绑定,以便对的以下调用使用模拟:

    compiler.assertCompilesTo(dsl, expectedJava);
Run Code Online (Sandbox Code Playgroud)

题:

我在哪里告诉guice / Xtext将注入绑定到模拟对象?

eclipse dsl junit guice xtext

3
推荐指数
1
解决办法
112
查看次数

Rhs 在有关 PartialEq 的编译器错误消息中指的是什么?

我正在尝试创建一个函数,该函数将两个迭代器作为参数并通过引用迭代这些项目。每个Iterator项目都应该实现PartialEq.

我的第一次尝试是:

fn compute<T: Iterator>(first: T, second: T, len: usize) -> usize
where
    T::Item: std::cmp::PartialEq,
{
    // ...
}
Run Code Online (Sandbox Code Playgroud)

这编译但迭代(据我所知)不是通过引用而是通过值,并且编译器在迭代时抱怨移动。

我的第二次尝试是这样的:

fn compute<'a, T>(first: T, second: T, len: usize) -> usize
where
    T: Iterator<Item = &'a std::cmp::PartialEq>,
{
    //...
}
Run Code Online (Sandbox Code Playgroud)

导致编译器错误:

fn compute<T: Iterator>(first: T, second: T, len: usize) -> usize
where
    T::Item: std::cmp::PartialEq,
{
    // ...
}
Run Code Online (Sandbox Code Playgroud)

Rhs编译器在这里指的(右侧?)是什么意思?为什么我需要引用它?如何将基于有界引用Iterator的函数传递给函数?

iterator rust

1
推荐指数
1
解决办法
685
查看次数

标签 统计

rust ×2

dsl ×1

eclipse ×1

guice ×1

iterator ×1

junit ×1

performance ×1

xtext ×1