사용자 도구

사이트 도구


컴퓨터_구조

4.3 SIMD Instruction Set Extensions for Multimedia

SIMD Multimedia Extensions started with the simple observation that many media applications operate on narrower data types than the 32-bit processors were optimized for.

SIMD 멀티미디어 확장 기능은 많은 미디어 애플리케이션들이 32-bit 프로세서에서 최적화 되었지만 더 작은 데이터 타입들로 동작하는 간단한 관찰에서 시작되었습니다.

Many graphics systems used 8 bits to represent each of the three primary colors plus 8 bits for transparency.

많은 그래픽 시스템은 세 가지 원색에 투명도를 위한 8 bit를 더하고 각 각을 표현하는데 8 bits 를 사용했다.

Depending on the application, audio samples are usually represented with 8 or 16 bits.

애플리케이션에 따라서 오디오 샘플은 대개 8 또는 16 비트로 표현할 수 있습니다.

By partitioning the carry chains within, say, a 256-bit adder, a processor could perform simultaneous operations on short vectors of thirty-two 8-bit operands, sixteen 16-bit operands, eight 32-bit operands, or four 64-bit operands.

캐리 체인을 분할하게 되면, a 256-bit 가산기, 프로세서는 동시에 32개 8-bit 피연산자, 16개 16-bit 피연산자, 8개 32-bit 피연산자 또는 4개 64-bit 피연자의 작은 벡터들로 수행할 할 수 있다.

The additional cost of such partitioned adders was small.

이렇게 adders 분할했을 때의 추가 비용은 적다.

Figure 4.8 summarizes typical multimedia SIMD instructions.

그림 4.8은 일반적인 멀티미디어 SIMD 인스트럭션을 요약한 것입니다.

Like vector instructions, a SIMD instruction specifies the same operation on vectors of data.

벡터 명령들 처럼, SIMD 명령은 데이터의 벡터에 대한 동일한 동작을 지정합니다.

Unlike vector machines with large register files such as the VMIPS vector register, which can hold as many as sixty-four 64-bit elements in each of 8 vector registers, SIMD instructions tend to specify fewer operands and hence use much smaller register files.

VMIPS 벡터 레지스터와 같은 큰 레지스타 파일을 갖는 벡터 머신들과 8 개 벡터 레지스터 각 각에 64개의 64-bit 요소를 저장하는 것과 달리 SIMD 명령은 작은 피연산자를 지정하는 경향이 있어서 작은 레지스터 파일을 사용한다.

In contrast to vector architectures, which offer an elegant instruction set that is intended to be the target of a vectorizing compiler, SIMD extensions have three major omissions:

vectorizing 컴파일러를 대상으로 우아한 명령 집합을 제공하는 벡터 아키텍쳐와는 다르게 SIMD 확장은 3가지 주요 누락을 가진다.

■ Multimedia SIMD extensions fix the number of data operands in the opcode, which has led to the addition of hundreds of instructions in the MMX, SSE, and AVX extensions of the x86 architecture.

x86 아키텍처의 MMX, SSE, 그리고 AVX 확장내에 수백개의 인스트럭션이 추가되어 가지고 있으나 멀티미디어 SIMD 확장은 opcode내의 data 피연산자의 개수를 고정시킨다.

Vector architectures have a vector length register that specifies the number of operands for the current operation.

벡터 아키텍처는 현재 작업(operation)에 대한 피연산자의 수를 지정 벡터 길이 레지스터에 가지고 있습니다.

These variable-length vector registers easily accommodate programs that naturally have shorter vectors than the maximum size the architecture supports.

이러한 가변 길이 벡터는 쉽게 프로그램이 수용하도록 자연스럽게 아키텍처가 지원하는 최대 크기보다 작은 벡터를 가집니다.

Moreover, vector architectures have an implicit maximum vector length in the architecture, which combined with the vector length register avoids the use of many opcodes.

