华为OD-GPU算力任务调度(详解)

该问题涉及如何高效利用GPU资源。给定一个任务数组,每秒新增固定数量的任务,GPU每次能处理n个任务。策略是尽量填满GPU的执行槽,避免空闲。通过模拟液体转移问题,计算出完成所有任务所需的最少时间。例如,当GPU最大处理3个任务时,一组任务(1,2,3,4,5)将在6秒内完成。
摘要由CSDN通过智能技术生成

题目描述

为了充分发挥GPU算力,

需要尽可能多的将任务交给GPU执行,

现在有一个任务数组,

数组元素表示在这1s内新增的任务个数,

且每秒都有新增任务,

假设GPU最多一次执行n个任务,

一次执行耗时1s,

在保证GPU不空闲的情况下,最少需要多长时间执行完成。

输入描述

第一个参数为GPU最多执行的任务个数,取值范围1 ~ 10000

第二个参数为任务数组的长度,取值范围1 ~ 10000

第三个参数为任务数组,数字范围1 ~ 10000

输出描述

执行完所有任务需要多少秒

输入输出案例

解题思路

想象为容器转移液体问题,即一次转移一份,容器容积给定,依次转移给定的的容量(列表元素),如果大于容器容积则多余的分给下一次转移,以此类推,计算转移完需要多少次

以上容器最大为3

1 <3 即1次完成,没有剩余

2 <3 即1次完成,没有剩余

3 =3 即1次完成,没有剩余

4 >3 即1次转移走3,剩余1下次转移

5 +1(上次剩余的)> 3 即1次转移走3, 最后剩余3只能再次转移

剩余3 转移1次 完成任务

总转移花费 6次

# !E:\pythonScript\venv python3
# -*- coding: utf-8 -*-
"""
Date: 2023/3/9
Time: 16:08
Author: kang
"""
n = int(input())
l = input()
sgroup = list(map(int, input().split()))
# print(sgroup)
time = 0  # 用于记录转移次数
more = 0  # 用于存放上次剩余量
for i in sgroup:
    if i + more > n:  # 判断本次和上次剩余和是否大于容积
        more = i + more - n  # 本次剩余量
    else:
        more = 0
    time += 1
while more > 0:  # 最后剩余量需要次数
    more -= n
    time += 1
print(time)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值