我遇到了一個非常奇怪的問題:Mu 9800GT似乎根本不計算。 我試過所有你在互聯網上找到的世界,這裏有其中一個:Cuda不計算它的預期值,只是默默地忽略我的代碼
這個程序在主機上創建1..100的數組,將它發送到設備,計算每個值的平方,返回它承載,打印結果。
#include "stdafx.h"
#include <stdio.h>
#include <cuda.h>
__global__ void square_array(float *a, int N)
{
int idx = blockIdx.x * blockDim.x + threadIdx.x;
if (idx<N) a[idx] = a[idx] * a[idx];
}
// main routine that executes on the host
int main(void)
{
float *a_h, *a_d; // Pointer to host & device arrays
const int N = 100; // Number of elements in arrays
size_t size = N * sizeof(float);
a_h = (float *)malloc(size); // Allocate array on host
cudaMalloc((void **) &a_d, size); // Allocate array on device
// Initialize host array and copy it to CUDA device
for (int i=0; i<N; i++) a_h[i] = (float)i;
cudaMemcpy(a_d, a_h, size, cudaMemcpyHostToDevice);
// Do calculation on device:
int block_size = 4;
int n_blocks = N/block_size + (N%block_size == 0 ? 0:1);
square_array <<< n_blocks, block_size >>> (a_d, N);
// Retrieve result from device and store it in host array
cudaMemcpy(a_h, a_d, sizeof(float)*N, cudaMemcpyDeviceToHost);
// Print results
for (int i=0; i<N; i++) printf("%d %f\n", i, a_h[i]);
// Cleanup
free(a_h); cudaFree(a_d);
}
所以輸出預期爲:
1 1.000
2 4.000
3 9.000
4 16.000
.. 我宣誓早在2009年它完美地工作(遠景32,deviceemu)
現在我得到輸出:
1 1.000
2 2.000
3 3.000
4 4.000
所以我的卡沒有做任何事情。可能是什麼問題? 配置爲: win7x64 Visual Studio 2010的32位 CUDA工具包3.2 64位
編譯設置:CUDA 3.2工具包,32位目標平臺,deviceemu或不 - 並不重要,結果是一樣的。
我也在我的vmware xp(32位)visual studio 2008上試過了。結果是一樣的。
請幫助我,我幾乎沒有編寫程序,現在我需要它的工作。
您也可以與所有需要查看我的項目從my post at nvidia forums(2.7 KB)
感謝,伊利亞
嘿伊利亞, 我面對完全相同的問題,我首先在我的CUDA兼容桌面計算機上實現它,它完美地工作,當我轉移到超級計算機上時,我得到了確切的相同的輸出。 你認爲我應該做什麼? – 2011-01-24 15:03:53