더욱이, 벡터 아키텍처는 벡터 길이 레지스터로 많은 opcode 사용을 피하도록 하고 아키텍처에서 암시적의로 최대 벡터 길이를 가진다.

Instruction category Operands
Unsigned add/subtract Thirty-two 8-bit, sixteen 16-bit, eight 32-bit, or four 64-bit
Maximum/minimum Thirty-two 8-bit, sixteen 16-bit, eight 32-bit, or four 64-bit
Average Thirty-two 8-bit, sixteen 16 16-bit, eight 32-bit, or four 64-bit
Shift right/left Thirty-two 8-bit, sixteen 16-bit, eight 32-bit, or four 64-bit
Floating point Sixteen 16-bit, eight 32-bit, four 64-bit, or two 128-bit
Figure 4.8 Summary of typical SIMD multimedia support for 256-bit-wide operations. Note that the IEEE 754-2008 floating-point standard added half-precision (16-bit) and quad-precision (128-bit) floating-point operations.
그림 4.8 256bit-wide 연산을위한 대표적인 SIMD 멀티미디어 지원에 대한 요약. IEEE 754-2008 부동 소수점 표준에 절반 정밀도를 추가(16비트) 및 쿼드 정밀(128비트) 부동 소수점 연산을 추가했다.

■ Multimedia SIMD does not offer the more sophisticated addressing modes of vector architectures, namely strided accesses and gather-scatter accesses.

멀티미디어 SIMD는 벡터 아키텍처에 더 세련되고 정교한 주소지정 모드를 제공하지 않습니다. 다시 말하면, 큰 범위의 포괄적 접근과 gather-scatter 접근이다.

These features increase the number of programs that a vector compiler can successfully vectorize ( see Section 4.7 )

이러한 특징은 vector 컴파일러가 성공적으로 vectorize하게하고 프로그램의 수가 증가한다. ( 참고 Section 4.7 )

■ Multimedia SIMD usually does not offer the mask registers to support conditional execution of elements as in vector architectures.

멀티미디어 SIMD는 일반적으로 벡터 아키텍처 요소의 조건부 실행을 지원하는 mask 레지스터를 제공하지 않습니다.

These omissions make it harder for the compiler to generate SIMD code and increase the difficulty of programming in SIMD assembly language.

이러한 누락은 SIMD 코드 생성과 SIMD 어셈블리 언어로 프로그래밍하는데 어려움을 증가시켜 컴파일러에 대한 그것을 만들기 더 어렵게 한다.

For the x86 architecture, the MMX instructions added in 1996 repurposed the 64-bit floating-point registers, so the basic instructions could perform eight 8-bit operations or four 16-bit operations simultaneously.

x86 아키텍처의 경우, 1996년에 64-bit floating-point 레지스터의 목적을 달리해 MMX 인스트럭션이 추가됐다. 또한 기본 명령어들은 8개 8-bit 작업 또는 4개 16-bit 작업들을 동시에 수행할 수 있다.

These were joined by parallel MAX and MIN operations, a wide variety of masking and conditional instructions, operations typically found in digital signal processors, and ad hoc instructions that were believed to be useful in important media libraries.

여기에는 병렬 MAX 와 MIN 작업, 마스킹의 다양한 종류, 조건부 인스트럭션들, 디지털 신호 처리에서 일반적인 작업을 찾았고 특수한 인스트력션들에서 중요한 미디어 라이브러리에서 유용할 것이라 믿는 특수한 인스트럭션들이 포함되었다.

Note that MMX reused the floating-point data transfer instructions to access memory.

MMX가 메모리에 액세스하는 부동 소수점 데이터 전송 인스트럭션을 재사용합니다.

The Streaming SIMD Extensions (SSE) successor in 1999 added separate registers that were 128 bits wide, so now instructions could simultaneously perform sixteen 8-bit operations, eight 16-bit operations, or four 32-bit operations.

