0

並列化に aparapi を使用し、この Java コードを変換したい:

public static void main(String[] args) {
        float res = 0;
        for (int i = 2; i < 5; i++) {
            for (int j = 3; j < 5; j++) {
                res += i * j;
            }
        }

        System.out.println(res);

    }

aparapi で同等のものに:

Kernel kernel = new Kernel() {
    @Override
    public void run() {
        int i = getGlobalId();
        ...
    }
};
kernel.execute();
kernel.dispose();
4

1 に答える 1

2

ここにはいくつかの問題があります。

まず、コードはデータ並列ではありません。「res」に「競合」状態があるため、このコードは GPU で計算できません。

第二に、実行範囲が小さすぎます。6 つのスレッド (x [2,3,4] * y [3,4]) を実行しようとしています。これでは、GPU から実際に何のメリットも得られません。

上記の 2 次元グリッド上に実装する方法に関する質問に答えるには。

Range range = Range.create2D(3, 2) ; // A two dimension grid 3x2
Kernel kernel = new Kernel() {
    @Override
    public void run() {
        int x = getGlobalId(0)+2; // x starts at 2 
        int y = getGlobalId(1)+3; // y starts at 3
        ...
    }
};
kernel.execute(range);
kernel.dispose();
于 2013-03-20T18:26:25.187 に答える