공유 메모리의 GPU에서 작은 비대칭 행렬의 고유 쌍을 찾는 가장 빠른 방법


9

작은 (일반적으로 60x60보다 작은) 비대칭 행렬의 모든 양의 (고유 값이 양수) 양의 고유 쌍을 찾아야하는 문제가 있습니다. 고유 값이 특정 임계 값보다 작은 경우 계산을 중지 할 수 있습니다. 고유 값이 실제라는 것을 알고 있습니다. 최고의 성능을 짜기 위해 사용할 수있는 알고리즘에 대한 제안이 있으십니까? 이러한 분해를 수천 번해야하므로 속도가 중요합니다.

미리 감사드립니다.

편집 : 공유 메모리의 GPU 에서이 작업을 수행해야합니다. 행렬도 반드시 같은 크기 일 필요는 없습니다. 현재이 작업을 수행하는 라이브러리는 없습니다. 문제에 잘 맞는 알고리즘 제안을 부탁드립니다.


1
내가 올바르게 이해하면 공유 메모리에서 수천 개의 작은 행렬을 계산하는 CUDA 커널이 있으며 전역 메모리에 복사하지 않을 것입니다. 답변을하기 전에 명확히해야 할 몇 가지 사항이 있습니다. CUDA에서 공유 메모리 수명은 블록 수명에 바인딩됩니다. 각 매트릭스에 분해 할 스레드 수는 몇 개입니까? 극한의 성능이 정말로 중요합니까? (예상 고유 값 추출 시간이 행렬 생성 시간과 비교되는 방법은 무엇입니까?) 고유 시스템이 실제로 존재한다는 것을 알고있는 논거에 근거하여 고유 시스템에 결함이있을 수 있습니까?
Stefano M

Stefano 님 안녕하세요. 의견을 보내 주셔서 감사합니다. 지금은 분해하려는 행렬의 치수에 가장 가까운 워프 크기의 배수를 갖습니다. 매트릭스 생성 시간은 매우 다양하며, 매트릭스 생성 시간이 더 비싼 경우가 있지만, 매트릭스 생성 시간이 분해보다 짧은 경우가 많습니다. 행렬이 생성되는 방식으로 인해 고유 값이 실제라는 것을 알고 있습니다. 원래 질문에서 벗어나기 때문에 여기에 자세한 내용을 다루지 않겠습니다. 마지막으로, 시스템에 결함이있을 수 있습니다.
간 토쿠

답변:


3

많은 검색을하지 않고 MAGMA 라이브러리 를 보는 것이 좋습니다 . 지속적으로 지원되는 무료 코드. NVIDIA MAGMA를 "고유 값 문제를 해결하는 획기적인 기술"로 인정했습니다 .

CULA 라이브러리 도 있습니다.이 라이브러리는 최근 상용 제품이지만 최근에는 학술 용으로 무료로 제공되고 있습니다 (자세한 내용은 여기 참조 ).


답장을 보내 주셔서 감사합니다 Alexander. 나는 전에 두 라이브러리를 살펴 보았고 내가 아는 한 함수는 호스트에서 호출되며 메모리는 전역 메모리에 있어야합니다. 사용을 정당화하기에는 오버 헤드가 너무 크다고 생각합니다. 이러한 모든 매트릭스는 공유 메모리에서 생성되어 커널에서 사용 된 다음 폐기됩니다. 전역 메모리에 다시 넣지 않고 계속 유지하고 싶습니다. 내가 그들을 밀어 넣었더라도 호스트에서 많은 커널 함수를 호출하는 문제가 여전히 남아 있습니다 (여러 스트림에도 불구하고).
간 토쿠

1
@Kantoku, 예, 그 라이브러리는 더 일반적이며 전체 메모리에 전체 매트릭스를 저장합니다. 매트릭스가 공유 메모리에 있으면 하나의 SM 만 작동 할 수 있습니까? 따라서 EVD의 구현은 매우 간단해야합니다.
Alexander

예, 그렇게 상상할 수 있기 때문에 상황에 적합한 알고리즘을 찾고 있습니다. 나는 대칭이 아닌 evd에 너무 익숙하지 않으므로 제안을 찾고있었습니다.
간 토쿠

@ 관동 (및 알렉산더). 비대칭 EVD는 순차적 인 경우에도 간단하지 않습니다. 여전히 활발한 연구 분야입니다.
잭 폴슨

@JackPoulson 아 네, 맞습니다. 그러나 나는 (알렉산더도 생각합니다) 우리가 크기와 자연을 취할 때 할 수있는 많은 단순화가 있다는 것을 고려할 때 확립 된 알고리즘을 문제에 적용하는 것이 간단하다는 것을 의미했습니다. 매트릭스의 고려. 문제는 어떤 알고리즘입니다.
간 토쿠

2

LAPACK의 함수를 사용하십시오. 자신의 구현에서 함수를 이길 수는 없습니다.


안녕 볼프강 대답에 감사드립니다. 그러나 CUDA를 사용하여 GPU 에서이 작은 행렬 (각 블록이 단일 행렬의 분해를 처리하는 수천 가지)에 대해 구현하려고하며 행렬의 크기가 반드시 동일한 것은 아니므로 구현 공유 메모리를 사용하는 자신이 나의 유일한 선택 인 것 같습니다. 이러한 유형의 행렬에 가장 적합한 알고리즘은 무엇입니까? 추신. 거래 감사합니다. 지난 학기 KAUST에서 강의 한 II 강의입니다. 나는 그들을 즐겼다 :)
간 토쿠

2
@ 관동 당신의 질문에 이러한 세부 사항을 추가해야합니다. 그렇지 않으면 오도됩니다.
Alexander

@Alexander 자세한 내용으로 질문을 업데이트했습니다. 제안 해 주셔서 감사합니다!
간 토쿠

1
@ 관동 : GPU는 제 영역을 약간 뛰어 넘지 만 이미 원하는 것을 수행하는 라이브러리가 있다고 확신합니다 (실제로 다른 답변이 이미 링크되어 있음을 알 수 있습니다). 내 수업이 마음에 들었다 니 다행입니다!
Wolfgang Bangerth
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.