小编Dao*_*Wen的帖子

GPUDirect RDMA从GPU传输到远程主机

场景:

我有两台机器,一台客户机和一台服务器,与Infiniband连接.服务器机器有一个NVIDIA Fermi GPU,但客户端机器没有GPU.我有一个在GPU机器上运行的应用程序,它使用GPU进行一些计算.GPU上的结果数据从不被服务器机器使用,而是直接发送到客户端机器而无需任何处理.现在我正在做一个cudaMemcpy从GPU获取数据到服务器的系统内存,然后通过套接字将其发送到客户端.我正在使用SDP为此通信启用RDMA.

题:

在这种情况下,我是否可以利用NVIDIA的GPUDirect技术来摆脱cudaMemcpy呼叫?我相信我已正确安装了GPUDirect驱动程序,但我不知道如何在不先将其复制到主机的情况下启动数据传输.

我的猜测是不可能将SDP与GPUDirect结合使用,但还有其他方法可以启动从服务器机器GPU到客户机的RDMA数据传输吗?

额外:如果somone有一个简单的方法来测试我是否正确安装了GPUDirect依赖项,这也是有帮助的!

cuda rdma infiniband gpudirect

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

scalac缺少关闭括号错误报告与奇怪的行号

由于我一直在学习Scala,因此g++在阅读隐藏输出时经常会提醒编译器错误scalac.然而,今天我遇到了一些我怀疑即使在g++宇宙中也会发生的事情.

一位朋友给我发了一个非常简单的代码片段,其中包含一个相当常见的错误:

