1
OpenACC 지시문에 원자 함수를 사용하고 싶습니다. 도움이 될 pgC++의 컴파일 옵션은 무엇입니까? 특정 헤더 파일을 사용해야합니까?OpenACC에서 원자 함수 사용
OpenACC 지시문에 원자 함수를 사용하고 싶습니다. 도움이 될 pgC++의 컴파일 옵션은 무엇입니까? 특정 헤더 파일을 사용해야합니까?OpenACC에서 원자 함수 사용
확인할 사항 : 올바른 데이터를 사용하고 있습니까? this forum에 따르면 모든 가속기가 모든 데이터 형식을 허용하지는 않으며 모든 데이터 형식을 원자 적으로 액세스 할 수있는 것은 아닙니다. 표 13 (this link)은 Nvidia의 atomics가 32 비트 정수 및 부동 소수점 데이터 유형에만 사용할 수있는 것으로 나타났습니다. 64 비트는 연산 용량 6.x +에서 사용할 수 있습니다.
당신은 당신의 코드처럼 보이는 말 :#pragma acc atomic
{
res[i][i]=res[i][i]+x;
res[j][j]=res[j][j]+y;
}
그러나, 당신이 함께 같은 둥지 여러 원자 연산을 할 수 있다고 생각하지 않습니다. 대신, 시도해보십시오 :
#pragma acc atomic update
res[i][i]=res[i][i]+x;
#pragma acc atomic update
res[j][j]=res[j][j]+y;
OpenACC의 모든 원자 연산은 #pragma acc atomic 명령에 의해 제공됩니다. 컴파일러가 표준 V2.0을 지원해야합니다. – talonmies
이 지시어를 사용했지만 컴파일 오류가 발생했습니다. #pragma acc atomic {res [i] [res] [i] [x]}, 컴파일 오류가 없지만 #pragma acc atomic {res [i] [i] = res [i] [i] + x res [j] [j] = res [j] [j] + y}, PGCC-S-0155- 원자 표현이 잘못되었습니다. –