2014-01-23 3 views
1

인텔 코어 2 듀오에는 3 개의 SSE 유닛이있는 것으로 알려져 있습니다. 이들 3 개 개의 유닛은 3 개 SSE 명령어는 paralelly 실행할 수 있도록 1 예 : 또한 (빼기) 용, 다른 하나의 경우 :인텔 코어 2 듀오 용 3 SSE 유닛에 적합한 mullps/addps 명령

rA0 = mullps(rB0, rC0); \ 
rA1 = mullps(rB1, rC1); > All 3 take 1 cycle to be scheduled (* - see Remarks). 
rA2 = mullps(rB2, rC2); /

는 매 SSE 유닛은 2 개의 모듈로 구성하는 것이 또한 알려져 곱셈 (나눗셈). 후자는 예를 들어, 평행 (2) mullps - addps 명령 시퀀스를 실행할 수 있습니다 :

rA0 = mullps(rB0, rC0); \ 
         > All 2 take 1 cycle to be scheduled for 1 SSE module. 
rA1 = addps(rB1, rC1);/

질문이 followig입니다 : 조각이 취할 다음이 코드의 각을 예약 할 방법을 많이주기?

rA0 = mullps(rB0, rC0); \ 
rA1 = mullps(rB1, rC1); | 
rA2 = mullps(rB2, rC2); \ Do all 6 execute in one step? (See paragraph (2)) 
rA3 = addps(rB3, rC3); /
rA4 = addps(rB4, rC4); | 
rA5 = addps(rB5, rC5); /

코드 목록 B : I는 A 또는 B를 선호한다 명령 순서의

rA0 = mullps(rB0, rC0); \ 
rA1 = addps(rB1, rC1); | 
rA2 = mullps(rB2, rC2); \ Do all 6 execute in one step? (See paragraph (1)) 
rA3 = addps(rB3, rC3); /
rA4 = mullps(rB4, rC4); | 
rA5 = addps(rB5, rC5); /

이 방법 목록

코드? 구체적

:

  1. 3 개 SSE 승산 유닛 (1) 내지 (3) mulps를 배포하는 것이 가능하고, 동시에 (2) 전체 결과 각 SSE 부가 단위 addps를 배포 일정주기 당 6 가지 지침?
  2. 먼저 N 개의 뮬 풀을 실행하고 N 개의 addps를 실행하면 어떤 N이 최적입니까?

비고 '예정'내 말은 처리 속도에 의해

  • .
+5

와우 와우 ... 여기. 코어 2 프로세서에는 3 개의 SSE 유닛이 있습니다. 그러나 그들은 다른 일을합니다. 1은 더하기/빼기입니다. 1은 곱셈이고, 1은 셔플입니다. 두 예제 모두에서 3 회 이상의 처리량을 얻을 수 없습니다. 그리고 당신은 [OOE] (http://en.wikipedia.org/wiki/Out-of-order_execution)에 관해 조금이라도 읽고 싶을 것입니다. 따라서 명령이 너무 중요하지 않아야합니다. – Mysticial

+0

두 작업을 모두 할 수있는 장치를 가지고 있더라도 하나의 포트로 계속 연결됩니다. – Leeor

+0

허 ... 설명해 주셔서 감사합니다. 기사를 읽을 것입니다. –

답변

0

Agner Fog's 명령어가 실행 단위에서 실행될 수있는 명령어 테이블을 참조하십시오. 그리고/또는 Intel의 코드 분석기 (IACA)를 사용하여 처리량 병목 현상 (종속성 체인 또는 포트 경합)을 찾습니다.

의견 작성자의 말처럼 모든 실행 포트가 FP MUL을 처리 할 수있는 것은 아닙니다. 그들은 모두 vector-int 논리 (AND/OR/XOR)를 처리 할 수 ​​있지만 하나 또는 두 개의 포트에만 벡터 셔플 유닛 또는 벡터 이동 유닛 등이 있습니다.