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 시간이 걸리므로이 문제를 개선하기위한 몇 가지 방법을 모색하고 있습니다.
감사합니다.
안녕하세요. 이것의 엑셀 - 데이타 및 데이타 넷 데이타 측면은 매우 효율적으로 보입니다. 어떤 경우에는 당신의 제안에 따라 데이터의 하위 집합에 대해 마이크로 타임 테스트를 수행했습니다. 멀티 스레딩 (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
Excel-DNA 관련 실적 토론 및 결과는 http://groups.google.com/group/exceldna/browse_frm/thread/e331337fcdc22a17입니다. 이것은 COM을 통해 시트 계산을 호출하고 C API를 통해 차이가 나지 않음을 나타냅니다. 덕분에 – Govert
. 이전 토론을 다시하십시오. 결과가 Threadsafe로 생성된다는 사실 만 알게되었습니다 : = True 및 다중 스레드 계산은 가짜 결과를 낳았습니다. 내 응용 프로그램은 스레드 안전 afterall되지 않습니다 같아요 ... – Yugmorf