サーチ…


前書き

いくつかのマルチスレッドアルゴリズムの例。

構文

  • ループの前にパラレルであるとは、ループの各反復が互いに独立しており、並列に実行できることを意味します。
  • スポーンは、新しいスレッドの作成を示すことです。
  • syncは、作成されたすべてのスレッドを同期させることです。
  • 配列/行列は、例では1〜nのインデックスが付けられています。

正方行列乗算マルチスレッド

multiply-square-matrix-parallel(A, B)
    n = A.lines         
    C = Matrix(n,n) //create a new matrix n*n
    parallel for i = 1 to n
        parallel for j = 1 to n
            C[i][j] = 0
            pour k = 1 to n
                C[i][j] = C[i][j] + A[i][k]*B[k][j]
    return C

乗算行列ベクトルマルチスレッド

matrix-vector(A,x)
    n = A.lines
    y = Vector(n) //create a new vector of length n
    parallel for i = 1 to n
        y[i] = 0
    parallel for i = 1 to n
        for j = 1 to n
            y[i] = y[i] + A[i][j]*x[j]
    return y

マージソートマルチスレッド

AはサブアレイA [p..r]をソートするなど、配列の配列とpqのインデックスです。 Bは並べ替えによって読み込まれるサブ配列です。

p-merge-sort(A、p、r、B、s)の 呼び出しはA [p..r]から要素をソートし、 B [s..s + rp]に入れます。

p-merge-sort(A,p,r,B,s)
    n = r-p+1
    if n==1
        B[s] = A[p]
    else
        T = new Array(n) //create a new array T of size n
        q = floor((p+r)/2))
        q_prime = q-p+1
        spawn p-merge-sort(A,p,q,T,1)
        p-merge-sort(A,q+1,r,T,q_prime+1)
        sync
        p-merge(T,1,q_prime,q_prime+1,n,B,s)

並行してマージを実行する補助関数を次に示します。
p-mergeは、 マージする2つのサブ配列が同じ配列内にありますが、それらが配列内で隣接しているとはみなしません。それで、p1、r1、p2、r2が必要なのです。

p-merge(T,p1,r1,p2,r2,A,p3)
    n1 = r1-p1+1
    n2 = r2-p2+1
    if n1<n2     //check if n1>=n2
        permute p1 and p2
        permute r1 and r2
        permute n1 and n2
    if n1==0     //both empty?
        return
    else 
        q1 = floor((p1+r1)/2)
        q2 = dichotomic-search(T[q1],T,p2,r2)
        q3 = p3 + (q1-p1) + (q2-p2)
        A[q3] = T[q1]
        spawn p-merge(T,p1,q1-1,p2,q2-1,A,p3)
        p-merge(T,q1+1,r1,q2,r2,A,q3+1)
        sync

そしてここに補助機能二分探索法があります。

xは、サブ配列T [p..r]で探すキーです。

dichotomic-search(x,T,p,r)            
    inf = p
    sup = max(p,r+1)
    while inf<sup
        half = floor((inf+sup)/2)
        if x<=T[half]
            sup = half
        else
            inf = half+1
    return sup


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow