저는 C#의 초보자이며 오래된 DSP, VB6 코드를 번역하면서이 언어가 제공하는 가능성을 활용하고 싶습니다. 특히 시간이 많이 소요되는 계산을 빠르게 처리하기 위해 병렬 처리를 사용하려고합니다.C# Parallel.For 예기치 않은 결과가 발생했습니다.
다음은 현재 테스트중인 (단순화 된) 코드입니다.
"1 ° 병렬 코드 OK"섹션은 문제없이 작동합니다.
"2 단계 병렬 코드 오류 결과"섹션은 "Sequential code OK"섹션과 동일해야하며 순차 버전보다 훨씬 빠르지 만 예상되는 결과는 반환하지 않습니다.
왜? 내가 어디서 잘못한거야?
double[] Omega = new double[NFreq + 1];
double[,] SinOmT = new double[NFreq + 1, NVAL];
double[,] CosOmT = new double[NFreq + 1, NVAL];
double OmT;
// 1° Parallel code OK:
Parallel.For(0, NFreq + 1, JF =>
{
Omega[JF] = PI2 * Freq[JF]/Fs;
});
// Sequential code OK:
for (int JF = 1; JF <= NFreq; JF++)
{
for (int JD = 0; JD < NVAL; JD++)
{
OmT = Omega[JF] * (double)(JD);
SinOmT[JF, JD] = Math.Sin(OmT);
CosOmT[JF, JD] = Math.Cos(OmT);
}
}
// 2° Parallel code WRONG results:
for (int JF = 1; JF <= NFreq; JF++)
{
Parallel.For(0, NVAL, JD =>
{
OmT = Omega[JF] * (double)(JD);
SinOmT[JF, JD] = Math.Sin(OmT);
CosOmT[JF, JD] = Math.Cos(OmT);
});
}
카오와 관심을 가져 주셔서 감사합니다.
프랑코
테오도 로스 : 매우 효과적입니다. 정말 고마워요. 다음 단계로 넘어갑니다. –