我有以下课程:
class host_list{
host_vector<int> id;
host_vector<int> weight;
/*...irrelevant functions and variables...*/
host_list& operator= (const device_list& TheOther );
};
class device_list{
device_vector<int> id;
device_vector<int> weight;
/*...irrelevant functions and variables...*/
device_list& operator= (const host_list& TheOther );
};
和我的职能:
void FillSampleData(host_list& dest);//just fills the two vectors with
// 40-40 members, runs on CPU
int main(void){
host_list input;
int result[5]={0};
FillSampleData(input);
EvaluateData(input,result);
/*...etc...*/
}
void EvaluateData(host_list& input,int*& result){
device_list d_list;
[1]cudaDeviceSynchronize();
[2]d_list=input;
/*...etc...*/
}
起初我认为将输入向量复制到gpu [2]时出现了一些错误。 2分钟。经过一些搜索,我发现编写gpu全局内存必须等待所有内核启动完成,所以我添加[1]只是为了看看会发生什么。
结果[2]运行速度尽可能快但同步线[1]运行超过2分钟。
有人可以告诉我代码正在等待的隐藏内核调用在哪里,或者我错过了什么(我正在考虑预先初始化但我从来没有做过类似的事情,所以我怀疑它是我错过了什么?