1999년에 Streaming SIMD 확장(SSE)에 이어 128 비트 와이드 레지스트를 별도로 추가했고 현재 인스트럭션은 16개 8-bit 작업, 8개 16-bit 작업, 또는 4개 32-bit 작업을 동시에 수행할 수 있다.

It also performed parallel single-precision floating-point arithmetic.

이것은 또한 병렬 단일-정밀도 floating-point 연산을 수행한다.

Since SSE had separate registers, it needed separate data transfer instructions.

SSE가 별도의 레지스터를 갔게된 이후, 이것은 별도의 데이터 전송 인스트럭션을 필요로 했습니다.

Intel soon added double-precision SIMD floating-point data types via SSE2 in 2001, SSE3 in 2004, and SEE4 in 2007.

인텔은 곧 배정밀도 SIMD floating-point 데이터 타입들을 2001년에 SSE2, 2004년에 SSE3, 2007년에 SSE4를 통해 추가했다.

Instructions with four single-precision floating-point operations or two parallel double-precision operations increased the peak floating-point performance of the x86 computers, as long as programmers place the operands side by side.

4개 단일 정밀도 floating-point 작업과 병령 배 정밀도 작업 인스트럭션은 x86 컴퓨터의 부동 소수점(floating-point) 성능을 향상 시켰다. 피연산자에 대한 프로그래머의 입장에서도( as long as programmers place the operands side by side. )

With each generation, they also added ad hoc instructions whose aim is to accelerate specific multimedia functions perceived to be important.

각 세대에서 그것들만의 중요하게 인식되는 구체적인 멀티미디어 기능을 가속화시킬 목적으로 특별한 인스트럭션이 추가됐다.

The Advanced Vector Extensions (AVX), added in 2010, doubles the width of the registers again to 256 bits and there by offers instructions that double the number of operations on all narrower data types.

고급 벡터 확장(AVX)은 다시 레지스터의 넓이를 두배인 256비트로 모든 작은 데이터 타입들에 작업(operations)의 두배 수 인스트럭션을 제공하게 2010년에 추가했다.

Figure 4.9 shows AVX instructions useful for double-precision floating-point computations.

그림 4.9는 배 정밀도 부동 소수점 계산에 대한 유용한 AVX 인스트럭션을 보여줍니다.

AVX includes preparations to extend the width to 512 bits and 1024 bits in future generations of the architecture.

AVX는 아키텍처의 다음 세대에서 폭을 512 비트, 1024 비트로 확대하기 위한 준비를 포함한다.

In general, the goal of these extensions has been to accelerate carefully written libraries rather than for the compiler to generate them (see Appendix H), but recent x86 compilers are trying to generate such code, particularly for floating-point-intensive applications.

일반적으로 컴파일러가 생성하는 것들 보다 신중하게 작성된 라이브러리들에 대한 가속화를 확장의 목표로 갖는다.(붙임 H 참조) 하지만 최근의 x86 컴파일러는 특히 부동 소수점에 집약된 애플리케이션을 위해서 코드 생성을 시도한다.

Given these weaknesses, why are Multimedia SIMD Extensions so popular?

이러한 약점에도 왜 멀티미디어 SIMD 확장이 주목 받는가?

First, they cost little to add to the standard arithmetic unit and they were easy to implement.

첫 번째, 표준 연산 유닛 추가에 대한 적은 비용과 구현이 쉽다는 점.

Second, they require little extra state compared to vector architectures, which is always a concern for context switch times.

두 번째, 항상 컨텍스트 스위치 시간에 대해 관심을 갖고 백터 아키텍처에 약간의 추가적인 상태를 필요로 한다.

Third, you need a lot of memory bandwidth to support a vector architecture, which many computers don't have.

세 번째, 많은 컴퓨터가 가지지 않은 벡터 아키텍처를 지원에 많은 메모리 대역폭을 필요로한다.

