2014-11-01 5 views
0

내가 제온 파이
처음에 캐릭터의 모든 문자열을 얻으려면 인텔 MIC에 문자열 배열을 오프로드, 내가 인수에서 txt 파일을 읽고이이 가능

char *temp_string[N_ELEMENT]; 
같은 포인터 배열로 저장

둘째, 나는 나에게 다음과 같은 메시지

,838을 줄이

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

명령 줄처럼 피를 제온이 배열을 콥트하는 프라 그마 offlad를 사용하여 원하는

내 문제를 해결할 수있는 해결책이 있습니까? 이런


오프로드 섹션

#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); 
     } 

} 
+0

offload 섹션에서 temp_string을 사용하는 코드를 게시 할 수 있습니까? – VAndrei

답변

0

하나의 해결책은 각각의 스트링의 시작 인덱스를 유지 인덱스 벡터 int* vIndexes 플랫 char* temp_string 페어링 그것을 문자열을 기억한다.

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) 

모든 경우에, 전송 될 블록의 크기는 컴파일 타임에 결정될 수있다. 수표 케이스가 *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) 

최초의 솔루션의 장점은 완전히 동적이다와 동일한 전송 필요한만큼의 데이터. 두 번째 솔루션은 컴파일러가 구조를 올바르게 정렬하고 벡터화를보다 잘 활용할 수있게 해줍니다.

+0

나는 당신이 의미하는 바를 알고 있는지 확신하지 못한다. 나의 문제를 해결하는 방법을 암시하는 예를 들어 줄 수 있니? 매우 감사합니다. –

+0

내 수정 된 답변보기 – VAndrei

+0

시도해 보았지만 오류가 있습니다. –