我在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 ++的初学者,所以如果我的问题是愚蠢的借口.我有4类:ProgramNodeBase,ProgramNode,FunctionBase,Function.ProgramNode源自ProgramNodeBase和Function衍生自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) 我有这个问题,不知道如何解决它.
假设我有这些基类:
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