2016-04-23 45 views
-3

C/CUDAで実行されているコードがありますが、なんらかの理由でこのプログラムのコンパイルと実行が中止されているようです。これらのエラーをどのように修正するか、キャストを変更したり、コード全体を何回か校正したりしてみてください。 C言語でのコーディングではそれほど優れていません。このエラーは、オンラインで検索することによって問題が何であるかに非常に特化しているようです。どんな洞察力や助けでも感謝します。私は取得していますオーバーロードされた関数エラーのインスタンスがありません

#include <cstdlib> 
#include <stdio.h> 
#include <limits.h> 

using namespace std; 

const int NUMTHREADS = 1024; 

// Number of vertices in the graph 
#define V 9 

// A utility function to find the vertex with minimum distance value, from 
// the set of vertices not yet included in shortest path tree 
int minDistance(int dist[], bool sptSet[]) { 
// Initialize min value 
int min = INT_MAX, min_index; 

for (int v = 0; v < V; v++) 
if (sptSet[v] == false && dist[v] <= min) 
    min = dist[v], min_index = v; 

return min_index; 
} 

// A utility function to print the constructed distance array 
int printSolution(int dist[], int n) { 
printf("Vertex Distance from Source\n"); 
for (int i = 0; i < V; i++) 
printf("%d \t\t %d\n", i, dist[i]); 
}//end of method 

// Funtion that implements Dijkstra's single source shortest path algorithm 
// for a graph represented using adjacency matrix representation 

__global__ void updateDistance(bool* sptSet[],int* graph[],int* dist[],int u,int V){ 

Int i = threadIdx.x 

if(i<V){ 
if((!sptSet[i] && *graph[u*V+i] && dist[u] != INT_MAX && *dist[u]+graph[u*V+i] < *dist[i])) 
*dist[i] = *dist[u] + *graph[u*V+i]; 
} 
}//end of method 

long* generateAdjMatrix(int count){ 

long* randoMatrix = (long*)malloc(count*count*sizeof(long)); 
int i,j; 

srand(time(NULL)); 

for(i=0;i<count;i++){ 
for(j=0;j<count;j++){ 
if(i != j){ 
Long randomResult = rand()%2; 
randoMatrix[(i*count)+j] = randomResult; 
randoMatrix[(j*count)+i] = randomResult; 
} 
} 
} 
Return randoMatrix; 
}//end of method 

// driver program to test above function 
int main() { 

//gpu 
int *d_dist[V]; 
int *d_graph[V]; 
bool *d_sptSet[V]; 


int src = 0; 
long* matrix; 

int *dist[V];  // The output array. dist[i] will hold the shortest 
        // distance from src to i 

bool* sptSet = (bool)malloc(V*sizeof(bool)); 
int* graph = (int *)malloc(V*sizeof(int)); 
int* dist = (int *)malloc(V*sizeof(int)); 

Matrix = generateAdjMatrix(V); 

// Initialize all distances as INFINITE and stpSet[] as false 
for (int i = 0; i < V; i++) 
    dist[i] = INT_MAX, sptSet[i] = false; 

// Distance of source vertex from itself is always 0 
dist[src] = 0; 


//allocate GPU variables in memory 
cudaMalloc(&d_sptSet,(V*sizeof(bool))); 
cudaMalloc(&d_dist,(V*sizeof(int))); 
cudaMalloc(&d_graph,(V*sizeof(int))); 

// Find shortest path for all vertices 
for (int count = 0; count < V-1; count++) { 
    // Pick the minimum distance vertex from the set of vertices not 
    // yet processed. u is always equal to src in first iteration. 
    int u = minDistance(dist, sptSet); 

    // Mark the picked vertex as processed 
    sptSet[u] = true; 


//after updating distance, copy the updates to GPU 
cudaMemcpy(d_sptSet,sptSet,V*sizeof(bool),cudaMemcpyHostToDevice); 
cudaMemcpy(d_dist,dist,V*sizeof(int),cudaMemcpyHostToDevice); 
cudaMemcpy(d_graph,graph,V*sizeof(int),cudaMemcpyHostToDevice); 

    //call updatedistance 
updateDistance<<<V,NUMTHREADS>>>(d_sptSet,d_graph,d_dist,u,V); 

cudaMemcpy(dist,d_dist,V*sizeof(int),cudaMemcpyDeviceToHost); 
cudaMemcpy(sptSet,d_sptSet,V*sizeof(int),cudaMemcpyDeviceToHost); 
}//end of for 

// print the constructed distance array 
printSolution(dist, V); 


return 0; 
}//end of main 

エラーは以下のとおりです。

はA ")" オーバーロードされた関数の-noインスタンス39

ラインで "cudaMallocは"(引数(ライン119) にマッチし-expectedライン120及び121)

-from線119-121に対して同じことは、 "引数の型は:INT()9、unsigned long型" という

+3

真剣に[SO]は無料の間違い修正サービスではありません。それを一つのように扱ってはいけません。 37行目の 'Int i = threadIdx.x'に2つのエラーを見つけることができない場合は、いくつかの基本的なC++リファレンス資料を修正する必要があります。私はこれを閉じるために投票しました。 – talonmies

+0

合意。これらの基本的な構文エラーを修正して戻ってみてください。 –

答えて

0

はTalonmiesとレジスと同意します。

さらに、このタイプミスを超えると、他のタイプのエラー行40があり、同じデータですべてのブロックを処理しているため、複数のブロックを持つupdateDistanceの作業分布が必ずしもうまく機能するとは限りません。

最後に、バッファに十分なメモリを割り当てないでください(Vエントリ、つまり合併された場所にあるすべての1024スレッドがあなたのケースでアクセスします)。

私は、プログラミングガイドや詳細なチュートリアルで詳細を知りたいと思うかもしれません。

関連する問題