小编mat*_*tth的帖子

具有多个GPU的OpenCL/OpenGL Interop

我在使用OpenCL/OpenGL互操作的多个GPU时遇到了麻烦.我正在尝试编写一个呈现密集计算结果的应用程序.最后它会运行一个优化问题,然后根据结果向屏幕渲染一些东西.作为测试用例,我将从本课程的粒子模拟示例代码开始:http://web.engr.oregonstate.edu/~mjb/sig13/

示例代码创建和OpenGL上下文,然后使用cl_khr_gl_sharing扩展创建一个共享状态的OpenCL上下文.当我使用单个GPU时,一切正常.创建上下文如下所示:

3. create an opencl context based on the opengl context:
  cl_context_properties props[ ] =
  {
      CL_GL_CONTEXT_KHR, (cl_context_properties) glXGetCurrentContext( ),
      CL_GLX_DISPLAY_KHR, (cl_context_properties) glXGetCurrentDisplay( ),
      CL_CONTEXT_PLATFORM, (cl_context_properties) Platform,
      0
  };

  cl_context Context = clCreateContext( props, 1, Device, NULL, NULL, &status );
  if( status != CL_SUCCESS) 
  {
      PrintCLError( status, "clCreateContext: " );
      exit(1);
  }
Run Code Online (Sandbox Code Playgroud)

稍后,该示例使用clCreateFromGLBuffer创建共享CL/GL缓冲区.

现在,我想从两个GPU设备创建一个上下文:

cl_context Context = clCreateContext( props, 2, Device, NULL, NULL, &status );
Run Code Online (Sandbox Code Playgroud)

我已成功打开设备,并且可以查询它们是否都支持cl_khr_gl_sharing,并且两者都可以单独工作.但是,当我尝试创建上面的上下文时,我得到了

CL_INVALID_OPERATION 
Run Code Online (Sandbox Code Playgroud)

这是cl_khr_gl_sharing扩展名添加的错误代码.在扩展描述(上面链接)中说

  • CL_INVALID_OPERATION如果为CGL,EGL,GLX或WGL之一指定了上下文或共享组对象,并且满足以下任一条件:

    • OpenGL实现不支持为其指定了上下文或共享组对象的窗口系统绑定API.
    • CL_CGL_SHAREGROUP_KHR,CL_EGL_DISPLAY_KHR,CL_GLX_DISPLAY_KHR和CL_WGL_HDC_KHR中的多个属性设置为非默认值.
    • CL_CGL_SHAREGROUP_KHR和CL_GL_CONTEXT_KHR这两个属性都设置为非默认值.
    • 参数中指定的任何设备都不支持共享OpenGL对象的数据存储的OpenCL对象,如第9.12节所述."

这个描述似乎并不适合我的任何案例.是否不可能使用多个GPU进行OpenCL/OpenGL互操作?还是我有异构硬件?我从枚举设备中打印出一些参数.我刚拿了两个随机的GPU,我可以动手了.

PlatformID: 18483216 …
Run Code Online (Sandbox Code Playgroud)

opengl interop opencl multi-gpu

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

如何将可选标志传递给我的 npm 包的依赖项?

我正在开发一个 npm 包,我们称之为foo,它有一些外部依赖项。一个这样的依赖项,bar需要一个构建标志才能与我的项目一起工作。如果我要手动安装依赖项,我会说:

npm install bar --bar-option=1 ... # other deps npm install foo node script_that_uses_foo.js

我希望foo使用npm install foo. 所以我的package.json文件中有一个部分如下所示: "dependencies" : { "bar": "file:../../bar-0.1.0.tgz", "baz": "*" }

这工作正常,除了bar安装时没有--bar-option=1. 我怎么能告诉npm这个参数传递给安装脚本bar?我浏览了npm 文档,但没有找到我要找的东西。

谢谢你的帮助。

node.js npm

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

c ++ 11 std :: thread和类友元函数之间的交互

我无法理解编译器错误我正在尝试使用声明为c ++ 11 std::thread对象中的类的朋友的函数.我创建了一个小例子来展示我遇到的问题.基本上,当编译器只看到friend函数原型时aa,它会在函数传递给线程对象时抛出一个未定义的符号错误.我正在使用g ++ 4.9.2.

//test.cpp
#include <thread>

class A {
public:
  friend void aa(A &p);
  void av(void);
};

void A::av() {
  std::thread t1(aa,std::ref(*this));
}

void aa(A &p) {
  p;
}

int main() {
  A ai;
  ai.av();
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

编译命令:

g++ -o test test.cpp -g -O0 -std=c++11 -lpthread
Run Code Online (Sandbox Code Playgroud)

我收到编译器错误:

test.cpp: In member function ‘void A::av()’:
test.cpp:12:18: error: ‘aa’ was not declared in this scope
   std::thread t1(aa,std::ref(*this));
Run Code Online (Sandbox Code Playgroud)

在上面,如果我更换线

std::thread t1(aa,std::ref(*this));
Run Code Online (Sandbox Code Playgroud)

aa(*this);
Run Code Online (Sandbox Code Playgroud)

编译得很好.或者,如果我在定义上面添加另一个函数的原型声明A::av …

c++ friend c++11 stdthread

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

标签 统计

c++ ×1

c++11 ×1

friend ×1

interop ×1

multi-gpu ×1

node.js ×1

npm ×1

opencl ×1

opengl ×1

stdthread ×1