C#에서 유한 요소 분석 라이브러리를 구축 중입니다. 분석 할 각 구조에서 요소 수준에 대해 여러 가지 계산을 수행하고 결과를 구조 수준에서 함께 가져와야합니다. 이러한 모든 계산은 많은 요소가있을 때 꽤 많이 일어납니다.가능하면이 코드에서 멀티 스레딩을 구현하는 방법은 무엇입니까?
예를 들어, 요소 강성 행렬 및 전역 강성 행렬에 대한 요소 강성 행렬의 계산이 있습니다.
프로세스가 스레딩을 활용할 수있는 방법이 있습니까?
는public class FEStructure
{
public List<Element> elements = new List<Element>;
public Matrix K;
Struct()
{
// Do some stuff not relevant here
}
public void CalcK()
{
// Create a Global stiffness matrix (n x n)
K = new DenseMatrix(SizeK());
// Process all elements - can it be threaded?
foreach (Element e in elements)
{
// Get the element stiffness matrix and assemble it into K
Matrix Ke = e.CalcKe();
Assemble(Ke);
}
}
public void Assemble(Matrix Ke)
{
// Assembles Ke into K using the element topology
// and lot of fields and methods left out. Code
// operates on K using syntax similar to:
K[i, j] = Ke[k, l];
}
}
편집 : e.CalcKe()
통해 소자 매트릭스
계산은 계산 독립적이며 임의의 순서로 수행 될 수있다.
'요소 e'를 개별적으로 계산할 수 있습니까? 아니면 순서대로 계산해야합니까? 서로 관련이 없으며 일종의 진보적 인 상태에 의존하지 않으면'Parallel.ForEach'로 도망 갈 수 있습니다. –
'e.CalcKe();'가 그렇게 오래 걸리나요? – corn3lius
@AdamHouldsworth, 특정 계산 순서가 필요하지 않습니다. – sehlstrom