工作分配 - c ++中的循环法

时间:2015-01-24 10:08:02

标签: c++ algorithm c++11 round-robin

问题陈述为数字 Configuration of Data

假设阈值计数= 9 的预期结果 enter image description here

问题陈述为文字 - T客户端服务于服务器X&下面是配置。

T0,T1,T2,T3:--- X0
T4,T5,T6,T7:--- X1
T8,T9,T10,T11:--- X2
T12,T13,T14,T15:--- X3

T0到T3循环服务到X0直到达到令牌阈值 让我们说Eg:阈值是9,服务序列看起来像 T0,T1,T2,T3,T0,T1,T2,T3,的 T0

T4到T7以循环方式运行到X1直到达到令牌阈值 让我们说Eg:阈值是9,服务序列看起来像 T4,T5,T6,T7,T4,T5,T6,T7,的 T4

T8到T11以循环方式发送到X2直到达到令牌的阈值 让我们说Eg:阈值是9,服务序列看起来像 T8,T9,T10,T11,T8,T9,T10,T11,的 T8

T12到T15以循环方式运行到X3直到达到令牌的阈值 让我们说Eg:阈值是9,服务序列看起来像 T12,T13,T14,T15,T12,T13,T14,T15,的 T12

SO SEQUENCE将会看起来像

T0,T1,T2,T3,T0,T1,T2,T3, T0 :--- X0
T4,T5,T6,T7,T4,T5,T6,T7, T4 :--- X1
T8,T9,T10,T11,T8,T9,T10,T11, T8 :--- X2
T12,T13,T14,T15,T12,T13,T14,T15, T12 :--- X3

在迭代所有T的下一个序列之后会看起来像

T1,T2,T3,T0,T1,T2,T3,T0, T1 :--- X0
T5,T6,T7,T4,T5,T6,T7,T4, T5 :--- X1
T9,T10,T11,T8,T9,T10,T11,T8, T9 :--- X2
T13,T14,T15,T12,T13,T14,T15,T12, T13 X3

你可以看到,最后一次使用T'在下一次迭代中跳过。

我设法编写代码片段代码在这里,但是在我的代码中,我无法按照表中的预期公平分配令牌(其中最后使用的T'在下一次迭代中应该跳过达到阈值)。

请建议。

#include <iostream>

int CurrentT = 0;
int No_Of_T_Per_X = 4;
int OutputX = 0;
int No_Of_X = 4;
int Valid_T[16] ={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
int Processed_Tokens[4] = {0,0,0,0};
int THRESHOLD[4] = {9,9,9,9};
int LastT_Used[4] = {0,0,0,0};

static unsigned int getTargetX(unsigned int id, unsigned int       num_T_per_X) 
{ return id / num_T_per_X; } 

bool batch = false;
int main()
{
    int prev_SPMindex = -1;
    int next_SPMindex = 0;

    for(int i=1;i<=1000;i++) { // Looping to test some random no. of tokens..
     if ( Processed_Tokens[OutputX] >= THRESHOLD[OutputX]){    
     THRESHOLD[OutputX] = THRESHOLD[OutputX] + 9;
     //LastT_Used[OutputX] = CurrentT;
     prev_SPMindex = next_SPMindex;
     CurrentT = prev_SPMindex;
 }

 CurrentT = (CurrentT + 1) % (sizeof(Valid_T)/sizeof(int));  // Currently Processed T'

 if(((CurrentT % No_Of_T_Per_X) == 0)){
      next_SPMindex = CurrentT -1;
      CurrentT = prev_SPMindex;
      CurrentT = (CurrentT + 1) % (sizeof(Valid_T)/sizeof(int)); 
 }

 OutputX =    getTargetX(Valid_T[CurrentT], No_Of_T_Per_X); // Currently Processed X'           
 Processed_Tokens[OutputX] += 1; // Increasing the Count of Tokens to test

}

return 0;

}

0 个答案:

没有答案