Fourth, SIMD does not have to deal with problems in virtual memory when a single instruction that can generate 64 memory accesses can get a page fault in the middle of the vector.

네 번째, SIMD는 64 메모리 접근을 생성할 수 있는 단일 인스트럭션으로 벡터의 중간에서 페이지 부재가 발생할 수 있을 때 가상 메모리에서 문제를 가지지 않는다.

AVX Instruction Description
VADDPD Add four packed double-precision operands
VSUBPD Subtract four packed double-precision operands
VMULPD Multiply four packed double-precision operands
VDIVPD Divide four packed double-precision operands
VFMADDPD Multiply and add four packed double-precision operands
VFMSUBPD Multiply and subtract four packed double-precision operands
VCMPxx Compare four packed double-precision operands for EQ, NEQ, LT, LE, GT, GE, …
VMOVAPD Move aligned four packed double-precision operands
VBROADCASTSD Broadcast one double-precision operands to four locations in a 256-bit register
Figure 4.9 AVX instructions for x86 architecture useful in double-precision floating-point programs. Packed double for 256-bit AVX means four 64-bit operands executed in SIMD mode. As the width increases with AVX, it is increasingly important to add data permutation instructions that allow combinations of narrow operands from different parts of the wide registers. AVX includes instructions that shuffle 32-bit, 64-bit, or 128-bit operands within a 256-bit register. For example, BROADCAST replicates a 64-bit operand 4 times in an AVX register. AVX also includes a large variety of fused multiply-add/subtract instructions; we show just two here.
그림 4.9 배 정밀 floating-point 프로그램들에서 유용한 x86 아키텍처를 위한 AVX인스트럭션. 256-bit AVX를 위한 배수 맞춤은 SIMD모드에서의 4개 64-bit 피연산자 실행을 의미한다. AVX함께 대역의 증가는 데이터 치환 인스트럭션에 광대역 레지스터의 다른 부분들에서 작은 피연산자의 혼합을 허용하며 점 점더 중요해진다. AVX 인스트럭션은 256-bit 레지스터 내부에 무작위 32-bit, 64-bit, 128-bit 피연산자를 포함합니다. 예를 들자면, AVX레이스터에서 64-bit 피연산자를 4번 복제하고 퍼트린다. 또한 AVX는 다중 덧셈/뺄셈 명령의 많은 갖가지 다른 것을 포함합니다. 여기서 우리는 2개만을 표시한다.

SIMD extensions use separate data transfer per SIMD group of operands that are aligned in memory, and so they cannot cross page boundaries.

SIMD 확장은 메모리 내의 피연산자의 정렬은 SIMD그룹당 각기 다른 데이터 전송을 사용한다. 그래서 피연산자의 페이지 경계를 교차할 수 없습니다.

Another advantage of short, fixed-length “vectors” of SIMD is that it is easy to introduce instructions that can help with new media standards, such as instructions that perform permutations or instructions that consume either fewer or more operands than vectors can produce.

SIMD의 짦은 고정길이 벡터의 장점은 새로운 미디어 표준과 함께 인스트럭션을 쉽게 소개하고 도와줄 수 있다. 또한 인스트럭션은 수해으이 변경과 벡터를 정의하는 것 보다 소수 및 다수의 인스트럭션을 사용한다.

Finally, there was concern about how well vector architectures can work with caches.

마지막으로 백터 아키텍처 캐시 작업을 얼마나 잘 할 수 있나에 대한 관심입니다.

More recent vector architectures have addressed all of these problems, but the legacy of past flaws shaped the skeptical attitude toward vectors among architects.

최근 벡터 아키텍처는 모든 문제의 주소지정을(해겨했다.) 갖는다. 그러나 아키텍트들 사이에서 벡터는 호의적인 태도를 형성하였다.

Example

To give an idea of what multimedia instructions look like, assume we added 256-bit SIMD multimedia instructions to MIPS.

