2010-12-13 5 views
2

루프 벡터화는 모든 오른쪽 사이드식이 시작될 때 계산됩니다. 방금 루프가 벡터화되고 있음을 발견했습니다 (FORTRAN 77에서는 ... 묻지 않음). 각 반복에서 루프 상태 변수를 업데이트해야하지만이 벡터화를 해결하기 위해 어떻게 다시 작성할 수 있습니까?루프 벡터화 및이를 방지하는 방법

related post에서 저는 FORTRAN에서이 최적화 "기능"을 사용하지 못하게하는 방법을 찾고 있습니다. 그러나 여기에서는 일반적인 경우에 대한 알고리즘 적 솔루션을 찾고 있습니다.

+1

귀하의 게시 관련 두 가지 질문이 귀하의 기본 질문에 대한 명확한 답변을 얻는 데 도움이되는지 확신하지 못합니다. 나 혼란스러워! –

+0

사과드립니다. 나는 일반적인 경우와 일반 대중에게 질문을 여는 것이 좋은 일일 수 있다고 생각하고 FORTRANnies에 대한 다른 스레드에서 FORTRAN 특정 세부 사항을 유지하는 것이 좋습니다. 나는이 스레드를 거기에서 교차 참조 할 것이다. –

+0

루프 풀림에 대해 이야기하고 있습니까? – ja72

답변

5

그건 루프 벡터화가 내게주는 의미가 아닙니다. 나에게이 문구는 컴파일러가 하드웨어의 벡터 계산 기능을 이용할 수있는 코드를 생성 함을 의미합니다. 간단한 Intel Xeon에서 이는 인접한 몇 개의 배열 요소를 동시에 조작하기 위해 SSE4 명령어를 생성하는 것을 의미 할 수 있습니다. Cray에서는 벡터 레지스터에서 동일한 연산을 동시에 실행하는 측면에서 훨씬 더 유용 할 수 있습니다.

모든 RHS 표현식이 '발병시 계산 된'것이라고 생각하십니까? 나는 그게 무슨 뜻인지 모르겠다. 설명 할 코드를 게시 할 수 있습니까? 루프를 통과하는 횟수가 첫 번째 반복 항목으로 계산 될 때 계산된다는 것을 의미하면 올바른 것입니다. 이는 코드 최적화에있어 매우 유용한 기능이며 대부분의 Fortran 프로그램이 피하는 것이 도움이되지는 않습니다.

Fortran에서 DO 루프를 작성하는 경우 반복 변수는 표준에서 금지되어 있으며 항상 상기 한 내용을 기억합니다. 컴파일러가 문제를 해결할 수는 있지만 이런 일이 일어난 Fortran 프로그램을 신뢰하지는 않습니다.

+0

잘 받아 들여지는, 그렇습니다, 이것들은 DO 루프입니다, 그래서 거기에 내 문제가 있어야합니다! 대신 IF/THEN/GOTO 콤보를 할 수 있다고 가정합니다. –

+2

일부 코드를 게시하면 종속성을 푸는 데 도움이 될 수 있습니다. 가능하다면 최적화를 위해 조건문을 사용하지 않는 것이 좋습니다. 그리고 만약 당신이 GOTO 진술서를 쓰면 다른 발에도 자신을 쏠 수있는 허락을 받았습니다 :-) –