小编Phi*_*ler的帖子

拥有带有InfiniBand的Windows Azure A8节点支持如何从一个发送N个字节并在另一个上接收?

我喜欢InfiniBand承诺的40Gbit/s网络.我的需求没有映射到具有一个核心节点+从属的MPI模型,如果可能,我宁愿不使用MPI.我需要简单的连接/发送/接收/关闭(或其异步版本)API.然而,在MS Azure文档和 Microsoft HPC Pack文档中,我无法找到任何可以使用InfiniBand作为我的应用程序传输的C/C++或.Net API.所以我的问题很简单,如何使用InfiniBand连接到其他节点并向其发送数据包并在另一端接收?(类似于一些Socket API或类似的东西)

Azure上的ND-SPI或Azure上的DAPL-ND 连接/发送/接收/关闭教程是我正在寻找的.

c++ hpc azure infiniband azure-virtual-network

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

33
推荐指数
8
解决办法
9684
查看次数

是对空指针未定义行为执行算术?

它看起来像下面的程序计算一个无效的指针,因为NULL除了赋值和比较相等之外没有任何好处:

#include <stdlib.h>
#include <stdio.h>

int main() {

  char *c = NULL;
  c--;

  printf("c: %p\n", c);

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

然而,似乎GCC或Clang针对未定义行为的警告或工具都没有说这实际上是UB.这个算术实际上是否有效,而且我太迂腐了,或者这是我们应该报告的检查机制的缺陷吗?

测试:

$ clang-3.3 -Weverything -g -O0 -fsanitize=undefined -fsanitize=null -fsanitize=address offsetnull.c -o offsetnull
$ ./offsetnull
c: 0xffffffffffffffff

$ gcc-4.8 -g -O0 -fsanitize=address offsetnull.c -o offsetnull
$ ./offsetnull 
c: 0xffffffffffffffff
Run Code Online (Sandbox Code Playgroud)

似乎很好地记录了Clang和GCC使用的AddressSanitizer更侧重于解除坏指针的引用,所以这很公平.但其他检查也没有抓住它: - /

编辑:我问这个问题的部分原因是-fsanitize标志能够动态检查生成的代码中的良好定义.这是他们应该抓住的东西吗?

c c++ null-pointer undefined-behavior language-lawyer

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

如何在Linux上禁用二进制文件的地址空间随机化?

我正在为并行程序开发一个运行时系统,它可以利用跨多个进程的公共地址空间布局,可能分布在几千个节点上.很多时候,为此环境构建的软件在默认启用地址空间随机化的Linux系统上运行,用户可能不希望或无法在系统范围内禁用它(通过sysctl -w kernel.randomize_va_space=0等).这对并行程序施加了一些限制,并且可能损害性能.因此,我们想弄清楚如何为我们构建的二进制文件禁用它.安全性不是问题,因为该软件始终在受控环境中运行.

我发现了对各种标志和变量的引用,比如ET_EXEC,EF_AS_NO_RANDOM(显然从未合并过?)和PF_RANDOMIZE,但我找不到任何描述我可以做什么来设置这些标志的文档.一个理想的答案会告诉我什么编译器/汇编器/链接器标志将禁用生成的二进制文件的随机化,以及它工作的工具链/内核的版本.接下来最好的是在构建二进制文件后执行相同操作的工具.

由于我确信有人会提出建议,我已经知道我们可以在运行时进行此更改setarch -R,但最好将其记录在可执行文件中.

看起来paxctl -rx应该做的伎俩,但它似乎不适用于不包含PaX补丁的内核中使用的当前方法.

linux gcc heap-randomization aslr

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

'保证复制Elision'(P0135,C++ 1z)可能需要ABI破损吗?

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0135r0.html

上述"保证副本Elision"提案在2016年6月在芬兰奥卢举行的会议上被投票选入C++工作文件,然后被投票作为委员会草案出版.希望明年能够成为C++ 17标准的出版物.

该提案阐明了涉及临时对象的各种值类别,以在某些用例中强制执行复制构造函数调用.

我的问题是"这些新要求可能会破坏编译器的ABI兼容性,这些编译器可能以前没有在这些情况下完成复制,或者是以不符合新要求的方式实现的吗?"

我正在考虑初始化之类的东西,当创建对象时可以内联,而不是在跨越编译单元边界时.

c++ abi language-lawyer copy-elision c++17

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

_int_malloc和malloc之间有什么区别(在Valgrind中)

我很惊讶我找不到任何文件说明Valgrind 工具的输出_int_mallocmalloc输出之间的区别callgrind.

有人可以解释一下他们的区别吗?

此外,我实际上编写C++代码,所以我完全new不使用malloc,但在callgrind输出中只显示mallocs.

malloc valgrind memory-management dynamic-memory-allocation

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

什么应该发生在size_t的否定(即`-sizeof(struct foo)`))?

我正在处理一些包含表单表达式的代码

-(sizeof(struct foo))
Run Code Online (Sandbox Code Playgroud)

即a的否定,size_t我不清楚编译器在看到这个时C和C++标准需要什么.具体来说,从此处和其他地方四处查看,sizeof返回类型的无符号整数值size_t.当否定无符号整数时,我找不到任何指定行为的明确引用.有没有,如果有的话,它是什么?

编辑:好的,所以关于无符号类型的算术有一些很好的答案,但事实并非如此.如果否定,它是在无符号整数上运行,还是转换为有符号类型并对其执行某些操作?从标准中预期的行为是"想象它是相似幅度的负数,然后对无符号值应用'溢出'规则"?

c c++ unsigned sizeof size-t

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

初始化列表*参数*评估顺序

因此,C++标准要求类成员按照它们在类中声明的顺序进行初始化,而不是在任何构造函数的初始化列表中提及它们的顺序.但是,这并不意味着评估这些初始化的参数的顺序.我正在使用一个经常传递对序列化对象的引用的系统,并想知道我是否可以确保以正确的顺序从中读取位,而不管这些位写入对象字段的顺序.

struct Foo {
    int a;
    double b;
    // I want to be able to do this
    Foo(SerObj &s)
    : b(s.readDouble()), a(s.readInt())
    { }
    // Rather than this
    Foo (SerObj &s)
    {
        b = s.readDouble();
        a = s.readInt();
    }
};
Run Code Online (Sandbox Code Playgroud)

显然,重新排序intsdoubles声明中的内容并不是一件大事,但更大的对象和需要动态分配的东西有时也可以.

c++ constructor initialization operator-precedence ctor-initializer

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

linux du命令源代码

在哪里可以找到du其他Linux实用程序的源代码?

c linux kernel

12
推荐指数
2
解决办法
8624
查看次数

并发链表

我试图在c ++中设计一个允许并发访问的链表.显然,对于该列表使用单个锁是非常低效的,因为可以并行更新不相交的区域.现在除了每个节点存储一个锁之外,还有什么选择?

另外,在这种情况下,非阻塞版本会更好吗?任何相关链接,任何人?

编辑:感谢您的回复.我想补充一些事情:

  1. 如何为每个M节点存储N个锁而不是1:1锁:节点比?有些线程会等待,但这是一种权衡.你怎么看?
  2. 如果我打算在这个链表中找到一些节点,看起来需要锁定所有互斥锁.这是一个问题,因为锁定和解锁所有互斥锁都很耗时.有没有人有更好的选择?
  3. 我对非阻塞算法持开放态度.但是如何在不使用汇编的情况下在旧的C++中使用CAS?我听说gcc有一些__sync属性做类似的工作,但不确定.
  4. 使用非阻塞方法,如何在链表上进行查找?

c++ multithreading pthreads

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