멀티미디어 인스트럭션을 살펴보기 위해 MIPS에 256-bit SIMD 멀티미디어 인스트럭션이 추가된 것으로 가정합니다.

We concentrate on floating-point in this example.

이 예제에서는 부동 소수점(floating-point)에 대해 살펴본다.

We add the suffix “4D” on instructions that operate on four double-precision operands at once.

우리는 4개 배 정밀도 작 중 하나에 인스트럭션을 동작시켜 “4D” 를 추가한다.

Like vector architectures, you can think of a SIMD processor as having lanes, four in this case.

벡터 아키텍처와 마찬가지로 이 사례에서 SIMD 프로세서가 통로를 가진다고 생각할 수 있습니다.

MIPS SIMD will reuse the floating-point registers as operands for 4D instructions, just as double-precision reused single-precision registers in the original MIPS.

MIPS SIMD는 4D 인스트럭션을 위한 피연산자를 부동 소수점(floating-point) 레지스터에 재사용할 것입니다. 배 정밀도는 오리지널 MIPS 단일 레지스터 재사용과 마찬가지입니다.

This example shows MIPS SIMD code for the DAXPY loop.

이 예제는 DAXPY 루프를 위한 MIPS SIMD 코드를 보여줍니다.

Assume that the starting addresses of X and Y are in Rx and Ry, respectively.

X, Y를 시작 주소가 각 각 Rx, Ry안에 있는 것으로 가정한다.

Underline the changes to the MIPS code for SIMD.

SIMD를 위한 MIPS코드는 밑줄로 표시했다.

Answer

Here is the MIPS code:

		L.D		F0, a		;load scalar a
		MOV		F1, F0		;copy a into F1 for SIMD MUL
		MOV		F2, F0		;copy a into F2 for SIMD MUL
		MOV		F3, F0		;copy a into F3 for SIMD MUL
		DADDIU	R4,Rx,#512	;last address to load
Loop:	L.4D	F4, 0(Rx)	;load X[i], X[i+1], X[i+2], X[i+3]
		MUL.4D	F4, F4, F0	;a*X[i], a*X[i+1], a*X[i+2], a*X[i+3]
		L.4D	F8, 0(Ry)	;load Y[i], Y[i+1], Y[i+2], Y[i+3]
		ADD.4D	F8, F8, F4	;a*X[i]+Y[i], ..., a*X[i}3]+Y[i+3]
		S.4D	F8, 0(Rx)	;store into Y[i], Y[i+1], Y[i+2], Y[i+3]
		DADDIU	Rx, Rx, #32	;increment index to X
		DADDIU	Ry, Ry, #32	;increment index to Y
		DSUBU	R20, R4, Rx	;compute bound
		BNEZ	R20, Loop	;check if done

The changes were replacing every MIPS double-precision instruction with its 4D equivalent, increasing the increment from 8 to 32, and changing the registers from F2 and F4 to F4 and F8 to get enough space in the register file for four sequential double-precision operands.

4D와 상응하도록 MIPS 배 정밀도 인스트럭션을 변경했다. 점 점더 증가시키기 위해 8 에서 32로 증가하고 4개 순차적인 배 정밀도 피연산자가 레지스터의 충분한 공간을 얻게 F2와 F4에서 F4 와 F8에 대해 레지스터를 변경했다.

So that each SIMD lane would have its own copy of the scalar a, we copied the value of F0 into registers F1, F2, and F3.

각 각의 SIMD 통로는 스칼라 a의 하나의 복사본을 가지고 우리는 F1, F2, F3 레지스터에 F0의 값을 복사했다.

(Real SIMD instruction extensions have an instruction to broadcast a value to all other registers in a group.)

(실제 SIMD 인스트럭션 확장은 그룹의 모든 다른 레지스터에 값을 알리는 인스트럭션을 갖는다.)

Thus, the multiply does F4*F0, F5*F1, F6*F2, and F7*F3.

그러므로 곱은 F4xF0, F5xF1, F6xF2, F7xF3 이다.

