나는 1 백만 열 x 100 만 행의 행렬을 가지고 있습니다.gpgpu를 사용하여 많은 수의 벡터 계산을 수행하는 가장 좋은 방법은 무엇입니까?
내 알고리즘으로는 할 필요가 :
Matrix m = Matrix(rows,cols)
for (colB: cols){
vector currColA = m.getcolumn(colA)
for (colB: cols){
vector currColB = m.getcolumn(colB)
result = currColA.dotProduct(colB)
return result;
}}
또는 당신은 또한 말할 수 :
Vectors [] v = Vectors[]
for (i: v.length){
vector v1 = v[i]
for (i: v.length){
vector v2 = v[i]
result = v1.dotProduct(v2)
return result;
}}
내 질문 : 메모리를 할당에 대한 메모리를 초기화 할 수있는 적절한 방법을 무엇 이 문제는
입니다. 전체 행렬에 메모리를 할당하고, 전체 행렬로 초기화해야합니까? 그 다음에 알 고를 실행합니까?
- 또는 벡터 목록에 메모리를 할당하고이 목록을 반복해야합니까?
- 그렇지 않으면 ??
내 관심사는 GPP 로의 전송 시간을 최소화하고 싶습니다. 나는 2 개의 벡터에서 sgemm 연산을 위해 JCublas hello world example을 수정하여 이런 종류의 계산을 시도했지만, 많은 수의 벡터에서 처리 할 때 gpu 가속의 이점을 삭제하는 전송 시간을 갖게되었다.
Thx! 추 신 : 구현은 모든 Java 라이브러리에있을 수 있습니다.
이것이 희박한 매트릭스입니까? 32 비트 정수 또는 부동 소수점 값의 1 백만 x 1 백만 밀집도 행렬에는 4000GB의 메모리가 필요합니다. GPU 메모리에 맞지 않을뿐만 아니라 전용 데이터 센터가 필요없는 호스트 시스템의 메모리에 맞지 않습니다. 어떤 종류의 기계에서이 작업을 할 계획입니까? – talonmies
@talonmies 나는 double 값의 250,000 스파 스 벡터 배열을 사용합니다. 벡터의 길이는 1,100,000입니다. (http://code.google.com/p/matrix-toolkits-java/source/browse/trunk/src/no/uib/cipr/matrix/sparse/SparseVector.java?r=46).벡터는 매우 희소합니다 (평균 10 개의 값이 채워짐). 지금은 랩톱에서 i7-2860, 16Gb로 멀티 스레딩을 실행할 수 있지만 몇 시간이 걸립니다. – seinecle