小编luk*_*uke的帖子

在单独的模块中使用时,使用未声明的类型或模块`std`

我有以下代码:

pub mod a {
    #[test]
    pub fn test() {
        println!("{:?}", std::fs::remove_file("Somefilehere"));
    }
}
Run Code Online (Sandbox Code Playgroud)

我编译时遇到错误:

error[E0433]: failed to resolve. Use of undeclared type or module `std`
 --> src/main.rs:4:24
  |
4 |         println!("{}", std::fs::remove_file("Somefilehere"));
  |                        ^^^ Use of undeclared type or module `std`
Run Code Online (Sandbox Code Playgroud)

但是,删除内部模块并编译它自己包含的代码可以正常工作:

#[test]
pub fn test() {
    println!("{:?}", std::fs::remove_file("Somefilehere"));
}
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么?如果模块位于单独的文件中,我会得到相同的错误:

main.rs

pub mod a;
Run Code Online (Sandbox Code Playgroud)

a.rs

#[test]
pub fn test() {
    println!("{:?}", std::fs::remove_file("Somefilehere"));
}
Run Code Online (Sandbox Code Playgroud)

rust

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

最大化tensorflow多GPU性能

我想知道是否有人可以建议如何在4 GPU设置中从张力流中获得最佳性能.

作为测试,我在32x32输入上创建了两个相同的网络(18个ish层剩余网络,带有小型滤波器组(范围从16-128).批量大小512,每个GPU 128个.).一个在MXNet和一个我已经模仿了初始示例.

我的MXNet网络每秒可以训练大约7k个示例,其中张量流仅能够使用虚拟数据4.2k,而3.7才能使用实际数据.

(在1 GPU上运行时,数字是每秒1.2k的例子,而2.1k)

在我的实验中,我有几个问题希望加快速度.

  1. 训练时GPU利用率似乎很低.我注意到在tensorflow白皮书中支持在同一GPU上运行多个流.这在公开发布中是否可行?

  2. 无论如何在一次执行中执行多个列车操作session.run()?还是有异步执行?这将允许在下一批次向前通过的同时进行重量更新?我尝试使用2个线程(系统和使用QueueRunnerss),但这只会导致速度减慢.MXNet能够通过在CPU上运行重量更新来提高速度,以便gpu可以用于下一批.

  3. 通过让我在一台机器上运行多个工作程序,新的分布式运行时是否会解决其中一些问题?

  4. 还有其他事情可以做吗?

我知道堆栈溢出有很多类似的问题,但是我的搜索无法找到我尚未尝试的问题的解决方案.

编辑:

我做了一些CUDA分析,看看昂贵的内核是什么.根据我的运行,21.4%的时间花在内部:

void Eigen::internal::EigenMetaKernel_NonVectorizable<Eigen::TensorEvaluator
<Eigen::TensorAssignOp<Eigen::TensorMap<Eigen::Tensor<float, int=4, int=1, long>, int=16>,
Eigen::TensorPaddingOp<Eigen::array<std::pair<int, int>,
unsigned long=4> const, Eigen::TensorMap<Eigen::Tensor<float const,
int=4, int=1, long>, int=16> const > const > const, Eigen::GpuDevice>, long>(float, int=4)
Run Code Online (Sandbox Code Playgroud)

20.0%的时间花在了

void Eigen::internal::EigenMetaKernel_NonVectorizable<Eigen::TensorEvaluator
<Eigen::TensorAssignOp<Eigen::TensorMap<Eigen::Tensor<float, int=4, int=1, long>, int=16>,
Eigen::TensorBroadcastingOp<Eigen::array<int, unsigned long=4>
const, Eigen::TensorMap<Eigen::Tensor<float const, int=4, int=1, long>,
int=16> const > const > const, Eigen::GpuDevice>, long>(float, int=4)
Run Code Online (Sandbox Code Playgroud)

关闭签名我不确定这些是做什么的.这些有意义吗?

除此之外,分析还报告了低内核并发性,0%,如预期的那样.低计算利用率34.9%(授予此项包括启动时间和火车循环中的一点python.大约32秒,总共91个.这在tensorflow内部利用率约为50%.)

编辑2:

我附上了修剪过的源代码的副本.总的来说,虽然我更关心问题1-3,并且不想花费太多的身体时间.

另外我运行的tensorflow来自:f07234db2f7b316b08f7df25417245274b63342a …

c++ performance gpu tensorflow mxnet

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

锈蚀寿命误差预期具体寿命但发现约束寿命

我在使用结构的生命周期参数时遇到问题.我不是100%肯定如何描述问题,但我创建了一个显示我的编译时错误的简单案例.

struct Ref;

struct Container<'a> {
  r : &'a Ref
}

struct ContainerB<'a> {
  c : Container<'a>
}

trait ToC {
  fn to_c<'a>(&self, r : &'a Ref) -> Container<'a>;
}

