DPC++ & MPI、缓冲区、共享内存、变量声明
DPC++ & MPI, buffer, shared memory, variable declare
我是 DPC++ 的新手,我尝试开发一个基于 MPI 的 DPC++ 泊松求解器。我读了这本书,对共享或主机内存的缓冲区和指针感到非常困惑。这两个东西有什么区别,我在开发代码的时候应该用什么。
现在,我使用由 std::array 初始化的缓冲区,其大小为连续代码,并且效果很好。但是,当我将 DPC++ 代码与 MPI 结合使用时,我必须为每个设备声明一个本地长度,但我没有这样做。在这里附上我的代码
define nx 359
define ny 359
constexpr int local_len[2];
global_len[0] = nx + 1;
global_len[1] = ny + 1;
for (int i = 1; i < process; i++)
{
if (process % i == 0)
{
px = i;
py = process / i;
config_e = 1. / (2. * (global_len[1] * (px - 1) / py + global_len[0] * (py - 1) / px));
}
if (config_e >= cmax)
{
cmax = config_e;
cart_num_proc[0] = px;
cart_num_proc[1] = py;
}
}
local_len[0] = global_len[0] / cart_num_proc[0];
local_len[1] = global_len[1] / cart_num_proc[1];
constexpr int lx = local_len[0];
constexpr int ly = local_len[1];
queue Q{};
double *m_cellValue = malloc_shared<double>(size, Q);
我收到错误消息
error: default initialization of an object of const type 'const int[2]'
error: cannot assign to variable 'local_len' with const-qualified type 'const int[2]'
main.cpp:52:18: error: cannot assign to variable 'local_len' with const-qualified type 'const int[2]'
有什么方法可以只定义一个可变大小的数组来在 DPC++ 中进行并行处理吗?
您太急于使用constexpr
。删除此代码中的所有三个匹配项,它应该可以编译。所以这与DPC++无关
我是 DPC++ 的新手,我尝试开发一个基于 MPI 的 DPC++ 泊松求解器。我读了这本书,对共享或主机内存的缓冲区和指针感到非常困惑。这两个东西有什么区别,我在开发代码的时候应该用什么。
现在,我使用由 std::array 初始化的缓冲区,其大小为连续代码,并且效果很好。但是,当我将 DPC++ 代码与 MPI 结合使用时,我必须为每个设备声明一个本地长度,但我没有这样做。在这里附上我的代码
define nx 359
define ny 359
constexpr int local_len[2];
global_len[0] = nx + 1;
global_len[1] = ny + 1;
for (int i = 1; i < process; i++)
{
if (process % i == 0)
{
px = i;
py = process / i;
config_e = 1. / (2. * (global_len[1] * (px - 1) / py + global_len[0] * (py - 1) / px));
}
if (config_e >= cmax)
{
cmax = config_e;
cart_num_proc[0] = px;
cart_num_proc[1] = py;
}
}
local_len[0] = global_len[0] / cart_num_proc[0];
local_len[1] = global_len[1] / cart_num_proc[1];
constexpr int lx = local_len[0];
constexpr int ly = local_len[1];
queue Q{};
double *m_cellValue = malloc_shared<double>(size, Q);
我收到错误消息
error: default initialization of an object of const type 'const int[2]'
error: cannot assign to variable 'local_len' with const-qualified type 'const int[2]'
main.cpp:52:18: error: cannot assign to variable 'local_len' with const-qualified type 'const int[2]'
有什么方法可以只定义一个可变大小的数组来在 DPC++ 中进行并行处理吗?
您太急于使用constexpr
。删除此代码中的所有三个匹配项,它应该可以编译。所以这与DPC++无关