小编Rob*_*ham的帖子

Action Bar和新推出的工具栏有什么区别?

在谷歌推出Material Design之后,我听说过一个名为Toolbar的新小部件类.

什么是工具栏,ActionBar和ToolBar之间的确切区别是什么?

android android-actionbar material-design android-toolbar

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

显示MPI类型映射

type map是MPI中一个重要但令人困惑的概念.我想要一个例程来显示或打印我的类型地图.

例如(取自MPI-3标准),

 MPI_TYPE_CREATE_RESIZED(MPI_INT, -3, 9, type1) 
Run Code Online (Sandbox Code Playgroud)

结果在typemap中

{(lb_marker, -3), (int, 0), (ub_marker, 6)}.
Run Code Online (Sandbox Code Playgroud)

再次使用该类型:

MPI_TYPE_CONTIGUOUS(2, type1, type2) 
Run Code Online (Sandbox Code Playgroud)

而typemap是

{(lb_marker, -3), (int, 0), (int,9), (ub_marker, 15)}
Run Code Online (Sandbox Code Playgroud)

我想要一种自动显示该类型图的方法.

当然可以使用MPI_Type_get_contentsMPI_Type_get_envelope递归下降,直到达到内置类型.这是一个巨大的痛苦,我想我会有20年的时间来为我做这个.

有些工具很有前途但不太有效:

  • 我在这里找到了〜2001年的MPImap .首先,它需要针对现代Tcl/TK进行更新,修补以解决一些内存错误并在您执行此操作之后; 你得到一个没有反应的GUI.相反,我正在寻找一个我可以在运行时调用的库/例程.

  • MPIDU_Datatype_deubg是MPICH特定的内部类型转储例程.它不显示类型映射(它显示dataloop表示,再次关闭)

  • 曾经有一个名为XMPI的调试器,它在其功能中列出了显示MPI类型映射的能力.此调试器似乎特定于LAM-MPI,并且不使用get_contents/get_envelope.

mpi typemaps

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

通用的编译器独立方式在C/C++中实现UNUSED宏

在实现存根等时,您希望避免使用"未使用的变量"警告.多年来,我遇到过UNUSED()宏的一些替代方案,但从来没有一个被证明适用于"所有"编译器,或者标准是气密的.

或者我们为每个构建平台坚持使用#ifdef块?

编辑:由于非c兼容替代品的许多答案,我想澄清我正在寻找一个对C和C++,所有口味等都有效的定义.

c c++ macros compiler-warnings

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

生锈与c的表现

我想学习一些关于生锈任务的知识,所以我做了一个蒙特卡罗计算PI.现在我的难题是为什么单线程C版本比4路线程Rust版本快4倍.显然,我做错了什么,或者我的心理表现模型已经过时了.

这是C版本:

#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>

#define PI 3.1415926535897932

double monte_carlo_pi(int nparts)
{
    int i, in=0;
    double x, y;
    srand(getpid());

    for (i=0; i<nparts; i++) {
        x = (double)rand()/(double)RAND_MAX;
        y = (double)rand()/(double)RAND_MAX;

            if (x*x + y*y < 1.0) {
            in++;
        }
    }

    return in/(double)nparts * 4.0;
}

int main(int argc, char **argv)
{
    int nparts;
    double mc_pi;

    nparts = atoi(argv[1]);
    mc_pi = monte_carlo_pi(nparts);
    printf("computed: %f error: %f\n", mc_pi, mc_pi - PI);
}
Run Code Online (Sandbox Code Playgroud)

Rust版本不是逐行端口:

use std::rand;
use std::rand::distributions::{IndependentSample,Range}; …
Run Code Online (Sandbox Code Playgroud)

c performance rust

15
推荐指数
2
解决办法
7282
查看次数

生锈的分析工具

在寻求提高性能时,应该开始考虑占用时间最多的代码区域.在C中我们有很多选项:gprof,cachegrind,google-perftools,oprofile.

2.5年前,'oprofile'就是答案:https://mail.mozilla.org/pipermail/rust-dev/2012-April/001558.html

那还是这样吗?

profiling rust

6
推荐指数
0
解决办法
2648
查看次数

如何使用MPI_Gatherv从包括主节点在内的不同处理器中收集不同长度的字符串?

我试图在主节点处从所有处理器(包括主节点)收集不同长度的不同字符串到单个字符串(字符数组).这是MPI_Gatherv的原型:

int MPI_Gatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
            void *recvbuf, const int *recvcounts, const int *displs,
            MPI_Datatype recvtype, int root, MPI_Comm comm)**.
Run Code Online (Sandbox Code Playgroud)

我无法确定像一些参数recvbuf,recvcountsdispls.任何人都可以在C中提供源代码示例吗?

c arrays parallel-processing mpi

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

生锈语法:当foo声明为mut时,原因为&mut foo而不是&foo in rust

对于常规的喜欢

MPI_Comm_rank(MPI_Comm comm, int *rank);
Run Code Online (Sandbox Code Playgroud)

rust外部函数接口可以这样声明:

extern crate libc;
use libc::{c_int};

#[link(name = "mpi")]
extern {
    fn MPI_Comm_rank(mpi_comm: c_int,
                     rank: *mut c_int);
}
Run Code Online (Sandbox Code Playgroud)

我这样调用绑定,这有效,但让我对语法感到困惑:

pub static MPI_COMM_WORLD : libc::c_int = 0x44000000;
fn main() {

    let mut rank: c_int = 999999;
    /* but why '&mut rank' and not simply '&rank' ? */
    unsafe {MPI_Comm_rank(MPI_COMM_WORLD, &mut rank)}
}       
Run Code Online (Sandbox Code Playgroud)

我最初尝试过

unsafe {MPI_Comm_rank(MPI_COMM_WORLD, &rank)}
Run Code Online (Sandbox Code Playgroud)

但这会产生编译错误:

mismatched types: expected `*mut i32` but found `&i32` (values differ in mutability)
Run Code Online (Sandbox Code Playgroud)

我宣称'等级'为mut,所以给出了什么?

syntax ffi rust

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

如何操作矢量的子集?

我理解如何操作整个矢量,虽然我不认为这是惯用的Rust:

fn median(v: &Vec<u32>) -> f32 {
    let count = v.len();
    if count % 2 == 1 {
        v[count / 2] as f32
    } else {
        (v[count / 2] as f32 + v[count / 2 - 1] as f32) / 2.0
    }
}

fn main() {
    let mut v1 = vec![3, 7, 8, 5, 12, 14, 21, 13, 18];
    v1.sort();
    println!("{:.*}", 1, median(&v1));
}
Run Code Online (Sandbox Code Playgroud)

但是如果我只想操作这个矢量的一半呢?例如,第一个四分位数是下半部分的中位数,第三个四分位数是上半部分的中位数.我的第一个想法是构建两个新的向量,但这似乎不太正确.

我如何得到"一半"的向量?

rust

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