小编ben*_*rto的帖子

CUDA中的随机播放指令无法正常工作

我在CUDA 5.0中遇到了shuffle指令的问题.

这是我内核的片段.它在循环内.打印仅用于调试目的,因为我不能使用普通的调试器:

...
tex_val = tex2D(srcTexRef, threadIdx.x + w, y_pos);
if (threadIdx.x == 0)
{
    left = left_value[y_pos];
}
else
{
    printf("thread %d; shfl value: %f \n", threadIdx.x, __shfl_up(value, 1));
    left = __shfl_up(value, 1);
}

printf("thread %d; value: %f; tex_val: %f; left: %f \n", threadIdx.x, value, tex_val, left);
...
Run Code Online (Sandbox Code Playgroud)

从那我得到这个输出:

l0:  ITERATION 1
l1:  thread 0; value: 0; tex_val: 1; left: 4
l2: 
l3:  ITERATION 2
l4:  thread 1; shfl value: 0
l5:  thread 0; value: 5; tex_val: 1; …
Run Code Online (Sandbox Code Playgroud)

c++ cuda shuffle

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

在c ++中使用不同的返回类型覆盖方法

我是c ++的初学者,所以如果我的问题是愚蠢的借口.我有4类:ProgramNodeBase,ProgramNode,FunctionBase,Function.ProgramNode源自ProgramNodeBaseFunction衍生自FunctionBase.ProgramNodeBase有指针的向量FunctionBase和可以从它返回项目的方法.是否有可能在派生类ProgramNode中重写此方法,使其返回Function而不是FunctionBase?我在这里查看了一些答案,但没有找到任何返回类型派生的地方.

我问,因为我有需要的方法,Function这只能返回FunctionBase所以当我想调用它时需要一些转换.有一些简单的方法来处理这个?

这只是我的代码片段,但它涵盖了我遇到的问题.我希望这个问题是清楚的,而不是非常微不足道的.

// ProgramNodeBase.h
#include <vector>

class FunctionBase;

class ProgramNodeBase
{
    protected:
        std::vector<FunctionBase*> m_edgeFn;
    public:
        ProgramNodeBase();
        virtual ~ProgramNodeBase();
        virtual FunctionBase* GetEdgeFunction(unsigned int position);
};

// ProgramNodeBase.cpp
#include "ProgramNodeBase.h"

ProgramNodeBase::ProgramNodeBase() { }
ProgramNodeBase::~ProgramNodeBase() { }

FunctionBase* ProgramNodeBase::GetEdgeFunction(unsigned int position)
{
    if (position < m_edgeFn.size())
    {
         return m_edgeFn[position];
    }

    return …
Run Code Online (Sandbox Code Playgroud)

c++ polymorphism inheritance covariance

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

在c ++中创建派生抽象类的实例

我有这个问题,不知道如何解决它.

假设我有这些基类:

class ValueBase
{
    private:
    int base_value;

    public:
    int GetValue();
    void SetValue(int val);
    virtual ValueBase* Meet(ValueBase* const a, ValueBase* const b) = 0;
}

class NodeBase
{
    private:
    ValueBase* base_nodeValue;

    public:
    bool AddValue(int val);
}
Run Code Online (Sandbox Code Playgroud)

和派生类:

class Value : public ValueBase
{
    public:
    Value* Meet(ValueBase* a, ValueBase* b) override;
}
Run Code Online (Sandbox Code Playgroud)

有没有一种方法来创建类的实例Value的方法AddValue的类NodeBase?我知道我应该制作AddValue纯虚拟并在派生类中实现它NodeBase,但是有可能没有这个选项吗?我可以使用例如模板方法或可能回调方法Value来构造该对象吗?或者这样做太邪恶了?

编辑:我无法访问类Value中的派生类NodeBase

c++ oop inheritance abstract-class instantiation

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