1

免責事項: この投稿の著者は、C++ と Python についての知識は限られていますが、Java と Ruby については十分な知識を持っています。

「OpenCL プログラミング ガイド」ブックの例では、ダイクストラのアルゴリズムを OpenCL デバイスで実行するために、次の OpenCL でカスタマイズされたグラフ データ構造を使用しています。

void generateRandomGraph(GraphData *graph, int numVertices, int neighborsPerVertex)
{
    graph->vertexCount = numVertices;
    graph->vertexArray = (int*) malloc(graph->vertexCount * sizeof(int));
    graph->edgeCount = numVertices * neighborsPerVertex;
    graph->edgeArray = (int*)malloc(graph->edgeCount * sizeof(int));
    graph->weightArray = (float*)malloc(graph->edgeCount * sizeof(float));

    for(int i = 0; i < graph->vertexCount; i++)
    {
        graph->vertexArray[i] = i * neighborsPerVertex;
    }

    for(int i = 0; i < graph->edgeCount; i++)
    {
        graph->edgeArray[i] = (rand() % graph->vertexCount);
        graph->weightArray[i] = (float)(rand() % 1000) / 1000.0f;
    }
}

このデータ構造は、Pawan Harish と PJ Narayanan による論文「CUDA を使用した GPU での大規模なグラフ アルゴリズムの高速化」の例に基づいています。

基本的に、これには 3 つの配列があります。V各頂点がエッジ配列内の隣接頂点を指す頂点配列E(頂点の隣接は、配列内の頂点の隣接の直後にi+1続きます)。3 番目の配列はエッジ ウェイト用です (さらに 2 つの特定の OpenCL 関連の配列があります)。iE

このデータ構造を Python/Numpy で表現するにはどうすればよいですか? PyOpenCL で使用したいと思います。

4

2 に答える 2

1
于 2011-10-17T11:56:18.657 に答える
-1

このトピックの専門家はいませんが、これはある種の隣接行列です (http://en.wikipedia.org/wiki/Adjacency_matrix)。Numpy コア データ型は n 次元配列であるため、これは非常に簡単です。

于 2011-10-17T11:30:44.393 に答える