梦在千里外(1205541637) 2023/1/27 11:31:02
请教一个问题:
下面程序计数总是输出全0,有点不清楚问题在哪。请教大佬!
程序主要目的是读取共享内存,并将共享内存的数据使用for循环相加。
最后将结果写回共享内存。
#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include <stdio.h>
#include "device_functions.h"
#include <omp.h> //计时头文件
#include <fstream> //写入文件的头文件
#include <random>
#include<array>
#include<iostream>
#define Num 10
using namespace std;
__global__ void test(int* a)
{
int ID_Block = threadIdx.x;
int temp = 0;
if (ID_Block < 5)
{
for (int i=0; i < 2; i++)
{
temp += a[ID_Block + i << 5];
}
printf("%d:%d\n", ID_Block, temp);
a[ID_Block] = temp;
//a[ID_Block + 5] += a[ID_Block];
}
__syncthreads();
if (ID_Block == 0)
{
temp = 0;
__volatile for (int i = 0; i < 5; i++)
{
temp += a[i];
}
a[0] = temp;
printf("%d\n", a[0]);
}
return;
}
int main(int argc, char** argv)
{
int* D;
int h_D[10];
for (int i = 0; i < 10; i++)
{
h_D[i] = i;
}
//****************************************
//静态内存数组变量的传递测试
cudaMalloc((void**)&D, Num * sizeof(int));
cudaMemcpy(D, h_D, Num * sizeof(int), cudaMemcpyHostToDevice);
test << <1, 5 >> > (D);
cudaMemcpy(h_D, D, Num * sizeof(int), cudaMemcpyDeviceToHost);
for (int i = 0; i < 10; i++)
{
cout << i << ":\t" << h_D[i] << endl;
}
return 0;
}
如果有大佬,不胜感激!
相似问题