CN118093349A - 一种基于计算任务重构的gpu计算单元数量自动度量方法 - Google Patents
一种基于计算任务重构的gpu计算单元数量自动度量方法 Download PDFInfo
- Publication number
- CN118093349A CN118093349A CN202410489409.8A CN202410489409A CN118093349A CN 118093349 A CN118093349 A CN 118093349A CN 202410489409 A CN202410489409 A CN 202410489409A CN 118093349 A CN118093349 A CN 118093349A
- Authority
- CN
- China
- Prior art keywords
- gpu
- value
- kernel function
- executing
- test
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000000691 measurement method Methods 0.000 title claims abstract description 9
- 238000012545 processing Methods 0.000 title abstract description 8
- 238000005259 measurement Methods 0.000 claims abstract description 58
- 238000012360 testing method Methods 0.000 claims abstract description 55
- 238000000034 method Methods 0.000 claims description 16
- 239000011159 matrix material Substances 0.000 claims description 8
- 230000006870 function Effects 0.000 description 50
- 230000009286 beneficial effect Effects 0.000 description 3
- 238000005457 optimization Methods 0.000 description 3
- 238000004140 cleaning Methods 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 239000011800 void material Substances 0.000 description 2
- HPTJABJPZMULFH-UHFFFAOYSA-N 12-[(Cyclohexylcarbamoyl)amino]dodecanoic acid Chemical compound OC(=O)CCCCCCCCCCCNC(=O)NC1CCCCC1 HPTJABJPZMULFH-UHFFFAOYSA-N 0.000 description 1
- 230000001133 acceleration Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000013468 resource allocation Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3409—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for performance assessment
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/54—Indexing scheme relating to G06F9/54
- G06F2209/548—Queue
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种基于计算任务重构的GPU计算单元数量自动度量方法,通过构建计算任务形成第一测试程序对象测得计算单元可支持的最大工作组数,基于最大工作组数重新构建计算任务形成第二测试程序对象测得初测数量数组,再以初测数量数组及最大工作组数为基础构建计算任务形成第三测试程序对象,采用第三测试程序对象及由其复制得到的对照测试核函数串行测试验证初测数量数组中的结果,得到被测GPU内计算单元的准确数量,实现了以软件方式度量GPU内计算单元的数量,为相关计算程序优化提供了准确的参数支撑。
Description
技术领域
本发明属于计算机软件开发技术领域,具体涉及一种基于计算任务重构的GPU计算单元数量自动度量方法。
背景技术
GPU的计算单元CU(Compute Unit)是指图形处理器中负责执行计算任务的基本硬件单位,是GPU并行计算能力的核心,负责处理顶点、像素、纹理等图形相关的计算任务,也可用于非图形的通用计算。GPU中通常包含多个CU,因此GPU具有较大规模并行处理的能力。
每个CU都包含了多个更小的执行单元,如算术逻辑单元ALU,可并行处理多个指令。在不同的GPU架构中CU的具体设计和名称可能会有所不同,例如,在NVIDIA的CUDA架构中CU被称为流处理器SM(Streaming Multiprocessor)。每个CU通常包含以下关键组件:算术逻辑单元,负责执行各种算术和逻辑操作指令;寄存器,负责为CU内算术逻辑单元提供可被快速访问的存储空间;共享内存或 L1 缓存,为CU内所有线程协作提供可被使用的低延迟、高带宽的内存资源;控制单元,负责指令调度,指挥CU中的各算术逻辑单元按照程序指令顺序执行计算任务。
获取GPU内CU的数量和特性对开发高效的GPU加速应用程序至关重要,特别是在性能调优和资源分配时应用程序需要根据CU的数量和特性来合理安排计算任务和内存资源,尤其是CU的数量直接关系到GPU的并行计算能力。具体来说,获取CU的数量有以下重要意义:能够帮助开发者设计更合适的线程格局与块大小,充分利用每个CU以确保没有闲置的资源,最大化设备利用率,提升程序的整体性能;有助于开发者进行负载平衡使计算任务均衡分配到各CU中,在避免因分配的任务太少导致计算资源浪费的同时,避免因分配的任务太多而引起性能瓶颈;能够帮助开发者预估程序在不同GPU上的性能表现,有利于跨平台部署和硬件选型时的性能预测;有助于优化数据的内存布局,减少内存访问的延迟和冲突。
综上所述,获取GPU内CU的数量对于性能优化、资源利用率及能源效率的提升都至关重要,通过合理设计并行计算策略,可使程序更加高效地运行在具备不同CU数量的多种GPU上。一般情况下,CU的数量可通过查询GPU手册获取,然而往往存在查询结果与实际数量不符的情况,因此需要以软件方式实际获取GPU内真实的CU数量。
发明内容
有鉴于此,本发明提供了一种基于计算任务重构的GPU计算单元数量自动度量方法,实现了以软件方式度量GPU内计算单元的数量。
本发明提供的一种基于计算任务重构的GPU计算单元数量自动度量方法,具体包括以下步骤:
步骤1、查询被测GPU内计算单元可支持的最大工作组数,将该最大工作组数记为最大组数标称值,基于第一命令队列及第一基础核函数创建第一计算任务,将第一计算任务记为第一测试核函数;
指定工作组的数量为第一数量,在被测GPU的任一计算单元上采用第一测试核函数在第一数量的工作组内执行第一命令队列,获取执行结果,直到第一数量达到最大组数标称值或执行结果为执行失败;
当第一命令队列的执行结果为执行失败时,以该轮采用的第一数量减1作为最大组数实测值输出;否则最大组数标称值即为最大组数实测值;
步骤2、基于第二命令队列及第二基础核函数创建第二计算任务,将第二计算任务记为第二测试核函数;指定工作组的数量为第二数量,令第二数量等于最大组数实测值,在被测GPU上采用第二测试核函数在第二数量的工作组内执行第二命令队列记录执行时间,将执行时间记为计算单元执行时间;令执行次数n的初始值为0;
步骤3、在被测GPU上采用第二测试核函数在第二数量的工作组内执行第二命令队列,记录执行时间为本轮执行时间,若本轮执行时间大于计算单元执行时间则执行步骤4,否则将第二数量与最大组数实测值之和作为第二数量执行步骤3;
步骤4、第二数量与最大组数实测值的商为被测GPU内计算单元的数量CUNum,记为CUNum_n,令n自加1,若n不大于N则执行步骤3,N为设定的数量最大值;否则对N个计算单元的数量CUNum去重后得到m个不同的CUNum,m个不同的CUNum构成初测数量数组,执行步骤5;
步骤5、基于第三命令队列及第三基础核函数创建第三计算任务,将第三计算任务记为第三测试核函数,复制第三测试核函数形成对照测试核函数;令执行次数m的初始值为0,m的最大值为初测数量数组内元素的数量M;
步骤6、从初测数量数组中选择第m个初测数量,将第m个初测数量记为初测数量_m,以初测数量_m与特定值之积为第三数量,其中,特定值满足以下条件:特定值小于最大组数实测值,且最大组数实测值与特定值之差与初测数量_m之积大于最大组数实测值;在被测GPU上采用第三测试核函数在第三数量的工作组内执行第三命令队列,以实现均匀且部分填充被测GPU内的各计算单元;以最大组数实测值与特定值之差为第四数量,令执行次数i的初始值为0;
步骤7、在被测GPU上采用对照测试核函数在第四数量的工作组内执行第三命令队列,记录本轮的执行时间;若本轮的执行时间大于上一轮的执行时间则执行步骤9,否则执行步骤8;
步骤8、令i自加1,并以第四数量的二倍更新第四数量,执行步骤7;
步骤9、若(i-1)与初测数量_m相等,则说明初测数量_m为计算单元数量的准确值,结束本流程;否则令m自加1,若m不大于M则执行步骤6,若m大于M则结束本流程。
进一步地,在采用第一测试核函数在第一数量的工作组内执行第一命令队列之前,停止被测GPU内正在执行的所有计算任务。
进一步地,所述步骤1中所述第一基础核函数不执行任何实际计算,仅执行空操作。
进一步地,所述步骤2中所述第二基础核函数为矩阵运算。
进一步地,在执行步骤4后清理被测GPU内的计算任务。
进一步地,所述步骤5中所述第三基础核函数为矩阵运算。
有益效果
本发明通过构建计算任务形成第一测试程序对象测得计算单元可支持的最大工作组数,基于最大工作组数重新构建计算任务形成第二测试程序对象测得初测数量数组,再以初测数量数组及最大工作组数为基础构建计算任务形成第三测试程序对象,采用第三测试程序对象及由其复制得到的对照测试核函数串行测试验证初测数量数组中的结果,得到被测GPU内计算单元的准确数量,实现了以软件方式度量GPU内计算单元的数量,为相关计算程序优化提供了准确的参数支撑。
具体实施方式
下面列举实施例,对本发明进行详细描述。
本发明提供的一种基于计算任务重构的GPU计算单元数量自动度量方法,其核心思想是:通过构建计算任务形成第一测试程序对象测得计算单元可支持的最大工作组数,基于最大工作组数重新构建计算任务形成第二测试程序对象测得初测数量数组,再以初测数量数组及最大工作组数为基础构建计算任务形成第三测试程序对象,采用第三测试程序对象及由其复制得到的对照测试核函数串行测试验证初测数量数组中的结果,得到被测GPU内计算单元的准确数量。
本发明提供的一种基于计算任务重构的GPU计算单元数量自动度量方法,具体包括以下步骤:
步骤1、查询被测GPU内计算单元可支持的最大工作组数,将该最大工作组数记为最大组数标称值,该最大组数标称值可能大于实际值,该实际值即为计算单元可支持的最大工作组数的真实数量;构建第一命令队列及第一基础核函数,根据第一基础核函数在被测GPU内创建第一测试程序,将第一测试程序编译为第一测试程序对象,根据第一测试程序对象创建第一计算任务,将第一计算任务记为第一测试核函数;
指定工作组的数量为第一数量,第一数量的初始值为1,在被测GPU的任一计算单元上采用第一测试核函数在第一数量的工作组内执行第一命令队列,获取执行结果,直到第一数量达到最大组数标称值或执行结果为执行失败;
当第一命令队列在某轮的执行结果为执行失败时,以该轮采用的第一数量减1作为最大组数实测值输出;否则最大组数标称值即为最大组数实测值。
为进一步提高计算单元可支持的最大组数测量的准确性,在采用第一测试核函数在第一数量的工作组内执行第一命令队列之前,停止被测GPU内正在执行的所有计算任务。
为了提高最大工作组数的获取效率,本发明构建的第一基础核函数不执行任何实际计算,仅执行一个空操作,示例代码如下:
const char *kernelSource =
"__kernel void no_op_kernel(__global float *input) { }";
第一测试核函数在实际执行过程中将第一基础核函数加入第一命令队列执行。
步骤2、构建第二命令队列及第二基础核函数,根据第二基础核函数在被测GPU内创建第二测试程序,将第二测试程序编译为第二测试程序对象,根据第二测试程序对象创建第二计算任务,将第二计算任务记为第二测试核函数;指定工作组的数量为第二数量,令第二数量等于最大组数实测值,在被测GPU上采用第二测试核函数在第二数量的工作组内执行第二命令队列,并记录执行时间,将执行时间记为计算单元执行时间。令执行次数n的初始值为0。
第二基础核函数可为矩阵运算等。
步骤3、在被测GPU上采用第二测试核函数在第二数量的工作组内执行第二命令队列,记录执行时间为本轮执行时间,若本轮执行时间大于计算单元执行时间则执行步骤4,否则将第二数量与最大组数实测值之和作为第二数量执行步骤3。
为进一步提高测试结果的可靠性,本轮执行时间大于计算单元执行时间,且本轮执行时间与计算单元执行时间之差大于阈值时,执行步骤4。
步骤4、第二数量与最大组数实测值的商即为被测GPU内计算单元的数量CUNum,记为CUNum_n,令n自加1,若n不大于N则执行步骤3,N为设定的数量最大值;否则对N个计算单元的数量CUNum去重后得到m个不同的CUNum,m个不同的CUNum构成初测数量数组,执行步骤5。
为进一步提高提高测试结果的精度,本发明在执行步骤4后清理被测GPU内的计算任务。
步骤5、构建第三命令队列及第三基础核函数,根据第三基础核函数在被测GPU内创建第三测试程序,将第三测试程序编译为第三测试程序对象,根据第三测试程序对象创建第三计算任务,将第三计算任务记为第三测试核函数,复制第三测试核函数形成对照测试核函数。令执行次数m的初始值为0,m的最大值为初测数量数组内元素的数量M。
第三基础核函数可为矩阵运算等。
步骤6、从初测数量数组中选择第m个初测数量,将第m个初测数量记为初测数量_m,以初测数量_m与特定值之积为第三数量,其中,特定值满足以下条件:特定值小于最大组数实测值,且最大组数实测值与特定值之差与初测数量_m之积大于最大组数实测值;在被测GPU上采用第三测试核函数在第三数量的工作组内执行第三命令队列,以实现均匀且部分填充被测GPU内的各计算单元;以最大组数实测值与特定值之差为第四数量,令执行次数i的初始值为0。
步骤7、在被测GPU上采用对照测试核函数在第四数量的工作组内执行第三命令队列,记录本轮的执行时间;若本轮的执行时间大于上一轮的执行时间则执行步骤9,否则执行步骤8。
步骤8、令i自加1,并以第四数量的二倍更新第四数量,执行步骤7。
步骤9、若(i-1)与初测数量_m相等,则说明初测数量_m为计算单元数量的准确值,结束本流程;否则令m自加1,若m不大于M则执行步骤6,若m大于M则结束本流程。
实施例
本实施例中采用本发明提供的一种基于计算任务重构的GPU计算单元数量自动度量方法计算待测GPU内CU的数量,具体包括以下步骤:
S1、停止待测GPU内当前所有的计算任务。
S2、构建核函数,测算出单个CU能够处理的最大工作组数量(maxWorkGroupCount),具体步骤如下:
S2.1、创建OpenCL环境:初始化OpenCL平台和设备;创建一个OpenCL上下文;创建一个命令队列。
cl_platform_id platform_id = NULL;
cl_device_id device_id = NULL;
cl_uint num_devices, num_platforms;
cl_int ret;
// 获取平台和设备
ret = clGetPlatformIDs(1, &platform_id, &num_platforms);
ret = clGetDeviceIDs(platform_id, CL_DEVICE_TYPE_GPU, 1, &device_id,&num_devices);
// 创建OpenCL上下文
cl_context context = clCreateContext(NULL, 1, &device_id, NULL, NULL,&ret);
// 创建命令队列
cl_command_queue command_queue = clCreateCommandQueue(context,device_id, 0, &ret);
S2.2、编写核函数代码:创建一个基础的OpenCL核函数,该核函数不执行任何实际计算,只是一个空操作(NOP):
const char *kernelSource =
"__kernel void no_op_kernel(__global float *input) { }";
S2.3、创建并编译OpenCL程序:将上述核函数代码编译成OpenCL程序对象。
cl_program program = clCreateProgramWithSource(context, 1, (constchar **)&kernelSource, NULL, &ret);
ret = clBuildProgram(program, 1, &device_id, NULL, NULL, NULL);
S2.4、获取测算所需信息:每个CU可支持的工作组数量的最大值,逐渐增加工作组的大小并尝试运行核函数,直到达到失败条件。使用clGetKernelWorkGroupInfo函数获取关于最大工作组大小的信息。
S2.5、测试和测算:从1开始逐步增加工作组大小,直到提交核函数执行时发生错误,示例代码如下:
size_t work_group_size = 1;
cl_event event;
cl_kernel kernel = clCreateKernel(program, "no_op_kernel", &ret);
for (; work_group_size <= max_work_group_size; ++work_group_size) {
size_t global_work_size = work_group_size;
ret = clEnqueueNDRangeKernel(command_queue, kernel, 1(一个CU),NULL, &global_work_size, &work_group_size, 0, NULL, &event);
if (ret != CL_SUCCESS) {
// 发现最大限度,退出循环
break;
}
}
// work_group_size - 1 为不出错情况下的最大工作组数量
S2.6、清理资源:执行完测试后,需要释放所分配的资源。
ret = clReleaseKernel(kernel);
ret = clReleaseProgram(program);
ret = clReleaseCommandQueue(command_queue);
ret = clReleaseContext(context);
S3、构建核函数,测算CU数量。
S3.1、构建核函数,执行给定数目的工作组(记为totalWorkGroupCount),totalWorkGroupCount的初始值从能占满一个CU的工作组数(maxWorkGroupCount)开始,记录执行时间(记为execTimeInOneCU)。
S3.2、循环执行以下步骤:
S3.2.1、totalWorkGroupCount增加maxWorkGroupCount;
S3.2.2、构建核函数,执行totalWorkGroupCount个工作组,totalWorkGroupCount的初始值从能占满一个CU的工作组数(maxWorkGroupCount)开始,记录本次的执行时间,比较该时间与execTimeInOneCU,若该时间相比execTimeInOneCU有明显增加则结束循环,否则继续循环;
S3.2.3、(totalWorkGroupCount/maxWorkGroupCount)记为初步测算出的CU数量;
S3.2.4、反复执行以上步骤N次,得到N个测算出来的CU数量;由于实际的测量可能还需考虑并行线程的影响、以及优化器对代码的潜在优化等多种因素,这些值可能有差异,一般是0-4之间,这N个CU数量去重后得到M个CU数量(M<=N),将M个CU数量保存到数组arrayCUCount中;
S4、清理计算任务。
S5、同时构建两个计算任务,在获取的M个CU数量间做验证,获取最精确的结果。两个计算任务实际执行的计算指令完全一样,比如矩阵乘、矩阵加等。具体包括以下步骤:
S5.1、循环执行以下步骤M次,记循环次数为i。
S5.1.1、取arrayCUCount中的第i个值,记为currentCUCount;
S5.1.2、构建一个计算任务,执行给定次数的工作组,次数记为workGroupCount1*currentCUCount;workGroupCount1同时满足以下条件:
workGroupCount1小于maxWorkGroupCount,
(maxWorkGroupCount-orkGroupCount1)*currentCUCount>maxWorkGroupCount;
由于currentCUCount可能不等于真实的CU数量,上述条件的设置是为了确保(maxWorkGroupCount-workGroupCount1)*currentCUCount不会被加入某个单一CU中执行,而是被平均分配到每个CU中执行,每个CU执行的工作组数量为(maxWorkGroupCount-workGroupCount1);
S5.1.3、构建另一个计算任务,验证currentCUCount是否准确;
构建核函数,执行给定数目的工作组记为totalWGCount,totalWGCount的初始值从(maxWorkGroupCount-workGroupCount1)开始,记录本次的执行时间execTime,(maxWorkGroupCount-workGroupCount1)通常会被调度某个单一CU中执行;
循环执行以下步骤:
totalWGCount更新为(totalWGCount+maxWorkGroupCount-workGroupCount1);
构建核函数,执行totalWGCount个工作组,记录执行时间,若该时间比execTime存在明显增加,则结束循环;否则继续循环;
当循环次数等于currentCUCount时,结束循环。
综上所述,以上仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (6)
1.一种基于计算任务重构的GPU计算单元数量自动度量方法,其特征在于,具体包括以下步骤:
步骤1、查询被测GPU内计算单元可支持的最大工作组数,将该最大工作组数记为最大组数标称值,基于第一命令队列及第一基础核函数创建第一计算任务,将第一计算任务记为第一测试核函数;
指定工作组的数量为第一数量,在被测GPU的任一计算单元上采用第一测试核函数在第一数量的工作组内执行第一命令队列,获取执行结果,直到第一数量达到最大组数标称值或执行结果为执行失败;
当第一命令队列的执行结果为执行失败时,以该轮采用的第一数量减1作为最大组数实测值输出;否则最大组数标称值即为最大组数实测值;
步骤2、基于第二命令队列及第二基础核函数创建第二计算任务,将第二计算任务记为第二测试核函数;指定工作组的数量为第二数量,令第二数量等于最大组数实测值,在被测GPU上采用第二测试核函数在第二数量的工作组内执行第二命令队列记录执行时间,将执行时间记为计算单元执行时间;令执行次数n的初始值为0;
步骤3、在被测GPU上采用第二测试核函数在第二数量的工作组内执行第二命令队列,记录执行时间为本轮执行时间,若本轮执行时间大于计算单元执行时间则执行步骤4,否则将第二数量与最大组数实测值之和作为第二数量执行步骤3;
步骤4、第二数量与最大组数实测值的商为被测GPU内计算单元的数量CUNum,记为CUNum_n,令n自加1,若n不大于N则执行步骤3,N为设定的数量最大值;否则对N个计算单元的数量CUNum去重后得到m个不同的CUNum,m个不同的CUNum构成初测数量数组,执行步骤5;
步骤5、基于第三命令队列及第三基础核函数创建第三计算任务,将第三计算任务记为第三测试核函数,复制第三测试核函数形成对照测试核函数;令执行次数m的初始值为0,m的最大值为初测数量数组内元素的数量M;
步骤6、从初测数量数组中选择第m个初测数量,将第m个初测数量记为初测数量_m,以初测数量_m与特定值之积为第三数量,其中,特定值满足以下条件:特定值小于最大组数实测值,且最大组数实测值与特定值之差与初测数量_m之积大于最大组数实测值;在被测GPU上采用第三测试核函数在第三数量的工作组内执行第三命令队列,以实现均匀且部分填充被测GPU内的各计算单元;以最大组数实测值与特定值之差为第四数量,令执行次数i的初始值为0;
步骤7、在被测GPU上采用对照测试核函数在第四数量的工作组内执行第三命令队列,记录本轮的执行时间;若本轮的执行时间大于上一轮的执行时间则执行步骤9,否则执行步骤8;
步骤8、令i自加1,并以第四数量的二倍更新第四数量,执行步骤7;
步骤9、若(i-1)与初测数量_m相等,则说明初测数量_m为计算单元数量的准确值,结束本流程;否则令m自加1,若m不大于M则执行步骤6,若m大于M则结束本流程。
2.根据权利要求1所述的GPU计算单元数量自动度量方法,其特征在于,在采用第一测试核函数在第一数量的工作组内执行第一命令队列之前,停止被测GPU内正在执行的所有计算任务。
3.根据权利要求1所述的GPU计算单元数量自动度量方法,其特征在于,所述步骤1中所述第一基础核函数不执行任何实际计算,仅执行空操作。
4.根据权利要求1所述的GPU计算单元数量自动度量方法,其特征在于,所述步骤2中所述第二基础核函数为矩阵运算。
5.根据权利要求1所述的GPU计算单元数量自动度量方法,其特征在于,在执行步骤4后清理被测GPU内的计算任务。
6.根据权利要求1所述的GPU计算单元数量自动度量方法,其特征在于,所述步骤5中所述第三基础核函数为矩阵运算。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410489409.8A CN118093349B (zh) | 2024-04-23 | 2024-04-23 | 一种基于计算任务重构的gpu计算单元数量自动度量方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410489409.8A CN118093349B (zh) | 2024-04-23 | 2024-04-23 | 一种基于计算任务重构的gpu计算单元数量自动度量方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN118093349A true CN118093349A (zh) | 2024-05-28 |
CN118093349B CN118093349B (zh) | 2024-07-26 |
Family
ID=91142430
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202410489409.8A Active CN118093349B (zh) | 2024-04-23 | 2024-04-23 | 一种基于计算任务重构的gpu计算单元数量自动度量方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN118093349B (zh) |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2019217573A1 (en) * | 2018-05-08 | 2019-11-14 | Vmware, Inc. | Task assignment in virtual gpu enabled systems |
CN114492319A (zh) * | 2022-04-07 | 2022-05-13 | 西安芯瞳半导体技术有限公司 | 基于gpu批量生成uuid的方法、装置及介质 |
CN116225708A (zh) * | 2023-03-08 | 2023-06-06 | 西北工业大学 | 一种gpu资源调度方法及装置 |
-
2024
- 2024-04-23 CN CN202410489409.8A patent/CN118093349B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2019217573A1 (en) * | 2018-05-08 | 2019-11-14 | Vmware, Inc. | Task assignment in virtual gpu enabled systems |
CN114492319A (zh) * | 2022-04-07 | 2022-05-13 | 西安芯瞳半导体技术有限公司 | 基于gpu批量生成uuid的方法、装置及介质 |
CN116225708A (zh) * | 2023-03-08 | 2023-06-06 | 西北工业大学 | 一种gpu资源调度方法及装置 |
Non-Patent Citations (1)
Title |
---|
韩博;周秉锋;: "GPGPU性能模型及应用实例分析", 计算机辅助设计与图形学学报, no. 09, 15 September 2009 (2009-09-15) * |
Also Published As
Publication number | Publication date |
---|---|
CN118093349B (zh) | 2024-07-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11847508B2 (en) | Convergence among concurrently executing threads | |
KR101559090B1 (ko) | 이종 코어를 위한 자동 커널 마이그레이션 | |
EP3126971B1 (en) | Program execution on heterogeneous platform | |
EP2707797B1 (en) | Automatic load balancing for heterogeneous cores | |
US9354944B2 (en) | Mapping processing logic having data-parallel threads across processors | |
US20140157287A1 (en) | Optimized Context Switching for Long-Running Processes | |
US11934867B2 (en) | Techniques for divergent thread group execution scheduling | |
US20220091907A1 (en) | Processor based logic simulation acceleration and emulation system | |
Lai et al. | Break down GPU execution time with an analytical method | |
Gerum et al. | Source level performance simulation of gpu cores | |
CN108021563B (zh) | 一种指令间数据依赖的检测方法和装置 | |
CN118093349B (zh) | 一种基于计算任务重构的gpu计算单元数量自动度量方法 | |
Li et al. | GPU-accelerated fault simulation and its new applications | |
Adalbert et al. | PasTiS: building an NVIDIA Pascal GPU simulator for embedded AI applications | |
Cornelis et al. | The pipeline performance model: a generic executable performance model for GPUs | |
US11796593B2 (en) | Compiler-based code generation for post-silicon validation | |
CN114153750B (zh) | 代码检查方法及装置、代码编写方法、电子设备 | |
US12073200B2 (en) | Compiler device, instruction generation method, program, compiling method, and compiler program | |
CN113268436B (zh) | 基于钩子点的多粒度计算机仿真运行信息采集方法 | |
JP2012141852A (ja) | 論理計算システム、生成装置、生成方法及びプログラム | |
Tong et al. | Mu-gsim: A mutation testing simulator on gpus | |
Varadarajan et al. | RTL Test Generation on Multi-core and Many-Core Architectures | |
Terrosi et al. | Modeling of GPGPU architectures for performance analysis of CUDA programs | |
CN117313595A (zh) | 用于功能验证的随机指令生成方法、设备及系统 | |
CN118070424A (zh) | 一种船舶三维水弹性高效并行计算方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |