2012-03-28 2 views
2

WB의 여러 시트가 병렬로 계산되도록 Excel 계산을 제어 할 수있는 방법이 있는지 궁금한 점이 있습니다. 내 문제는 현재 설정에서 순차적 계산 프로세스가 너무 오래 걸린다는 것입니다. 이 시퀀스는 VBA에서 구동되며 다음과 같이 바뀝니다. 1) vba가 addin (데이터 아더와 연결된 데이터베이스를 제어하는 ​​excel-dna vb.net addin)을 호출합니다. 2) addin이 시트 1에 데이터를 반환합니다. 시트 2-3 (시트 2, 3) 3) 시트 4 ~ 10은 순서대로 다시 계산되지만 각 시트는 시트 2에만 연결되기 때문에 이론상 병렬로 재 계산할 수 있습니다. 그러나 이것을하는 방법? 4) 1)에서 설명한 vba addin을 통해 새로운 데이터를 호출하여 프로세스를 다시 시작하십시오.Excel에서 다중 스레드 계산이 느림

내 랩톱 (64 비트 32 비트 Excel, Intel i7)에서 데이터의 하위 집합을 실행하는 데 소요되는 시간은 54.6 초입니다. 흥미롭게도 멀티 스레딩을 끄면 25.8 초가 걸립니다! 더 나아가서는 슈퍼 컴퓨터 (2 x Intel Xeon X5570, 쿼드 코어 "Nehalem"아키텍처, 64 비트 64 비트 Excel)에서 실행하면 내 노트북보다 속도가 느려지고 멀티 스레딩으로 230 초가 걸리거나 26 초가 걸리지 않습니다.

여러 코어 및 멀티 스레딩을 사용할 수있는 더 좋은 방법이 있는지 궁금합니다. 느린 비트는 추가 속도보다는 재 계산보다 우수합니다. 어떤 제안도 감사합니다.

편집 : 위의 설명은 약간의 단순화입니다 - 사실 저는 4-10 개의 시트 각각에서 실행되는 반복적 인 'calc/paste-vales/recalc'프로세스가 있습니다 (반복은 일부 필요한 감도에 도달하면 전체 시트가 계산됩니다). 나는 이것이 현재의 디자인 하에서 계산할 수없는 계산을하는 것을 불가능하게 만든다고 믿는다.

시트 4-10은 하드 코딩 된 입력 매개 변수를 제외하고는 동일하며 서로간에 계산 종속성이 없습니다. 각각의 계산 과정 (반복 과정 및 시트 계산법)이 순차적으로 수행되는 대신 병렬로 수행 될 수 있다면 전체 프로세스가 훨씬 빨라질 것이라고 생각합니다.

참고로, 저는 이미 더 명확한 합리화 및 테스트 (수식 분리, 휘발성 함수 분리 등)를 이미 수행했습니다.

프로세스를 통해 전체 데이터 세트를 실행하는 데 약 16 시간이 걸리므로이 문제를 개선하기위한 몇 가지 방법을 모색하고 있습니다.

감사합니다.

답변

2
  • Excel 계산 성능에 대한 유용한 정보는 http://www.decisionmodels.com/calcsecretsc.htm입니다. [ExcelFunction (IsThreadSafe = true)]과 같은 속성을 사용하여 Excel-DNA 함수를 스레드로부터 안전하다고 표시 할 수 있지만 여기서는 병목 현상이 들리지 않습니다. 그러면 이러한 기능을 동시에 평가할 수 있습니다.

  • i7 프로세서에 하이퍼 스레딩 (실제로 4 개의 코어를보고하지만 실제로는 2 개의 실제 코어 만 있음) 인 경우 Excel의 스레드 수를 코어 수 (예 : 2)로 설정하는 것이 더 빠릅니다) 대신 프로세서가 실행할 수있는 스레드 수 (Excel 기본값 - 어쩌면 4)가됩니다.

+0

안녕하세요. 이것의 엑셀 - 데이타 및 데이타 넷 데이타 측면은 매우 효율적으로 보입니다. 어떤 경우에는 당신의 제안에 따라 데이터의 하위 집합에 대해 마이크로 타임 테스트를 수행했습니다. 멀티 스레딩 (28.3); On + 1 실 (30.3); 온 +2 스레드 (70.8); 사용 가능한 모든 프로세서 (65.1). IsExceptionSafe = True와 IsThreadSafe = True를 전환하면 눈에 띄는 차이가 발생하지 않습니다 (false 및 both true 모두 28.3sec로 시간 측정 됨). 나는 그것이 어떻게 든 더 빨리 될 수 있다면 각 시트에 대한 recalc 명령이 excel-dna addin에서 전송되었는지 여부, 궁금해? 예를 들어 vba는 excel-dna addin을 실행 한 다음 시트 재조정 명령을 보냅니다. – Yugmorf

+0

Excel-DNA 관련 실적 토론 및 결과는 http://groups.google.com/group/exceldna/browse_frm/thread/e331337fcdc22a17입니다. 이것은 COM을 통해 시트 계산을 호출하고 C API를 통해 차이가 나지 않음을 나타냅니다. 덕분에 – Govert

+0

. 이전 토론을 다시하십시오. 결과가 Threadsafe로 생성된다는 사실 만 알게되었습니다 : = True 및 다중 스레드 계산은 가짜 결과를 낳았습니다. 내 응용 프로그램은 스레드 안전 afterall되지 않습니다 같아요 ... – Yugmorf

1

매우 많은 경우 멀티 스레드 계산이 단일 스레드 계산보다 느립니다.

아마도 계산식을 수동으로 전환했습니다.

각 시트에서 Sheet.Calculate를 사용하여 "순서대로 워크 시트를 계산 하시겠습니까?" 그렇다면 Application.Calculate를 사용하고 Excel이 자동으로 모든 시트를 다시 계산하는 가장 빠른 방법을 찾도록하는 것이 더 빠를 것입니다.

+1

안녕하세요 찰스, 나는 계산 속도에 대한 귀하의 블로그를 읽고 과거에 당신의 작품의 일부를 사용했습니다. 고맙습니다. 맞습니다 - 계산을 수동으로 설정하고 VBA에서 계산 순서를 제어합니다. excel-dna addin을 호출하여 첫 ​​번째 시트에 데이터를로드 한 다음 순차적으로 후속 시트를 계산합니다. 시트 ("Sheet2"). 계산, 시트 ("Sheet3"). 계산 등 좀 더 자세하게 위의 편집을 참조하십시오. – Yugmorf

+0

동시에 모든 시트 4-10을 반복하지 않는 이유는 무엇입니까? –

+0

예 시트 4-10을 동시에 반복 (= 병렬로) 반복/계산하고 싶습니다. 하지만 Excel의 인스턴스를 별도로 실행하지 않으면 이것이 가능하다는 것을 알지 못합니다. 당신이 하나를 알고 있다면 다른 방법을 듣고 싶습니다. 이것은 제 질문의 본질에 실제로 도달하게 될 것입니다. – Yugmorf