While not as dramatic as the 100x reduction of dynamic instruction band-width of VMIPS, SIMD MIPS does get a 4x reduction: 149 versus 578 instructions executed for MIPS.

VMIPS의 동적 인스트럭션 대역폭의 100x 감소가 극적인 것은 아니고 SIMD MIPS 는 4x의 감소한다. ( MIPS에서 578 인스트럭션을 실행 했을 때 149이다. )

Programming Multimedia SIMD Architectures

Given the ad hoc nature of the SIMD multimedia extensions, the easiest way to use these instructions has been through libraries or by writing in assembly language.

SIMD 멀티미디어 확장의 특별함을 감안할 때 인스트럭션을 사용하는 가장 쉬운 방법은 라이이브러리나 어셈블리 언어로 작성하는 것이다.

Recent extensions have become more regular, giving the compiler a more reasonable target.

최근 확장은 컴파일러에게 더 합당한 목표를 부여하고 보다 더 일반화 되어왔다.

By borrowing techniques from vectorizing compilers, compilers are starting to produce SIMD instructions automatically.

벡터 라이징 기술을 빌린 컴파일러는 SIMD 인스트럭션을 자동적으로 만들어 내기 시작했다.

For example, advanced compilers today can generate SIMD floating-point instructions to deliver much higher performance for scientific codes.

예를들어, 고급 컴파일러는 오늘날 과학적인 코드를 통해 고성능을 만드는 SIMD 부동 소수점 인스트럭션을 만들수 있다.

However, programmers must be sure to align all the data in memory to the width of the SIMD unit on which the code is run to prevent the compiler from generating scalar instructions for otherwise vectorizable code.

그러나 프로그래머는 다른 방법으로 백터화 가능한 코드를 위한 스칼라 인스트럭션을 생성하는 컴파일러를 방지하기 위해서 SIMD 유닛의 대역 메모리 안에 모든 데이터를 정렬해야 한다.

The Roofline Visual Performance Model

One visual, intuitive way to compare potential floating-point performance of variations of SIMD architectures is the Roofline model[Williams et al. 2009].

SIMD 아키텍처의 변화로 잠재적인 부동 소수점 성능을 비교하기 위한 하나의 시각적, 직관적 방법은 Roofline 모델이다. [윌리엄스 외, al. 2009]

Figure 4.10 Arithmetic intensity, specified as the number of floating-point operations to run program divided by the number of bytes accessed in main memory [Williams et al. 2009]. Some kernels have an arithmetic intensity that scales with problem size, such as dense matrix, but there are many kernels with arithmetic intensities independent of problem size.

일부 커널이 연산의 강도로 문제의 크기와 행렬의 밀집도를 가지지만 대부분의 많은 커널이 연산의 강도가 문제 크기에 독립적입니다. |

It ties together floating-point performance, memory performance, and arithmetic intensity in a two-dimensional graph.

그것은 2차원 그래프에서 산술의 강도와, 부동 소수점 성능, 메모리 성능이 함께 묶여 있다.

Arithmetic intensity is the ratio of floating-point operations per byte of memory accessed.

산술 강도는 메모리 접근을 했던 바이트 당 부동 소수점 연산의 비율이다.

It can be calculated by taking the total number of floating-point operations for a program divided by the total number of data bytes transferred to main memory during program execution.

이 비율은 프로그램의 전체 부동 소수점 연산의 수를 프로그램 실행 동안 메인 메모리로 전송한 데이터 바이트의 전체 수로 나눈 값을 계산으로 할 수 있다.

Figure 4.10 shows the relative arithmetic intensity of several example kernels.

그림 4.10는 몇가지 예로든 커널의 산술 강도와의 관계를 보여준다.

Peak floating-point performance can be found using the hardware specifications.

부동 소수점의 최고 성능에 대해서는 하드웨어 사양을 사용해 찾을 수 있다.