case class Var(name: String) extends ArithExpr {
  override def eval(env: Env) =  env.lookup(name) match {
    case Some(d) => d
    case None => throw new IllegalArgumentException("Env " + env + " does not contain a binding for " + name)
  }
  override def exprString = name
// } // <-- MISSING THIS BRACE
Run Code Online (Sandbox Code Playgroud)

完整的源文件发布在这里.由于case class Var类声明缺少其结束括号,您会认为编译器会告诉您该声明的开头括号(第11行)缺少其右括号.但是,scalac报告称它"假定"在前一个case class声明中间缺少右括号(第7行).(完整的错误输出包含在发布的代码的底部.)

scalac如果您了解语言的内部,大多数错误消息都有意义,但我在这里完全失去了.在后面的类声明中,缺少的右括号如何最终传播到文件中较早的已成功解析的类定义?

你到底如何向Scala初学者解释这个问题?离开一个右大括号正是Scala新手常常会犯的那种错误,但是这里的错误信息似乎会导致用户误入歧途,因此报告类似的东西可能会更有帮助error: you seem to be …

compiler-construction parsing scala scalac

6
推荐指数
2
解决办法
1781
查看次数

元数据读取器语法何时从#^更改为^?

目前(Clojure v1.6)您可以通过两种方式给出类型提示:

^floats xs
Run Code Online (Sandbox Code Playgroud)
#^floats xs
Run Code Online (Sandbox Code Playgroud)

根据Clojure ^ floats vs.#^ floats?,后者是遗留语法,前者是当前首选形式.

这种变化何时发生?

clojure

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

Lambda具有动态存储持续时间

根据cppreference.com,C++ 11 lambda文字语法仅适用于直接初始化.似乎没有办法直接在new运算符中使用lambda语法.

我需要在堆中存储一个lambda函数,以便稍后可以从另一个线程调用它.制作lambda的副本很容易,但有没有一种简单的方法可以直接在堆中分配lambda(动态存储持续时间),而无需先在堆栈上分配它(自动存储持续时间)并制作副本?

这是一个简单的例子:

#include <cstdio>
#include <cassert>

struct MyObj {
    int value;
    int copies;
    int moves;

    MyObj(int v): value(v), copies(0), moves(0) {
        printf("Created object with value %d.\n", value);
    }

    MyObj(const MyObj &other): value(other.value),
    copies(other.copies+1), moves(other.moves) { }

    MyObj(const MyObj &&other): value(other.value),
    copies(other.copies), moves(other.moves+1) { }
};

int main (int argc, char **argv) {
    MyObj o { 5 };
    // Create lambda on stack (automatic storage duration)
    auto f = [o] {
        printf("Object value is …
Run Code Online (Sandbox Code Playgroud)

c++ lambda c++11

5
推荐指数
2
解决办法
611
查看次数

在Clojure中尝试使用资源

Clojure是否具有Java的try-with-resources构造的等价物?

如果没有,在Clojure代码中处理这个习惯用法的常用方法是什么?

用于安全打开和关闭资源的Java-7之前的习惯用语非常冗长,以至于它们实际上增加了对该语言的try-with-resources的支持.对我来说,在标准的Clojure库中找不到这个用例的宏似乎很奇怪.

基于Clojure的主流项目存储库的一个示例 - 显示如何在实践中处理此问题 - 将非常有用.

clojure try-with-resources

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

AnyVal的目的是什么?

我想不出任何情况下的类型AnyVal将是有益的,特别是与另外的Numeric类型抽象了Int,Long等有没有实际使用情况AnyVal,或只是一种假象,使类型层次位更漂亮?


只是为了澄清,我知道什么AnyVal ,我不能想到我会真的需要它在Scala中的任何时间.当我会永远需要一个类型涵盖Int,CharacterDouble?现在看来似乎只是存在使类型层次漂亮(即它看上去有更好AnyValAnyRef兄弟姐妹,而不是Int,Character等直接继承Any).

scala

4
推荐指数
2
解决办法
4793
查看次数

为什么 ucontext 有这么高的开销?

Boost v1.59 中 Boost.Context 的文档报告了以下性能比较结果:

+----------+----------------------+-------------------+-------------------+----------------+
| Platform |      ucontext_t      |    fcontext_t     | execution_context | windows fibers |
+----------+----------------------+-------------------+-------------------+----------------+
| i386     | 708 ns / 754 cycles  | 37 ns / 37 cycles | ns / cycles       | ns / cycles    |
| x86_64   | 547 ns / 1433 cycles | 8 ns / 23 cycles  | 16 ns / 46 cycles | ns / cycles    |
+----------+----------------------+-------------------+-------------------+----------------+
Run Code Online (Sandbox Code Playgroud)

[关联]

我相信这些实验的源代码托管在 GitHub 上

我的问题是,为什么ucontext的开销比 Boost 库的实现高 20 …

c c++ boost ucontext

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

如何在c linux中重置alarm()

一旦alarm(5)启动并运行了几秒或几秒钟,在程序中一段时间​​后如果发生某些动作,我需要再次将警报重置为alarm(5).我怎样才能做到这一点?

有警报reset()吗?

int flag=0;
void alarmhand(int signal)
{ 
  flag=1;
  // printf("\n time out");
}

void main()
{
  signal(SIGALRM,alarmhand);
  alarm (5);
  while(1)
  {
   event_status();
   if(flag==1)
       break;
  } 
}

void event_status()
{
  int reset;
  printf("reset 1=y/2=n :");
  scanf("%d",&reset);
  if(reset==1)
  {
   // alarm.reset(5);
  // HOW DO I RESET THE ALARM AGAIN TO 5 HERE ??
  }
}
Run Code Online (Sandbox Code Playgroud)

c

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

上下文切换 - makecontext和swapcontext在这里工作(OSX)

我对上下文切换很开心.我已将示例代码复制到文件 http://pubs.opengroup.org/onlinepubs/009695399/functions/makecontext.html

我为OSX定义了宏_XOPEN_SOURCE.

#define _XOPEN_SOURCE 
#include <stdio.h>
#include <ucontext.h>


static ucontext_t ctx[3];


static void
f1 (void)
{
    puts("start f1");
    swapcontext(&ctx[1], &ctx[2]);
    puts("finish f1");
}


static void
f2 (void)
{
    puts("start f2");
    swapcontext(&ctx[2], &ctx[1]);
    puts("finish f2");
}


int
main (void)
{
    char st1[8192];
    char st2[8192];


    getcontext(&ctx[1]);
    ctx[1].uc_stack.ss_sp = st1;
    ctx[1].uc_stack.ss_size = sizeof st1;
    ctx[1].uc_link = &ctx[0];
    makecontext(&ctx[1], f1, 0);


    getcontext(&ctx[2]);
    ctx[2].uc_stack.ss_sp = st2;
    ctx[2].uc_stack.ss_size = sizeof st2;
    ctx[2].uc_link = &ctx[1];
    makecontext(&ctx[2], f2, 0);


    swapcontext(&ctx[0], &ctx[2]);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我建造它

gcc -o …

c macos context-switch ucontext

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

Python:函数定义在所需输出的中间保持返回"None"

好的,所以我为我的女朋友为我们的6周年纪念做代码.我是编程的完整菜鸟.我正在编写一些非常简单的代码,基本上是数字输入的输入输出机器,以便用户(她)接收字符串输出.

当我运行我的代码时,我一直看到"无".为什么?开始.

def love(n):
  if n < 0 : 
    print "Why would it be negative?!" 
  if n == 0 : 
      print "well that is just hurtful" 
  if n == 1 :
    print "I REALLY love you" 
  if n == 2 : 
    print "You make me smile at least once, each and every day"
  if n == 3 : 
    print"you wouldn't believe how annoying it was to get this program to run properly! but it was worth it"
  if n == …
Run Code Online (Sandbox Code Playgroud)

python

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

jquery循环输入值并获得总和

我有输入滑块(参见jsfiddle),在改变时我想循环它们的值并得到一个总数.

我写了我认为会这样做的代码,但是我失败了,看到小提琴,并提前非常感谢你!

小提琴

Percentage Sliders<br><br>
<input type="tex" class="slida" type="text" data-slider="true" data-slider-range="0,100" data-slider-step="25" data-slider-snap="true" data-slider-theme="volume" >
<br><br>

<input type="tex" class="slida" type="text" data-slider="true" data-slider-range="0,100" data-slider-step="25" data-slider-snap="true" data-slider-theme="volume" > 


$(".slida").bind("slider:changed", function (event, data) {
  console.log("Changed Value: ", data.value);
  $(this).each(function() {
    total = 0;
    $(this).each(function() {
        total += parseInt( $(this).val() );    
    });     
  });  
  console.log("TOTAL: ", total)

});
// end
Run Code Online (Sandbox Code Playgroud)

jquery

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