2012-03-04 2 views
0

웹 페이지 요청이있을 때마다 행렬에 벡터를 곱해야합니다. 매트릭스는 약 500x500 크기의 대칭이며 (아마도) 희소합니다. 벡터는 크기가 약 500x100000 인 다른 행렬에서 가져온 열입니다. 이제 내 질문은 매트릭스를 저장하고 효과적인 방법으로 계산을 실행하는 방법입니다. PHP로 계산을하고 mysql 또는 하드 드라이브에 행렬을 저장하고 싶습니다만, 이런 종류의 작업에 더 나은 도구가 있다고 가정합니다.행렬 저장 및 계산 수행

더 자세한 정보가 필요하면 언제든지 문의하십시오.

+0

매트릭스가 얼마나 희박합니까? 이것은 MySQL 스토리지를 평가하는 데 중요합니다. –

+0

항목의 약 11 %가 0이 아닌 값을가집니다. –

답변

0

확인, 그래서 우리는 여기에 실제 코너의 경우를 가지고 :

  • 500x100,000 = 50,000,000 요소를. 데이터 유형에 따라이 은 ca. 색인으로 희소성 및 주소를 무시하면 메모리 내 표현의 50M-400M. 대칭 인 대칭 행렬은이 값을 25-200M로 줄입니다.
  • 0이 아닌 밀도가 11 % 인 것은 에 대한 9 개의 요소의 오버 헤드가 심지어 데이터 유형이 작은 경우에도 설득력이 없음을 의미합니다. 64 비트 데이터 유형에 대한 옵션. 이에서 근무

는 2 계층 솔루션에 강력한 인수를 제공합니다

  • A (공유) "데이터 저장소 서버"
  • 과 ((MySQL은 하나 개 언급 한 옵션 당신에게 인) 어쩌면 PHP) 프론트 엔드.

PHP를 500x500 행렬 곱셈에 사용하면 매우 효율적인 방법이 아닌 것처럼 보입니다. PHP에서 루프 오버 헤드가 매우 높기 때문에 루프 내부에서 약간의 작업 만 수행하면 약간의 공연.

나는 약간 다른 솔루션을 이동하는 것이 좋습니다 : (아마도 C 또는 C#에서) 자신의 백엔드를 쓰기 시작에

  • 수신 대기 (로컬) 소켓에 메모리에 행렬을 읽 명령, 예.
  • 행렬 및 소정의 데이터에 해당 명령을 실행하고 그 결과를

복귀하고 PHP 통해 피드 "곱". 이렇게하면 프론트 엔드를위한 PHP의 단순성과 웹 중심성을 가지면서 핵심 기능을위한 컴파일 된 언어의 처리 속도를 얻을 수 있습니다.

+0

이것은 정확하게 내가 찾던 답변입니다. 나는 옵션 2에 가려고 노력할 것이다. –