如何在Xeon Phi中将struct传递给offload
发布时间:2020-12-16 07:14:43 所属栏目:百科 来源:网络整理
导读:我有一个带有一些int和一个int *成员的结构A.如何在卸载中使用它? 我可能不能做#pragma offload target(mic:0)inout(A){} …,但是怎么样 的#pragma卸载目标(MIC:0)(A- firstInt,A- secondInt)INOUT(A- intPointer:长度(A- firstInt * A- secondInt)){}
我有一个带有一些int和一个int *成员的结构A.如何在卸载中使用它?
我可能不能做#pragma offload target(mic:0)inout(A){} …,但是怎么样 的#pragma卸载目标(MIC:0)(A-> firstInt,A-> secondInt)INOUT(A-> intPointer:长度(A-> firstInt * A-> secondInt)){} 但是当我尝试这个时,我得到了错误:在编译时响应中的offload子句中此变量列表的实体无效 解决方法
您的第一次尝试失败,因为该结构不是按位可复制的.实际上,不允许传输包含指针的结构.使用第二种方法,编译器无法匹配成员变量,因为A在加速器上不可用.您可以通过预先提取成员并使用单个变量来解决问题.
struct S { int firstInt; int secondInt; int *intPointer; }; 假设您有上述结构的实例A,则可以执行以下操作. int first = A.firstInt; int second = A.secondInt; int *pointer = A.intPointer; 之后,您可以使用卸载区域内的各个变量. #pragma offload target(mic: 0) in(first,second) inout(pointer:length(first*second)) { /* Use individual variables here. */ } 确保在复制指针引用的数据之前在设备上分配内存. 或者,您可以从结构中排除指针并将其作为单独的变量传递.这样,您可以单独复制整个结构(现在可以按位复制)和指针. #pragma offload target(mic: 0) in(A) inout(pointer:length(A.first*A.second)) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |