【202203-3】计算资源调度器

Attention:

①vector的遍历方式

void text()
{
	vector<int> v1 = {0,1,2,3,4,5,6};
    
	for(auto ite = v1.begin(); ite != v1.end(); ite++)
	{
		cout << *ite <<" ";
	}
}

②厘清题意,代码中的avaiZone、v[MAX]无用。

#include<bits/stdc++.h>
using namespace std;
#define MAX 100000
map<int, vector<int>>avaiZone;//可用区 -> 计算节点
map<int, vector<int>>calPoint;//计算节点 -> 计算任务
map<int, int>PointZone;//计算节点 -> 可用区
map<int, map<int, int>>avaiApp;//判断某可用区中是否有某应用
map<int, map<int, int>>pointApp;//判断某节点中是否有某应用
vector<int>candi1, candi2;//过滤阶段的候选节点

int n, m, g, k, v[MAX];
int f, a, na, pa, paa, paar;

//计算节点亲和性要求
bool satif_na(int na, int point)
{
	//没有计算节点亲和性要求
	if (na == 0)return true;
	//计算节点point在na可用区内
	if (PointZone[point] == na)return true;
	return false;
}

//计算任务亲和性要求
bool satif_pa(int pa, int point)
{
	//没有计算任务亲和性要求
	if (pa == 0)return true;
	//计算节点point和应用pa在同一个可用区
	if (avaiApp[PointZone[point]][pa])return true;
	return false;
}

//计算任务反亲和性要求
bool satif_paa(int paa, int point)
{
	//没有计算任务反亲和性要求
	if (paa == 0)return true;
	//没有和编号为paa应用的计算任务运行在一个计算节点
	if (!pointApp[point][paa])return true;
	return false;
}

//排序阶段,在candinum中选择合适节点
void get_ans(int num, int a)
{
	int res = 0;
	if (num == 1)
	{
		for (auto ite = candi1.begin(); ite != candi1.end(); ite++)
		{
			if (res == 0)res = *ite;
			if (calPoint[res].size() > calPoint[*ite].size())res = *ite;
			if (calPoint[res].size() == calPoint[*ite].size() && res > *ite)res = *ite;
		}
	}
	else if (num == 2)
	{
		for (auto ite = candi2.begin(); ite != candi2.end(); ite++)
		{
			if (res == 0)res = *ite;
			if (calPoint[res].size() > calPoint[*ite].size())res = *ite;
			if (calPoint[res].size() == calPoint[*ite].size() && res > *ite)res = *ite;
		}
	}
	calPoint[res].push_back(a);//计算节点中加入一个应用a的计算任务
	avaiApp[PointZone[res]][a] = 1;
	pointApp[res][a] = 1;
	cout << res << ' ';
}

int main()
{
	cin >> n >> m;
	for (int i = 1; i <= n; ++i)
	{
		cin >> k;
		avaiZone[k].push_back(i);
		PointZone[i] = k;
	}
	cin >> g;
	for (int i = 1; i <= g; ++i)
	{
		cin >> f >> a >> na >> pa >> paa >> paar;
		memset(v, 0, sizeof(v));

		for (int j = 1; j <= f; ++j)//第i组计算任务中的任务j
		{
			candi1.clear(); candi2.clear();
			//如果要求的可用区没有节点,为空
			if (na > 0 && avaiZone[na].empty())
			{
				for (int ii = 1; ii <= f; ++ii)
					printf("0 ");
				break;
			}
			//过滤阶段
			for (int ii = 1; ii <= n; ++ii)
			{
				if (satif_na(na, ii) && satif_pa(pa, ii))
				{
					candi2.push_back(ii);
					if (satif_paa(paa, ii))
						candi1.push_back(ii);
				}
			}
			if (!candi1.empty())get_ans(1, a);
			else {
				if (candi1.empty() && paar == 0)get_ans(2, a);
				else	printf("0 ");
			}
		}
		cout << endl;
	}
	return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FPGA计算资源调度是指针对FPGA芯片的计算任务,在多样性的大数据业务场景下,通过智能调度分配方法,将计算资源进行有效的规划和调度,以提高计算资源的利用率和效率。 在进行FPGA计算资源调度时,可以采用基于算力网络的方法,结合容化技术和存算分离技术。基于容化技术可以利用其可移植性、可伸缩性、高效性、安全性及快速响应性的特点,根据业务繁忙程度,灵活快速地扩缩容计算资源,提高数据计算单元的创建速度。同时,存算分离技术可以将计算和存储分别弹性扩展和按需分配,降低系统部署和扩展成本,并解决资源利用不均衡的问题。 此外,基于算力网络的大数据计算资源智能调度分配方法还依靠算网大脑的智能调度分配资源特性,解决了计算环境下资源分配过程中的资源调度时效性、资源利用率以及负载均衡等问题。用户只需要通过业务应用层,提交大数据业务场景对应的计算需求,算网大脑就会根据用户任务的算力需求自动匹配整个算力网络中最合适的算力资源。用户无须关注算力提供节点的真实物理位置,只需关注数据计算业务本身的资源需求。这样可以帮助业务实现按需在全网范围内第一时间获取所需的大数据资源。 综上所述,在FPGA计算资源调度中,可以利用基于算力网络的大数据计算资源智能调度分配方法,结合容化技术和存算分离技术,以提高计算资源的利用率和效率,同时解决资源调度时效性、资源利用率和负载均衡等问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [FPGA实现深度学习系列之FPGA程序计算单元细节规划](https://blog.csdn.net/my_share/article/details/115922411)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [基于算力网络的大数据计算资源智能调度分配方法](https://blog.csdn.net/weixin_70923796/article/details/128420014)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值