由于不存在内核启动,将副本推送到设备内存很慢

时间:2013-07-12 08:23:08

标签: cuda gpu thrust

我有以下课程:

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分钟。

有人可以告诉我代码正在等待的隐藏内核调用在哪里,或者我错过了什么(我正在考虑预先初始化但我从来没有做过类似的事情,所以我怀疑它是我错过了什么?

0 个答案:

没有答案