-3

ubuntu 12.04でcuda-5.5を使用して、gtx570で簡単なコードを実行しています

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <time.h>
#include <unistd.h>

#include <cuda_runtime_api.h>
#include <cuda.h>
#include "book.h"

__global__ void add(int *a, int *b, int *c){
int tid = blockIdx.x;
if (tid < 10)
        c[tid] = a[tid] + b[tid];
}


int main(void) {

int a[10],b[10],c[10];
int *dev_a,*dev_b,*dev_c;

cudaError_t err = cudaMalloc( ( void**)&dev_a, 10 * sizeof(int) ) ;
if(err != cudaSuccess){
     printf("The error is %s", cudaGetErrorString(err));
}


cudaError_t err2 = cudaMalloc( ( void**)&dev_b, 10 * sizeof(int) ) ;
if(err2 != cudaSuccess){
     printf("The error is %s", cudaGetErrorString(err));
}
cudaError_t err3 = cudaMalloc( ( void**)&dev_c, 10 * sizeof(int) ) ;
if(err3 != cudaSuccess){
     printf("The error is %s", cudaGetErrorString(err));
}


for (int i = 0; i<10 ; i++)
        {
        a[i] = -i;
        b[i] = i*i;
        }


cudaError_t err4 = cudaMemcpy( dev_a,a,10*sizeof(int), cudaMemcpyHostToDevice ) ;
if(err4 != cudaSuccess){
     printf("The error is %s", cudaGetErrorString(err));
}

cudaError_t err5 =cudaMemcpy( dev_b,b,10*sizeof(int), cudaMemcpyHostToDevice ) ;
if(err5 != cudaSuccess){
     printf("The error is %s", cudaGetErrorString(err));
}

add<<<10,1>>>(dev_a,dev_c,dev_c);
if (cudaPeekAtLastError() != cudaSuccess) {
    printf("The error is %s", cudaGetErrorString(cudaGetLastError()));
}
cudaError_t err6 = cudaMemcpy(c,dev_c,10*sizeof(int), cudaMemcpyDeviceToHost);
if(err6 != cudaSuccess){
     printf("The error is %s", cudaGetErrorString(err));
}


for (int i = 0; i<10; i++)
        {
        printf("%d + %d = %d\n", a[i],b[i],c[i]);
        }


cudaFree( dev_a);
cudaFree( dev_b);
cudaFree( dev_c);

return 0 ;
}

このコードはエラーなしでコンパイルされますが、ナンセンスな答えが得られます:

0 + 0 = -1087278592
-1 + 1 = -1245725046
-2 + 4 = 2139095032
-3 + 9 = 780509949
-4 + 16 = 1195091696
-5 + 25 = -921707890
-6 + 36 = 33554408
-7 + 49 = 936179122
-8 + 64 = 1026206341
-9 + 81 = -1090519076

はい、cuda の Web サイトから cuda コードを取得しました https://developer.nvidia.com/cuda-downloads はい、nvidia の Web サイトから nvidia ドライバーを取得しました http://www.geforce.com/drivers/results/67567

以前にこれを実行しましたが、その後、ubuntu パーティションを大幅に破壊したため、問題が発生しています。

編集:解決しました。少なくとも動作しているようです。valgrind を使用して、関数 fwrite がセグメンテーション違反であることを確認しました。fwrite segfaults が自分のコンピューターで発生するのに、以前にシミュレーションを実行したサーバーでは発生しないのは奇妙です。

4

1 に答える 1