Many of the kernels in this case study do not fit in on-chip caches, so peak memory performance is defined by the memory system behind the caches.

커널의 대부분은 이 사례로 on-chip 캐쉬 학습이 적합하지 않다. 최대 메모리 성능은 메모리 시스템의 내부 캐쉬 정의된다.

Note that we need the peak memory bandwidth that is available to the processors, not just at the DRAM pins as in Figure 4.27 on page 325.

참고로 우리는 325쪽 그림 4.27 같이 DRAM 핀들은 프로세서에서 최대 메모리 대역폭을 필요로 합니다.

One way to find the (delivered) peak memory performance is to run the Stream benchmark.

최대 메모리 성능을 찾는 한가지 방법은 Stream 벤치마크를 실행하는 것입니다.

Figure 4.11 shows the Roofline model for the NEC SX-9 vector processor on the left and the Intel Core i7 920 multicore computer on the right.

그림 4.11 왼쪽은 NEC SX-9 벡터 프로세스를 위한 Rootline 모델과, 오른쪽은 Intel Core i7 920 멀티코어 컴퓨터를 위한 Roofline 모델을 보여준다.

The vertical Y-axis is achievable floating-point performance from 2 to 256 GFLOP/sec.

세로 Y축은 2에서 256 GFLOP/sec까지 달성할 수 있는 부동 소수점 성능입니다.

The horizontal X-axis is arithmetic intensity, varying from 1/8th FLOP/DRAM byte accessed to 16 FLOP/ DRAM byte accessed in both graphs.

수평 X 축은 산술의 강도로 두 그래프 모두 1/8째 FLOP/DRAM 바이트 접근과 16 FLOP/DRAM 바이트 접근처럼 다양하다.

Note that the graph is a log-log scale, and that Rooflines are done just once for a computer.

참고로 그래프는 log-log 크기 이며 그리고 Roofline은 컴퓨터에서 한번만 실행하고 있다.

For a given kernel, we can find a point on the X-axis based on its arithmetic intensity.

주어진 커널 위해, 우리는 산술 강도에 따라 X축 지점을 찾을 수 있습니다.

If we drew a vertical line through that point, the performance of the kernel on that computer must lie somewhere along that line.

우리가 그 지점을 통해 수직으로 선을 경우 해당 컴퓨터에서 커널의 성능은 그 라인을 따라서 어딘가 보여질것이다.

We can plot a horizontal line showing peak floating-point performance of the computer.

우리는 컴퓨터의 최대 부동 소수점 성능을 보여주는 수평 선으로 구간을 설정할 수 있다.

Obviously, the actual floating-point performance can be no higher than the horizontal line, since that is a hardware limit.

물론 실제 부동 소수점 성능은 그 하드웨어 제한 때문에 수평선보다 더 높을 수 없습니다.

How could we plot the peak memory performance?

우리가 어떻게 최고의 메모리 성능을 구분할 수 있을까?

Since the X-axis is FLOP/byte and the Y-axis is FLOP/sec, bytes/sec is just a diagonal line at a 45-degree angle in this figure.

X-축은 FLOP/Byte 이며 Y축은 FLOP/Sec, bytes/sec 로 이 그림에서 45도 각도로 대각선이다.

Hence, we can plot a third line that gives the maximum floating-point performance that the memory system of that computer can support for a given arithmetic intensity.

이런 까닭에 우리는 산술 강도를 위해 컴퓨터가 지원할 수 있는 메모리 시스템의 최고 부동 소수점 성능을 3번째 라인으로 구분할 수 있다.

We can express the limits as a formula to plot these lines in the graphs in Figure 4.11:

우리는 그림 4.11에서 그래프의 선들을 긋는 공식을 제한 할 수 있다.

Attainable GFLOPs/sec = Min(Peak Memory BW x Arithmetic Intensity, Peak Floating-Point Perf.)

