Я хотел бы разбить диапазон чисел на примерно равный размер в C, используя OpenMP. Например, если у меня диапазон от 7 до 24 и число потоков равно 8. Я бы хотел, чтобы первый поток начинался с 7 и заканчивался на 9. Второй поток начинался с 10 и заканчивался на 12. Третий поток начинался с 13 и конец в 14. Четвертый поток начинается в 15 и заканчивается в 16 и т. д. До тех пор, пока последний поток не начнется в 23 и не закончится в 24. Я написал следующий код, но он не получает ранее объясненных результатов. Мне интересно, есть ли что-то, что я пропустил, что я могу сделать, или есть более эффективный способ сделать это? Ваша помощь очень ценится.
Примечание к предопределенному объявлению переменных на основе приведенного выше примера:
first = 7
last = 24
size = 2 (which signifies the amount of numbers per thread)
r = 2 (r signifies remainder)
nthreads = 8
myid = is the thread ID in a range of 0 to 7
if (r > 0)
{
if (myid == 0)
{
start = first + myid*size;
end = start + size;
}
else if (myid == nthreads - 1)
{
start = first + myid*size + myid;
end = last;
}
else
{
start = first + myid*size + myid;
end = start + size;
}
}
else
{
start = first + myid*size;
if (myid == nthreads - 1) end = last;
else end = start + size - 1;
}