I want to split a variable array Data [] among a fixed number of threads in a fair way
Case 1: Splitting data [7] among 4 streams is enough
Thread ID 0: Data[0], Data[1]
Thread ID 1: Data[2], Data[3]
Thread ID 2: Data[4], Data[5]
Thread ID 3: Data[6]
Currently, my code divides the array unfairly
Case 2: Share Data [7] Among 4 Streams
Thread ID 0: Data[0]
Thread ID 1: Data[1]
Thread ID 2: Data[2]
Thread ID 3: Data[3], Data[4], Data[5], Data[6]
Here is the code that implements Case 2 .
#include <iostream>
using namespace std;
const unsigned int NUMELEM = 7;
const unsigned int THREADCNT = 4;
unsigned int elemPerThread = NUMELEM/THREADCNT;
unsigned int remElements = NUMELEM % THREADCNT;
int Data[NUMELEM];
void DoStuff( unsigned int const& thid )
{
unsigned int startIndex = thid*elemPerThread;
unsigned int endIndex = startIndex + elemPerThread;
cout<<"Thread ID "<<thid<<": ";
for( unsigned int index = startIndex; index != endIndex; index++ )
{
cout<<"Data["<<index<<"], ";
}
if( (thid+1) == THREADCNT )
{
for( unsigned i = 0; i!= remElements; i++)
{
cout<<"Data["<<endIndex + i<<"], ";
}
}
cout<<endl;
}
int main()
{
for( unsigned int thid = 0; thid != THREADCNT; thid++)
{
DoStuff( thid );
}
return 0;
}
I want a solution to Case 1
source
share