gpt4 book ai didi

c - 是否可以将字符串数组卸载到 Xeon Phi

转载 作者:行者123 更新时间:2023-11-30 17:26:42 26 4
gpt4 key购买 nike

我想获取 xeon phi 上字符串的所有子字符串
首先,我从 args 读取一个 txt 文件并将其存储到这样的指针数组中

char *temp_string[N_ELEMENT];

其次,我想使用 pragma offlad 将此数组复制到 xeon phi,如下所示

#pragma offload target(mic: 0) in(temp_string:length(N_ELEMENT))

命令行给我以下消息

error: variable "temp_string" used in in/out/inout clause is an array whose underlying type is "char *"

有什么办法可以解决我的问题吗?

<小时/>

卸载部分如下:

#pragma offload target(mic: 0) in(temp_string:length(N_ELEMENT))
#pragma omp parallel for private(c, i, length)
for(n = 0; n < N_ELEMENT; ++n)
{
length = strlen(temp_string[n]);

for( c = 0 ; c < length ; c++ )
for( i = 1 ; i <= length - c ; i++ )
{
sub = substring(temp_string[n], c+1, i);
printf("%s \n", sub);
}

}

最佳答案

一种解决方案是将字符串存储在平面 char* temp_string 中,并将其与索引 vector int* vIndexes 配对,以保留每个字符串的起始索引。

检查此示例取自 here 。它代表了使用offload部分的所有情况。

typedef int ARRAY[10][10]; 
int a[1000][500];
int *p;
ARRAY *q;
int *r[10][10];
int i, j;
struct { int y; } x;
#pragma offload … in( a )
#pragma offload … out( a[i:j][:] )
#pragma offload … in( p[0:100] )
#pragma offload … in( (*q)[5][:] )
#pragma offload … in( r[5][5][0:2] )
#pragma offload … out( x.y )

在所有情况下,要传输的 block 的大小都可以在编译时确定。使用 *q*r 检查案例。在您的情况下,无法确定 temp_string 中每个元素的大小。所以我会尝试我的第一个建议的解决方案。

由于我没有 XeonPhi,所以无法尝试,但我也会尝试:

typedef char CHAR_ARRAY[MAX_STRING_SIZE];
CHAR_ARRAY temp_string[N_ELEMENTS];
#pragma offload target(mic: 0) in(temp_string)

第一个解决方案的优点是它是完全动态的,并且传输的数据量与您需要的数据量完全相同。第二种解决方案将允许编译器正确对齐您的结构并更好地利用矢量化。

关于c - 是否可以将字符串数组卸载到 Xeon Phi,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26687882/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com