달성할 GFLOPs/sec = Min( Peak Memory BW x Arithmetic Intensity, Peak Floating-Point Perf. )

The horizontal and diagonal lines give this simple model its name and indicate its value.

수평 및 대각선 라인이 간단한 모델에게 이름을 주고 그 값를 나타냅니다.

The “Roofline” sets an upper bound on performance of a kernel depending on its arithmetic intensity.

“Roofline는” 산술 강도에 따라 커널에 의존하는 성능의 상단을 설정합니다.

If we think of arithmetic intensity as a pole that hits the roof, either it hits the flat part of the roof, which means performance is computationally limited, or it hits the slanted part of the roof, which means performance is ultimately limited by memory bandwidth.

만약 roof의 맟닿은 점을 산술 강도라 생각하면 맟닿은 점은 root의 평평한 부분이다. 어떤 성능이 계산에 제한적이다는 것을 의미하거나 roof의 한쪽으로 치우쳤을 때 성능이 메모리 대역폭에 의해 궁극적으로 제한되는 것을 의미 한다.

In Figure 4.11, the vertical dashed line on the right (arithmetic intensity of 4) is an example of the former and the vertical dashed line on the left(arithmetic intensity of 1/4) is an example of the latter.

그림 4.11에서 오른쪽의 세로 점선(4의 산술 강도)은 이전의 예이며 왼쪽의 수직 점선(4/1의 산술 강도)은 후자의 예이다.

Given a Roofline model of a computer, you can apply it repeatedly, since it doesn't vary by kernel.

주어진 컴퓨터의 Roofline은 커널에 따라 다르지 않기 때문에 당신은 반복적으로 적용할 수 있다.

Note that the “ridge point,” where the diagonal and horizontal roofs meet, offers an interesting insight into the computer.

참고로 대각선과 수평 roofs가 만나는 능선 지점은 컴퓨터 내부의 흥미로운 점을 제공합니다.

If it is far to the right, then only kernels with very high arithmetic intensity can achieve the maximum performance of that computer.

만약 훨씬 오른쪽에 있다면 커널은 매우 높은 산술 강도에서만 컴퓨터의 최대 성능을 달성할 수 있습니다.

If it is far to the left, then almost any kernel can potentially hit the maximum performance.

그것이 멀리 왼쪽에 있다면, 거의 모든 커널은 잠재적으로 최대 성능을 기록할 수 있습니다.

As we shall see, this vector processor has both much higher memory bandwidth and a ridge point far to the left when compared to other SIMD processors.

우리는 알 수 있습니다. 이 벡터 프로세서는 훨씬 더 높은 메모리 대역폭 및 기타 SIMD 프로세서에 비해 훨씬 왼쪽으로 능선 지점을 모두 가지고 있습니다.

Figure 4.11 shows that the peak computational performance of the SX-9 is 2.4x faster than Core i7, but the memory performance is 10x faster.

그림 4.11은 SX-9의 계산에 관계된 최대 성능으로 Core i7보다 2.4x 빠릅니다. 그러나 메모리 성능은 10x 빠른 것을 보여줍니다.

For programs with an arithmetic intensity of 0.25 the SX-9 is 10x faster (40.5 versus 4.1 GFLOP/sec).

프로그램의 산술 강도가 0.25이 경우 SX-9이 10x 빠릅니다.( 40.5 대 4.1 GFLOP/sec).

The higher memory bandwidth moves the ridge point from 2.6 in the Core i7 to 0.6 on the SX-9, which means many more programs can reach peak computational performance on the vector processor.

높은 메모리 대역폭은 Core i7이 2.6 에서 SX-9이 0.6으로 능선 지점이 이동하고 벡터 프로세서에서 매우 더 많은 프로그램들이 계산에 관련된 성능의 최고점에 도달 할 수 있는 것을 의미한다.

컴퓨터_구조.txt · 마지막으로 수정됨: 2013/12/11 00:46 저자 127.0.0.1