【发布时间】:2018-07-17 08:00:40
【问题描述】:
我是使用 openACC 的新手,我想弄清楚当我使用 copyin 数据指令(特别是在 C 中)时发生了什么。
我有一个 3D 数组,正在尝试将其复制到设备上以进行一些计算。我遇到的问题是,当我进行复制时,设备内存不足,即使根据我的估计数组应该只有 ~40 MB(20000 x 128 x 2 浮点数组)。我使用的是 GTX 950,运行时有超过 1 GB 的可用内存(使用 nvidia-smi 检查)。
这是我用来测试的代码。我用它编译了
pgcc -acc -Minfo -o copytest copytest.c
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
float ***create_test_array( int nsamples, int nchan, int npol )
{
int s, ch; // Loop variables
float ***array;
array = (float ***)malloc( nsamples * sizeof(float **) );
for (s = 0; s < nsamples; s++)
{
array[s] = (float **)malloc( nchan * sizeof(float *) );
for (ch = 0; ch < nchan; ch++)
array[s][ch] = (float *)malloc( npol * sizeof(float) );
}
return array;
}
void test_copy( int nsamples, int nchan, int npol, float ***arr)
{
#pragma acc data pcopyin(arr[0:nsamples][0:nchan][0:npol])
#pragma acc kernels
for (int pol = 0; pol < npol; pol++)
{
for (int ch = 0; ch < nchan; ch++)
{
for (int s = 0; s < nsamples; s++)
{
arr[s][ch][pol] = 0.0;
}
}
}
}
void main()
{
int nsamples = 10000;
int nchan = 128;
int npol = 2;
float ***test_array = create_test_array( 2*nsamples, nchan, npol );
test_copy( 2*nsamples, nchan, npol, test_array );
}
非常感谢任何见解。
【问题讨论】: