2012-06-28 6 views
0

나는 간격이나 도메인의 목록을 가지고 있습니다. 각 구간을 k 부분으로 병렬로 세분하여 새로운 목록 (정렬되지 않음)을 만들고 싶습니다. 그러나 대부분의 하위 구분은 특정 기준을 통과하지 않으며 새 목록에 추가하면 안됩니다.추력 : cilk :: reducer_list_append

cilk :: reducer_list_append와 push_back을 가진리스트를 형성하는 평행 감소의 개념을 확장한다. 이렇게하면 유효한 하위 간격 만 병렬로 수집 할 수 있습니다.

작업을 수행하는 방법은 무엇입니까? 한 가지 방법은 큰 nxk 목록을 형성하고 병렬 필터 및 스트림 압축을 사용하는 것으로 의심됩니다. 그러나 실제로 nxk가 실제로 매우 커질 수 있기 때문에 감소 목록 추가 작업이 필요합니다.

답변

1

본인은이 포럼에 초보이지만 어쩌면 이들 중 일부를 찾을 수 있습니다. 추력에 맞지 않으면 Arrayfire을 볼 수도 있습니다. 꽤 최근에 대해 알게 그것은 문제의 종류에 대한 무료입니다. 만약, 예를 구성하여 gfor 평행 각 간격에 대한 선택 기준을 평가할 수 arrayfire으로 예

. 고려 : 물론

// # of intervals n and # of subintervals k 
const int n = 10, k = 5; 

// this array represets original intervals 
array A = seq(n); // A = 0,1,2,...,n-1 

// for each interval A[i], subI[i] counts # of subintervals  
array subI = zeros(n); 

gfor(array i, n) { // in parallel for all intervals 
    // here evaluate your predicate for interval's subdivision 
    array pred = A(i)*A(i) + 1234; 
    subI(i) = pred % (k + 1); 
} 

//array acc = accum(subI); 
int n_total = sum<float>(subI); // compute the total # of intervals 
// this array keeps intervals after subdivision 
array B = zeros(n_total); 

std::cout << "total # of subintervals: " << n_total << "\n"; 
print(A); 
print(subI); 

gfor(array i, n_total) { 
    // populate the array of new intervals 
B(i) = ... 
} 
print(B); 

, 당신이 하위 구분을 위해 사용하는 기준이다 당신의 간격을 나타내는 방식을 방법 및 에 따라 달라집니다 ..

관련 문제