Home > front end >  DPC & MPI, buffer, shared memory, variable declare
DPC & MPI, buffer, shared memory, variable declare

Time:04-27

I am new to DPC , and I try to develop a MPI based DPC Poisson solver. I read the book and am very confused about the buffer and the pointer with the shared or host memoery. What is the difference between those two things, and what should I use when I develop the code.

Now, I use the buffer initialized by an std::array with const size for serial code and it works well. However when I couple the DPC code with MPI, I have to declare a local length for each device, but I fail to do that. Here I attach my code

    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);

I got the error

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]'

Is there any way to just define a variable size array to do the parallel for in DPC ?

CodePudding user response:

You are too eager in using constexpr. Remove all three occurrences in this code, and it should compile. So this has nothing to do with DPC .

  • Related