병렬 프로 그래 밍 에서 데 이 터 를 분해 하 는 데이터 구조 및 수 동 할당 작업 방법
struct {
int start;
int end;
}value[] = {
{0 , NUMBER >> 1},
{NUMBER >> 1, NUMBER}
};
이상 코드 는 데이터 분해 귀 약 을 실현 하 는 데이터 구조 입 니 다.예제 에서 이 구 조 는 데 이 터 를 두 단락 으로 나 누 어 각각 첫 번 째 꼬리 를 얻 고 함수 호출 에 편리 하 다.
/* 자신의 수 동 할당 작업 (구분 및 스케줄 링 정책 과 유사 한 static, 순환 할당)
* 첫 번 째 는 모든 스 레 드 에서 분 배 된 블록 안의 임 무 는 연속 적 인 것 이다. id*(N/Nthrds)-->(id+1) * (N / Nthrds);
* 두 번 째 스 레 드 마다 분 배 된 블록 에 있 는 작업 은 분 산 된 것 입 니 다. 두 번 째 id 개, 두 번 째 id + Nthrds 개, 두 번 째 id + 2 * Nthrds...... 에 이르다
id+m*Nthrds>=N,。
* 이 두 가지 사상의 차 이 는 참고 할 만하 다.
*/
// 방법 1
printf("/n------------------------ 수 동 할당 작업 방법 1 ------------------
--------/n");
#pragma omp parallel
{
int i, istart, iend;
int Nthrds = omp_get_num_threads(), id = omp_get_thread_num();
if (N/Nthrds == 0)
{
istart = id * (N / Nthrds);
// 모든 스 레 드 는 N / nthrds 의 임 무 를 완성 합 니 다. N 개의 임 무 를 Nthrds 의 스 레 드 에 평균 적 으로 나 누 어 주 는 것 입 니 다. 마지막 스 레 드 가 부족 할 수 있 습 니 다.
N / nthrds 개 미 션
iend = (id+1) * (N / Nthrds);
}
else{
istart = id * (N/Nthrds + 1);
// 모든 스 레 드 가 N / nthrds 를 완성 합 니 다. + 1 개의 퀘 스 트, 마지막 스 레 드 가 N / nthrds 가 부족 할 수 있 습 니 다. + 한 가지 미 션.
N / nthrds 개 를 완성 하고 마지막 스 레 드 는 남 은 것 을 완성 합 니 다.
iend = (id+1) * (N/Nthrds + 1);
}
for(i=istart; i
{
c[i] = a[i] + b[i];
printf("threadnum=%d, c[%d]=%d/n", id, i, c[i]);
}
}
for (int i=0;i
{
printf("c[%d]=%d/t", i, c[i]);
c[i] = 0;
}
printf("/n------------------------ 수 동 할당 퀘 스 트, 방법 2 -------------------------
/n");
// 방법 2
#pragma omp parallel
{
int i, istart, iend;
int Nthrds = omp_get_num_threads(), id = omp_get_thread_num();
iend = N;
for(i=id; i
// 각 스 레 드 마다 id 개 퀘 스 트 를 한 번 에 완성 합 니 다. id + Nthrds 개, id + 2 * Nthrds... id + m * Nthrds > = N 까지 만 가능 합 니 다.
{
c[i] = a[i] + b[i];
printf("threadnum=%d, c[%d]=%d/n", id, i, c[i]);
}
}
for (int i=0;i
{
printf("c[%d]=%d/t", i, c[i]);
c[i] = 0;
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.