2010-05-01 2 views
1

이것은 내 코드입니다.포인터가 참조하는 구조체의 필드에서 연산이 자동 벡터화 될 수 있습니까?

struct Vector 
{ 
float x, y, z, w; 
}; 
typedef struct Vector Vector; 

inline void inv(Vector* target) 
{ 
(*target).x = -(*target).x; 
(*target).y = -(*target).y; 
(*target).z = -(*target).z; 
(*target).w = -(*target).w; 
} 

저는 ARM (iPhone) 용 GCC를 사용하고 있습니다. 이것이 벡터화 될 수 있습니까?

추신 : 나는 일종의 최적화를 시도하고 있습니다. 모든 추천을 환영합니다.

답변

0

벡터 정의 방법에 따라 다르지만 가능할 수 있습니다. 자동 벡터화를 찾고 있다면 Intel의 ICC를 사용해보십시오 (여기에 대해서는 x86에 대해 이야기하고 있다고 가정하십니까?). 특정 상황에서는 gcc보다 훨씬 뛰어 났지만 명시 적으로 개선 할 수는 있습니다. 프로그래머가 컴파일러가 소스 코드만으로 의미하는 것보다 프로그램에 대해 더 많이 알고 있기 때문에 손으로 직접 벡터화 할 수 있습니다.

+0

오, 미안해. Vector의 정의와 타겟 하드웨어를 추가했습니다. – Eonil

+0

OK -이 경우 손으로 벡터화 할 것을 제안합니다. 매우 간단합니다 - 어셈블러를 사용하는 대신 gcc에 네온 내장 함수를 사용하십시오. –

+0

제안 및 여기에 다른 질문 주셔서 감사합니다 :) – Eonil

1

가능성은 낮지 만 컴파일러의 앨리어싱 문제를 줄이고 더 나은 코드를 생성 할 수있는 제한 포인터를 사용해보십시오.

+0

제한 키워드를 소개해 주셔서 감사합니다. 나는 그것을 파헤쳐. – Eonil

관련 문제