2013-07-24 5 views
3

일반적으로 어셈블리 코드를 통한 성능 향상에 대한 질문에 대한 답변은 "컴파일 작업이 귀찮은 작업이 아닙니다." 그리고 나는 그것을 얻는다.최적화 된 어셈블리 코드 (BLAS)

그러나 최적화 된 선형 대수 라이브러리 (예 : ACML)가 표준 컴파일 된 라이브러리보다 2 배에서 5 배까지 성능이 향상 될 수 있음을 알았습니다. 예를 들어, 제 8 코어 머신에서, 최적화 된 매트릭스 곱셈을 30 배 이상 빠르게 실행하는 대신 스톡 싱글 스레드 BLAS 구현을 실행했습니다. 즉, 모든 코어를 사용하기 때문에 8 배 향상을 고려한 후에도 여전히 4 배가됩니다 최적화로부터의 개선.

그래서 나에게 최적화 된 어셈블리 코드가 정말 큰 차이를 만들 수 있다고 생각합니다. 내가 놓친 게 있니?

내가보기에 너무 어렵지 않다면이 코드를 다른 코드 세그먼트에서 사용해 볼 수도 있습니다. 복잡하지는 않지만 조립품으로 작성한 작은 내부 루프에서 2 배의 향상을 얻을 수 있다면 가치가있을 것입니다.

+0

무엇이 질문입니까?확실히 특정 문제에 대해서는 해당 수준에서 코드를 직접 조정하면 실질적인 이득을 얻을 수 있습니다. –

+0

@Carl 나는 이러한 BLAS 구현이 성능 향상을 위해 무엇을하는지, 그리고 그러한 기술이 얼마나 널리 적용되는지에 대한 질문을 던집니다. – mrip

+0

이전 경험에 따르면, 코드의 10 %가 런타임의 90 %를 차지하므로, 프로파일 러를 사용하여 코드의 10 %를 매우 자세히 관찰하고 컴파일러가 생성 한 어셈블리 코드를 분석하면 거의 확실하게 찾을 수 있습니다 어셈블러에서 수동으로 다시 작성하여 많은 작업을 수행 할 수있는 부분 그러나이 기술을 코드 유지 관리에 심각한 영향을 줄 수 있으므로 속도 향상이 충분히 높은 경우에만이 기술을 조금씩 (처음에는 가장 유망한 후보로, 새로운 벤치마킹에 이어) 사용하십시오. – fvu

답변

2

최적화 된 어셈블리 코드를 사용하면 속도를 크게 높일 수 있습니다.

내 연구에 따르면 "컴파일러가 더 좋음"에 대한 주장은 편향되어 있으며 실제 생활과 관련이 없음을 보여줍니다. 그것은 신화입니다.

컴파일러는 잘못 작성된 어셈블리 프로그램을 사용하여 잘 작성된 컴파일러로 컴파일 된 잘 작성된 HLL 프로그램을 비교할 때만 좋습니다.

너무 많은 좋은 또는 괜찮은 어셈블리 프로그래머가 없다는 또 다른 이야기입니다. :)

3

매트릭스 매트릭스 제품의 속도 향상은 부분적으로 어셈블리 코드 사용으로 인한 것입니다. 순진한 구현에서 주요 병목은 메모리 액세스입니다. 대부분의 경우 CPU는 실제 계산을 기다립니다.

먼저 L2 및 L1 캐시의 데이터를 가능한 한 자주 재사용 할 수 있도록 행렬 행렬 곱셈 알고리즘을 수정해야합니다. 이것은 C (또는 C++ 또는 Fortran 또는 ...)에서 수행 할 수 있습니다. 이것은 행렬 크기가 캐시보다 커지면 분해되지 않는 구현으로 이어질 것입니다. 또한 구현은 항상 계산을 수행 할 수 있음을 의미합니다 (CPU 레지스터에 필요한 데이터는 거의 항상 L1 캐시에 저장되며 L1 캐시에 필요한 데이터는 거의 항상 L2 캐시에 저장됩니다).

다음 단계는 모든 계산이 수행되는 핫 스폿을 최적화하는 것입니다. 여기에는 C 코드의 몇 줄만이 포함됩니다 (내 GEMM Tutorial에 10 줄만 있음). 어셈블리 코드는 명령어 파이프 라이닝, 루프 언 롤링 (분기 예측 향상), 프리 페칭 (캐시 미스 감소), SSE (또는 AVX)를 사용하여 최적화합니다.

비슷한 기술을 다른 BLAS 레벨 3 기능에 사용할 수 있습니다. 사실 그들 대부분은 GEMM 함수의 내부 자료 (소위 마이크로 커널)를 사용합니다.

ulmBLAS benchmarks에서 모든 BLAS 레벨 3 기능이 거의 동일한 성능을 달성 할 수 있습니다.

자세한 내용은 Robert A. van de Geijn과 Enrique S. Quintana-Ortí의 멋진 서면 용지 The Science of Programming Matrix Computations을 제안하십시오. 그리고 BLIS을보고 싶을 수도 있습니다. 대부분의 아이디어는 ulmBLAS의 경우 어디서 찍고 단순하게 했습니까?

+1

좋은 물건. 링크 및 메모 주셔서 감사합니다. – mrip