impl<'a> ToC for ContainerB<'a> {
  fn to_c(&self, r : &'a Ref) -> Container<'a> {
    self.c
  }
}
Run Code Online (Sandbox Code Playgroud)

我得到的错误是

test.rs:16:3: 18:4 error: method `to_c` has an incompatible type for trait: expected concrete lifetime, but found bound lifetime parameter 'a
test.rs:16   fn to_c(&self, r : &'a Ref) -> Container<'a> {
test.rs:17     self.c …
Run Code Online (Sandbox Code Playgroud)

reference lifetime rust

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

制作和使用 Rust 共享库的正确方法?

我正在研究 cpp 库的绑定。为此,我为该库编写了一个 capi / 包装器,并将其编译为共享库(.so 文件)。

我的问题是,如何使用该文件并将其集成到货物中而不强制用户安装它?目前,我通过从 Cargo.toml 中的构建变量调用的 Makefile 构建 cpp,但我不确定如何处理编译后的 lib。

为了进行测试,我可以使用 rpath 或 LD_LIBRARY_PATH 将可执行文件指向正确的位置,但这在分发库时不起作用。

人们如何管理这个?

shared-libraries rust rust-cargo

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

正确使用其他mods的防锈结构

简单的生锈问题,我似乎无法找到答案:

我在一个单独的文件中定义了一个结构.当我想在文件顶部使用这个支柱时,请执行以下操作:

use other_file::StructName;
mod other_file;
Run Code Online (Sandbox Code Playgroud)

当我创建一个使用此类型的函数

fn test(other : StructName) {};
Run Code Online (Sandbox Code Playgroud)

我收到有关使用私人类型的警告.我写这个错误是固定的:

fn test(other : other_file::StructName) {};
Run Code Online (Sandbox Code Playgroud)

这需要大量额外的打字.我也可以重新出口模块,pub use但我真的想隐藏它.

如何正确包含模块以节省输入?python相当于我想要的是

from other_file import StructName
Run Code Online (Sandbox Code Playgroud)

=====编辑/示例代码=======

上面的代码似乎没有重现或描述我遇到的问题.以下肯定会在2个文件中.它是一些矩阵数学工具的精简版本.

geometry.rs

use geometry::{Vec3};
mod geometry;

#[deriving(Eq, Clone, Show)]
pub struct Mat4 {
  data : ~[f32]
}

impl Mat4 {

  fn apply_Vec3(&self, other : &Vec3) -> Vec3{
    let x = self.data[0] * other.x + self.data[1] * other.y + self.data[2] * other.z;
    let y = self.data[4] * other.x + self.data[5] * other.y + …
Run Code Online (Sandbox Code Playgroud)

rust

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

数组上的 PartialEq

关于 Rust 数组的问题(恒定大小的数组,[T,..Size])。我正在努力做好以下工作:

#[deriving(PartialEq)]
struct Test {
  dats : [f32, ..16]
}
Run Code Online (Sandbox Code Playgroud)

我知道我不能使用派生并简单地编写自己的 PartialEq,但这相当令人讨厌......给出的错误消息对我来说也很神秘(见下文)。有没有适当的乡村方式来做到这一点?

rustc ar.rs 
ar.rs:4:3: 4:20 error: mismatched types: expected `&&[f32]` but found `&[f32, .. 16]` (expected &-ptr but found vector)
ar.rs:4   dat : [f32, ..16]
          ^~~~~~~~~~~~~~~~~
note: in expansion of #[deriving]
ar.rs:2:1: 3:7 note: expansion site
ar.rs:4:3: 4:20 error: mismatched types: expected `&&[f32]` but found `&[f32, .. 16]` (expected &-ptr but found vector)
ar.rs:4   dat : [f32, ..16]
          ^~~~~~~~~~~~~~~~~
note: in expansion of #[deriving]
ar.rs:2:1: 3:7 note: …
Run Code Online (Sandbox Code Playgroud)

arrays rust deriving

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

如何获取包含浮点数的迭代器的最小值或最大值?

我理解为什么浮点数没有实现,Ord但是当我想要懒惰并使用迭代器时,这对我没有特别的帮助.

是否有一种解决方法或一种简单的方法来获取包含浮点数的迭代器的最小值/最小值/ min_by?

我知道可以排序(这很慢)或将其包装在另一种类型中并实现所需的交易(这是冗长的),但我希望有一些更优雅的东西.

floating-point iterator rust

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

Hyper POST请求总是产生400

我正在尝试使用Hyper 0.9向站点发送POST请求.该请求适用于curl:

curl https://api.particle.io/v1/devices/secret/set_light -d args=0 -d access_token=secret
Run Code Online (Sandbox Code Playgroud)

和Python:

import requests
r = requests.post("https://api.particle.io/v1/devices/secret/set_light",
    data={"access_token": "secret", "args": "0"})
Run Code Online (Sandbox Code Playgroud)

但我的Rust实现似乎没有通过,总是屈服400.

use hyper::client::Client;

let addr = "https://api.particle.io/v1/devices/secret/set_light";
let body = "access_token=secret&args=0";
let mut res = client.post(addr)
                .body(body)
                .send()
                .unwrap();
Run Code Online (Sandbox Code Playgroud)

post rust hyper

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