C++ 从c+派生cuda类+;类,在大型框架中
我有一个相当大的c++/mpi项目,我想在其中集成一些cuda功能。 我创建了一个示例项目(尚未运行)来说明这个问题。来源之间的评论描述了问题 我有一个main.cc:C++ 从c+派生cuda类+;类,在大型框架中,c++,cuda,mpi,derived-class,C++,Cuda,Mpi,Derived Class,我有一个相当大的c++/mpi项目,我想在其中集成一些cuda功能。 我创建了一个示例项目(尚未运行)来说明这个问题。来源之间的评论描述了问题 我有一个main.cc: /*main.cc*/ #include <iostream> #include "derivedclass.h" #include "someotherclass.h" using namespace std; int main(){ int intstate = 4; DerivedClass<
/*main.cc*/
#include <iostream>
#include "derivedclass.h"
#include "someotherclass.h"
using namespace std;
int main(){
int intstate = 4;
DerivedClass<int> myDerivedClass;
myDerivedClass.setState(intstate);
myDerivedClass.compute();
int result = myDerived.getResult();
SomeOtherClass mySomeOtherClass(result);
mySomeOtherClass.print();
}
这个基类提供了很多功能(太多了,但不是我的项目,所以我无法更改)。
有些方法将由我并行。因此,对我来说,这似乎是使用Cuda派生基类的最干净的方法:
/*derivedclass.h*/
#ifndef DERIVEDCLASS_H_GUARD
#define DERIVEDCLASS_H_GUARD
#include "baseclass.h"
class DerivedClass: public BaseClass{
public:
DerivedClass(int someVariable);
void compute();
};
#endif
/*derivedclass.cu*/
#include "derivedclass.h"
DerivedClass::DerivedClass(int someVariable):
BaseClass(someVariable);
{
}
void DerivedClass::compute(){
/* do some cuda stuff*/
}
因此,我有以下问题:
<>我希望我能描述我的问题,理解并感谢任何帮助。 < P>从我的代码中可以看出,你的派生类只是一个启动CUDA内核的C++类。所以这不是真正的“CUDA课程”。那么你的问题1的答案是什么呢。是的,你可以做到。您只需将任何启动内核的成员函数与它们启动的内核一起放入.cu文件中 错误“在'cudamaloc'之前需要初始值设定项”是一个奇怪的语法错误。它似乎与派生类的内容没有任何关系。我怀疑你只是有一个C++语法错误。
/*baseclass.h*/
#ifndef BASECLASS_H_GUARD
#define BASECLASS_H_GUARD
class BaseClass{
protected:
int someVariable;
public:
BaseClass(int someVariable);
void compute();
int getResult();
};
#endif
/*baseclass.cc*/
BaseClass::BaseClass(int someVariable){
this->someVariable = someVariable;
}
void BaseClass::compute(){
/* do something*/
}
int BaseClass::getResult(){
return this->someVariable;
}
/*derivedclass.h*/
#ifndef DERIVEDCLASS_H_GUARD
#define DERIVEDCLASS_H_GUARD
#include "baseclass.h"
class DerivedClass: public BaseClass{
public:
DerivedClass(int someVariable);
void compute();
};
#endif
/*derivedclass.cu*/
#include "derivedclass.h"
DerivedClass::DerivedClass(int someVariable):
BaseClass(someVariable);
{
}
void DerivedClass::compute(){
/* do some cuda stuff*/
}