[daily paper 9]2023 03 08 2017 44 Auto Tuning Strategies for Parallelizing SpMV on Multi and Many Co

论文提出了一种基于机器学习的矩阵行合并方法,使用CSR格式避免格式转换,并通过决策树模型预测合并参数U和选择合适的kernel,以实现工作group内的负载均衡。数据集包含两千多个矩阵用于训练,但binning限制为合并相邻行,可能影响效率。

这篇论文讲的是一个叫binning(合并)的东西,将不同的rows合并到一起,使用了机器学习的方法。合并后形成一个个bin,每个bin被分配到一个workgroup上(有多个线程,如256个),可以执行不同的kernel。最典型的kernel是一个线程处理一个row,还有x个线程处理一个row的kernel,最后还有所有线程处理一个row的kernel。

文中的方法是基于CSR格式的,CSR通用性比较强,选择CSR格式可以避免格式转换的负担。

论文使用了决策树模型来训练,图示如下:

在这里插入图片描述

这个模型处理的是矩阵的features,列表如下:

在这里插入图片描述

有两种vector,一种是{M, N, NNZ, Var NNZ, Avg NNZ, Min NNZ, Max NNZ, U},target是U,这个U是binning的参数,表示多少row合为一个bin。还有一种vector是{M, N, NNZ, Var NNZ, Avg NNZ, Min NNZ, Max NNZ, U, binID, kernelID},target是kernelID(选哪个kernel)。

作者的数据集包含两千多个矩阵,用于训练,训练之后可以进行预测。

我觉得文中的binning有个缺点,就是只能合并相邻的row。前边看到的一篇论文是将row排序,然后再合并,并且按照非零元素数合并,这样不同的bin之间和bin内部都均衡,缺点是排序需要时间,然后选择不连续的row也有负担。

总结一下,这篇论文使用机器学习的方法来解决binning问题,选择合适的U,以及对每个bin选择合适的kernel,以实现不同workgroup之间/内的负载均衡。

### SQL Tuning Advisor 自动运行及特殊调优任务 SYS_AUTO_SQL_TUNING_TASK SQL Tuning Advisor 是 Oracle 数据库中用于自动优化 SQL 性能的工具。它通过分析 SQL 语句并提供改进建议来提高查询性能。`SYS_AUTO_SQL_TUNING_TASK` 是一个系统内置的任务,用于在维护窗口期间自动执行 SQL 调优。 #### 查询 `SYS_AUTO_SQL_TUNING_TASK` 的执行情况 为了查看 `SYS_AUTO_SQL_TUNING_TASK` 的执行状态和历史记录,可以使用以下查询语句[^2]: ```sql SELECT execution_name, status, execution_start, execution_end FROM dba_advisor_executions WHERE task_name = 'SYS_AUTO_SQL_TUNING_TASK' ORDER BY execution_start DESC; ``` 该查询返回任务的执行名称、状态、开始时间和结束时间。这有助于了解任务是否正在运行以及最近的执行情况。 #### 设置调优任务参数 可以通过 `DBMS_SQLTUNE.set_tuning_task_parameter` 过程调整 `SYS_AUTO_SQL_TUNING_TASK` 的行为。例如,设置是否接受 SQL Profiles 或限制任务运行时间。以下示例展示了如何将任务的运行时间限制为 4 小时(14400 秒)[^3]: ```sql BEGIN DBMS_SQLTUNE.set_tuning_task_parameter( task_name => 'SYS_AUTO_SQL_TUNING_TASK', parameter => 'TIME_LIMIT', value => 14400); END; / ``` #### 启用或禁用 SQL Tuning Advisor 确保 SQL Tuning Advisor 已启用,可以通过检查 `CLIENT_NAME` 和其状态来确认[^5]: ```sql SELECT CLIENT_NAME, STATUS FROM DBA_AUTOTASK_CLIENT WHERE CLIENT_NAME = 'sql tuning advisor'; ``` 如果状态为 `ENABLED`,则表示 SQL Tuning Advisor 已启用。否则,可以通过以下命令启用: ```sql BEGIN DBMS_AUTO_TASK_ADMIN.ENABLE( client_name => 'sql tuning advisor', operation => NULL, window_name => NULL); END; / ``` #### 手动创建和执行调优任务 除了自动运行的任务外,还可以手动创建和执行调优任务。以下是一个简单的示例,展示如何为特定 SQL 创建调优任务并执行[^4]: ```sql DECLARE my_task_name VARCHAR2(30); my_sqltext CLOB; BEGIN my_sqltext := 'select count(*) from obj o, ind i where o.object_name=i.index_name'; my_task_name := DBMS_SQLTUNE.CREATE_TUNING_TASK( sql_text => my_sqltext, user_name => 'SYS', scope => 'COMPREHENSIVE', time_limit => 30, task_name => 'tuning_sql_test', description => 'tuning'); DBMS_SQLTUNE.EXECUTE_TUNING_TASK(task_name => 'tuning_sql_test'); END; / ``` #### 检查调优建议 执行完调优任务后,可以查看生成的建议。以下查询返回任务的详细信息和建议[^4]: ```sql SELECT DBMS_SQLTUNE.REPORT_TUNING_TASK('tuning_sql_test') AS report FROM DUAL; ``` ### 结论 通过上述方法,可以全面监控和管理 `SYS_AUTO_SQL_TUNING_TASK` 的运行情况,并根据需要调整其参数或手动创建调优任务以优化 SQL 性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值