정적, 동적 및 단일 동적 연결이란 무엇입니까?


9

BLAS에 Intel MKL을 사용 하고 명령 행 옵션에 대한 도움말을 위해 Intel MKL 링크 라인 관리자 를 사용합니다.

권고자는 정적, 동적 및 단일 동적 라이브러리에 대한 옵션을 제공합니다. 이 용어는 무엇을 의미합니까?

SO에 관한 수많은 게시물이 있지만 과학적 / 수학적 코드보다는 소프트웨어 개발에 중점을 두었습니다. ( 이것은 특히 유용했습니다)

  • 이 용어는 병렬 컴퓨팅과 어떤 관련이 있습니까?
  • 하나는 다른 것보다 "더 나은"가요? (나는 더 정확하게 정의해야 할 것이 더 낫다는 것을 알고 있지만 지금은 방법을 모른다.)
  • 더 일반적으로 사용되는 이유는 무엇입니까?
  • 연결할 때 프로그래머가 고려해야 할 사항은 무엇입니까?

참고로, 최신 인텔 컴파일러 (버전 11 이상)는 -mkl대부분의 경우 링크 라인 관리자를 사용할 필요가없는 플래그를 제공합니다 .
Aesin

@ 애신, 궁금했다. 가장 최적의 연결 방법입니까?
Inquest

유감스럽게도 모르겠습니다. 실제로 테스트를 한 적이 없으며 매뉴얼은 수행중인 작업이나 다른 옵션과의 결합 방법에 대해 자세히 설명하지 않습니다. 지정하면 MKL을 정적 -static으로 연결하고 지정 하지 않으면 MKL을 동적으로 연결합니다. 어쨌든 사용하기 쉬운 관점에서 보면 훨씬 좋습니다.
Aesin

답변:


14

정적 링크동적 링크 라는 용어 는 병렬 컴퓨팅과 직접 관련이 없지만, 정적 컴파일 된 실행 파일을로드하는 것과는 달리 동적로드가 네트워크 파일 시스템에서 크기가 크지 않기 때문에 꽤 오랫동안 알려져 있습니다. 동적 라이브러리가 대상 라이브러리의로드 경로를 검색하여 발생하는 메타 데이터로드

정적 또는 동적 라이브러리가 고성능 컴퓨팅에서 더 나은지에 대한 일반적인 설명을하기는 어렵습니다. 확실히 대부분의 슈퍼 컴퓨팅 애플리케이션에서는 정적으로 링크하는 것이 더 간단하고 선호됩니다. 왜 이런거야? 현재 세대의 슈퍼 컴퓨터에는 일반적으로 노드 당 하나의 작업 만 실행되므로 공유 라이브러리로 인한 메모리 소비 감소의 이점이 크게 줄어 듭니다. 또한 과학적 컴퓨팅 코드는 언어 기능이나 프로그램 설계 측면에서 그리 정교하지 않은 경향이 있으며 동적로드 (예 : 플러그인 모듈)가 필요한 언어 기능을 거의 사용하지 않습니다. 동적 라이브러리는 정적 라이브러리보다 운영 체제 전체에서 이식성이 훨씬 떨어집니다.

이 모든 결과로 인해 대부분의 HPC 시스템은 사용 가능한 경우 정적 컴파일을 사용합니다. 정적 라이브러리는 더 빠르고 설치 및 유지 관리가 쉽고 일반적으로 더 견고합니다. Python 기반 HPC 코드는 이에 대한 예외 중 하나이지만 여전히 동적 로딩과 관련된 성능 문제가 있습니다 (scicomp의 여러 사용자가 실제로이 문제를 해결하고 있습니다).

정적 링크와 동적 링크를 선택할 때는 코드가 배포되는 방법과 위치, 기본 라이브러리의 변경 또는 이동 가능성, 네트워크 파일 시스템의 성능 특성을 고려해야합니다. 또한 라이브러리 종속성을 통해 또는 Python과 같은 동적 스크립팅 언어와 상호 작용하기 위해 동적 연결 이 필요한지 평가해야합니다 .

단일 동적 라이브러리는 인텔 고유의 용어입니다. 연결 프로세스를 단순화하기 위해 동적 라이브러리를 단일 메타 라이브러리로 패키징하는 것을 말합니다. 인텔 라이브러리와의 동적 연결을 사용하는 경우 복잡한 작업을 수행하지 않는 한이 형식이 바람직합니다.


훌륭한 답변! 한 가지 더 : 동적 연결이 불필요하고 정적 및 단일 동적 중 하나를 선택할 수 있다는 것을 알고 있습니다. 복잡한 일을하지 않는 한 후자를 선택해야한다고 말합니다. 그렇다면 Single Dynamic을 사용하여 연결해야합니까? [FWiW, 저는 Krylov Subspace Methods 작업 중입니다]
Inquest

죄송합니다! 기본적으로 정적을 사용해야하지만 동적보다 단일 동적을 선호합니다.
Aron Ahmadia

나는 벤치마킹을하고 Dynamic : 0:42.92 Static : 0:42.93 Single Dynamic : 0:42.97평균 1000 개 이상의 값을 찾았습니다 .
Inquest

1
일부 HPC 시스템에서는 정적으로 링크 해야 합니다. BlueGene / L 시스템에서는 컴퓨팅 노드의 OS 감소가 동적 링크를 지원하지 않기 때문에 이러한 경우에 해당합니다.
Aesin

1
"현재 세대의 수퍼 컴퓨터에는 일반적으로 노드 당 하나의 작업 만 실행되므로 공유 라이브러리로 인한 메모리 소비 감소의 이점을 크게 줄입니다." 노드 당 하나의 프로세스 만 있다고 말했습니까? 노드 당 하나의 작업이 상황에 어떤 영향을 미치는지 잘 모르겠습니다. 정적으로 링크 할 때 각 프로세스는 실행 파일의 전체 사본을 저장하며 이는 프로세서 당 코어가 커짐에 따라 중요 할 수 있습니다. 동적 링크는 공유 메모리 공간 당 하나의 동적 라이브러리 사본 만 필요합니다.
andybauer
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.