小编sti*_*tix的帖子

为什么我的OpenCL内核在nVidia驱动程序上失败,而不是英特尔(可能的驱动程序错误)?

我最初写了一个OpenCL程序来计算非常大的厄米特矩阵,其中内核计算矩阵中的一对条目(上三角形部分及其下三角形补码).

很早以前,我发现了一个非常奇怪的问题,如果我的内核大小正好是55,那么第27个内核线程将无法执行.在使用nVidia驱动程序和GPU加速时才会出现此问题.当我在CPU上使用Intel驱动程序运行它时,我发现第27个内核线程执行得很好.较大和较小的内核大小似乎没有出现问题.

认为它可能是我的代码中的东西,我将我的问题提炼到以下非常简单的内核:

__kernel void testIndex(__global float* outMatrix, unsigned int sizeN)
{
    //k is the linear kernel ID (related to but not exactly the linear index into the outMatrix)
    int k = get_global_id(0);
    //i'th index (Row or Y)
    int i = floor((2 * sizeN+1 - sqrt((float)((2 * sizeN + 1) * (2 * sizeN + 1) -8 * k) )) /2);

    //j'th index (Column or X)
    int j = k - sizeN * i + i …
Run Code Online (Sandbox Code Playgroud)

gpgpu nvidia opencl

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

为什么此代码链接在英特尔编译器2015而非英特尔编译器2018?

我的团队最近从2015英特尔编译器(并行工作室)升级到2018年版本,我们遇到了一个链接器问题,每个人都在撕扯他们的头发.

我有以下类(为了简洁而适度编辑)来处理子进程的包装和相关的文件描述符以便与它们交谈:

class SubprocWrapper
{
public:
    static const int PASSTHRU_FD = 0;
    static const int MAKE_PIPE = -1;

    typedef std::map<std::string, std::string> EnvMapType;

    static EnvMapType getMyEnv();

    SubprocWrapper(
        int stdin_fd_req,
        int stdout_fd_req,
        int stderr_fd_req,
        const std::string & execPath,
        const std::vector<std::string> & args,
        const std::set<int> & dont_close_fds,
        const EnvMapType * env = 0);
};
Run Code Online (Sandbox Code Playgroud)

然后我用以下代码调用它:

std::string runCmd = "/run/some/file.bin";
std::vector<std::string> args(2);
args[0] = "-c";
args[1] = runCmd;

SubprocWrapper::EnvMapType env_vars = SubprocWrapper::getMyEnv();

SubprocWrapper subproc(
    SubprocWrapper::PASSTHRU_FD,
    SubprocWrapper::PASSTHRU_FD,
    SubprocWrapper::PASSTHRU_FD,
    std::string("/bin/sh"),
    args,
    std::set<int>(), //dont_close_fds = null means …
Run Code Online (Sandbox Code Playgroud)

c++ intel linker-errors

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

NASA Worldwind:如何更改战术符号的速度领导者的颜色?

在NASA WorldWind中,可以为Milstd-2525符号指定"行进方向"速度引导者.然而,这个速度领先者是黑色的,因此很难看到深蓝色的海洋背景.我已经尝试在TacticalSymbolAttributes中更改内部颜色材质,但这似乎没有效果(对任何东西).遗憾的是,文档没有提供有关如何更改线条颜色的任何线索.

是否有可能在Worldwind中改变Milstd-2525 Tactical Symbol的速度领导线的颜色,如果是这样,怎么样?

java worldwind

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

如何在ZeroMQ中使用单个端点执行多个发布者?

我正在尝试建立一个发布/订阅架构,其中多个发布者和多个订阅者存在于同一总线上.根据我在互联网上读到的内容,只有一个套接字应该调用bind(),而其他所有套接字(无论是pub还是sub)都应该调用connect().

问题是,通过这种方法,我发现只有实际上在套接字上调用bind()的发布者才会发布消息.我调用connect()的所有发布者似乎都默默地失败,并且实际上并没有向总线发布任何消息.我已经确认这不是订阅者密钥问题,因为我编写了一个简单的"嗅探器"应用程序,它订阅了总线上的所有消息,并且它只显示名为bind()的发布者.

如果我尝试与发布者进行多次绑定,则使用ipc发生静默窃取总线的"预期"zmq行为,并且使用tcp抛出正在使用的端口错误.

我已经使用ipc和tcp端点验证了这种行为,但最终整个系统将使用epgm.我假设(虽然当然可能是错的)在这种情况下我不需要代理,因为没有动态发现(端点是已知的,无论是ipc,tcp还是epgm多播).

是否有一些我缺少的东西,也许是套接字设置,这会导致连接发布者实际上不发送他们的数据?根据我在互联网上看到的文献,我正在以"正确"的方式做事,但它仍然无效.

作为参考,我的发布者类具有以下用于设置端点的方法:

ZmqPublisher::ZmqPublisher()
: m_zmqContext(1), m_zmqSocket(m_zmqContext, ZMQ_PUB)
{}


void ZmqPublisher::bindEndpoint(std::string ep)
{
    m_zmqSocket.bind(ep.c_str());
}

void ZmqPublisher::connect(std::string ep)
{
    m_zmqSocket.connect(ep.c_str());
}
Run Code Online (Sandbox Code Playgroud)

最后,我的问题是:在同一端点上处理多个发布者的正确方法是什么,为什么我没有看到来自多个发布者的消息?

publish-subscribe zeromq

8
推荐指数
2
解决办法
3600
查看次数

如何在boost :: spirit :: qi解析器中使用多态属性?

我希望我的boost :: spirit-based解析器能够解析文件,将解析后的规则转换为不同的类型,并发出包含它找到的所有匹配项的向量.作为属性发出的所有类型都应该从基类型继承,例如:

#include <boost/spirit/include/qi.hpp>
#include <boost/fusion/adapt_struct.hpp>
#include <boost/shared_ptr.hpp>
#include <boost/foreach.hpp>

struct CommandBase
{
   virtual void commandAction()
   {
     std::cout << "This is a base command. You should never see this!" << std::endl;
     //Boost::spirit seems to get mad if I make this purely virtual. Clearly I'm doing it wrong.
   }
};

struct CommandTypeA : public CommandBase
{
   int valueA;
   int valueB;
   virtual void commandAction()
   {
      std::cout << "CommandType A! ValueA: " << valueA << " ValueB: " << valueB << std::endl; …
Run Code Online (Sandbox Code Playgroud)

c++ polymorphism boost boost-spirit boost-spirit-qi

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

如何将std :: ofstream重定向到std :: cout?

我正在使用一些使用类型的全局调试记录器的代码std::ofstream*.我想将它重定向到std :: cout,因为我实时使用代码,而不是为它设计的批处理方法.

是否可以将std::ofstream*其使用的全局指针重定向到std::cout?我知道std::ofstream继承自std::ios,允许用户使用该rdbuf()方法更改流缓冲区,但遗憾的是它似乎std::ofstream重新定义了rdbuf()方法,这使得以下代码无法编译:

gOsTrace = new std::ofstream();
gOsTrace->rdbuf(std::cout.rdbuf());
Run Code Online (Sandbox Code Playgroud)

是否有另一种方法将gOsTrace对象重定向到指向cout

c++ stl cout ofstream c++11

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

如何为电子版本4.1.4重建zeromq.js绑定?

尝试在Electron应用程序中使用zeromq.js时,我发现NODE_MODULE_VERSIONS似乎不匹配:

Uncaught Error: Cannot open /home/XXXX/ptt_geo/ptt-geo-fork/src/webapp/node_modules/zeromq/build/Release/zmq.node: Error: The module '/home/XXXX/ptt_geo/ptt-geo-fork/src/webapp/node_modules/zeromq/build/Release/zmq.node'
was compiled against a different Node.js version using
NODE_MODULE_VERSION 64. This version of Node.js requires
NODE_MODULE_VERSION 69. Please try re-compiling or re-installing
the module (for instance, using `npm rebuild` or `npm install`).
    at Object.<anonymous> (vendor.js:217837)
    at Object../node_modules/zeromq/build/Release/zmq.node (vendor.js:217838)
    at __webpack_require__ (runtime.js:79)
    at Object../node_modules/zeromq/lib/index.js (vendor.js:217866)
    at __webpack_require__ (runtime.js:79)
    at Object../node_modules/zeromq/index.js (vendor.js:217850)
    at __webpack_require__ (runtime.js:79)
    at Object../src/app/services/aic-contact-listener.service.ts (main.js:4042)
    at __webpack_require__ (runtime.js:79)
    at Object../src/app/components/map/map.component.ts (main.js:1874)
Run Code Online (Sandbox Code Playgroud)

根据互联网,我需要使用以下命令来重建zeromq.js:

 npm rebuild zeromq --runtime=electron --target=<ELECTRON_VERSION>
Run Code Online (Sandbox Code Playgroud)

因此,我为电子版(4.1.4)运行了它,并在重建时遇到以下错误:

gyp …
Run Code Online (Sandbox Code Playgroud)

zeromq node.js electron electron-builder angular

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

为什么此代码在使用 int 时失败,但在使用 double 时却失败(可能是编译器错误)?

在 GCC 7.3.1 中给出以下非常简单的程序:

\n
//exponentTest.cc\n#include <complex> \n#include <iostream>        \n\nint main(int argc, char **argv)\n{\n  std::complex<double> iCpx = std::complex<double>(0,1); \n  double baseline[3] = {-0.1, 0, 0};\n  \n  double theta = atan2(baseline[1], baseline[0]); \n  std::cout << "Theta: " << theta << std::endl;\n\n  for(size_t m =1; m < 10; m++)\n    {\n      std::complex<double> thetExp = exp(-1 * m * theta * iCpx); \n      std::cout << "m(" << m << "): " << thetExp << std::endl;\n    }\n  return 0; \n}\n
Run Code Online (Sandbox Code Playgroud)\n

当 theta 为 PI …

c++

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

如何将boost访问者概念与包含状态变量的类一起使用?

我正在尝试使用boost :: static_visitor在boost :: variant类型上实现影响某些变量状态的操作.我的方法是在命令访问者类中包含所有状态变量,但似乎这是不可能的.

这是我的代码示例:

#include <string>
#include <sstream>
#include <vector>
#include <boost/variant.hpp>
#include <boost/foreach.hpp>


struct TypeA
{
    int varA;
    int varB;
};

struct TypeB
{
   std::string varA;
   std::string varB;
};

typedef boost::variant<TypeA, TypeB> MyVariantType;

class MyCommandVisitor : public boost::static_visitor<>
{
public:
//These are just examples, the actions only need to be able to touch
// internal variables.
void operator()(TypeA & t) const
{
   m_runningSum += t.varA;
   m_outStream << "TYPEA ACTION: " << t.varB << std::endl;
}

void operator(TypeB …
Run Code Online (Sandbox Code Playgroud)

c++ boost visitor-pattern boost-variant

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

使用std :: cout和std :: stringstream时,如何使符号出现在填充的末尾?

我有以下代码用于格式化打印输出,总是4位数,包含符号:

std::stringstream pitch; 
pitch.precision(0);

pitch.width(4);
pitch.fill('0');

pitch << std::showpos << (int)(m_values["Pitch_1"]);
Run Code Online (Sandbox Code Playgroud)

我还想显示符号("+"/" - "),但我希望它在填充之前,如下所示:

+002
Run Code Online (Sandbox Code Playgroud)

但是,我在这里的代码将"+"符号移动到最高位:

00+2
Run Code Online (Sandbox Code Playgroud)

如果可能的话,我如何更改格式以便我拥有前者而不是后者?

c++ cout std stringstream

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