0

私のアルゴリズムは、UセグメントとVセグメントを反復処理する2次元ループを使用して、3次元空間の形状の頂点を計算します。

for (LONG i=0; i < info.useg + 1; i++) {
    // Calculate the u-parameter.
    u = info.umin + i * info.udelta;
    for (LONG j=0; j < info.vseg + 1; j++) {
        // Calculate the v-parameter.
        v = info.vmin + j * info.vdelta;

        // Compute the point's position.
        point = calc_point(op, &info, u, v);

        // Set the point to the object and increase the point-index.
        points[point_i] = point;
        point_i++;
    }
}

ただし、ポイントの配列は1次元配列であるため、point_iループごとに増分されます。を介してインデックスを計算できることを知っていますpoint_i = i * info.vseg + j

このループをマルチスレッド化する必要があります。私の目的は、すべてが特定の範囲のポイントを処理する多数のスレッドを作成することでした。スレッドでは、次のようにします。

for (LONG x=start; x <= end; x++) {
    LONG i = // ...
    LONG j = // ...

    Real u = info.umin + i * info.udelta;
    Real v = info.vmin + j * info.vdelta;

    points[i] = calc_point(op, &info, u, v);
}

問題は、線形ポイントインデックスからijインデシを計算することです。どうすればいつ計算できますかijよく思います):

point_i = i * vsegments + j

ここで数学を解くことができません。

4

1 に答える 1

1

point_i = i * vsegments + jあなたにあげる:

i = point_i / vsegments
j = point_i % vsegments

もちろん、ループは実際にはsegments + 1それぞれ反復0を実行するため(を示す)、代わりにsegmentsを使用する必要があります。vsegments + 1vsegments

補足として:マルチスレッド化のために、実際にループを1つにマージする必要がありますか?とにかく、外側のループには、通常、使用可能なコアを飽和させるのに十分な反復があると思います。

于 2013-02-20T08:02:12.977 に答える