SAS 计算与模拟技术深度解析
1. 多任务计算相关要点
在编写 SAS 代码时,有一个重要规则:若声明库引用(libref),可能意味着操作有误。因为声明库引用暗示 MTC 平台无法根据输入输出声明生成 LIBNAME 语句,即输入输出声明可能不正确。
1.1 网格调度性能
RAM 的速度远快于磁盘输入输出(I/O)。现代操作系统(如 LINUX 或 Windows)依靠磁盘缓存或页面缓存来利用 RAM 的速度优势。当作业流中的所有任务在一台机器上运行时,一个任务的输出通常在后续任务准备使用时已存在于 RAM 中,此时只需给使用刚完成任务输出的任务更高执行优先级,让操作系统自行工作,就能利用磁盘缓存提升性能。
然而,当作业流的任务不在单台机器上运行时,情况就不同了。例如,若一个作业流的第一个任务在一台机器上运行,第二个任务在另一台机器上运行,第二个任务准备运行时,第一个任务的输出数据集可能不在内存中,还需通过网络传输到第二台机器,这会显著减慢任务执行速度,甚至增加机器数量反而会使作业流执行变慢。为避免这种情况,可选择合适的机器运行任务,以最小化数据移动并优化磁盘缓存的使用。但这需要了解任务的输入输出信息。
1.2 数据对象池化
任务导向编程中,工作按任务组织,每个任务定义不可变的输入和输出。任务的输出由一系列输入、任务和其他任务的输出计算得出,这些任务构成有向无环图(DAG),任务的先后顺序由数据对象的可用性决定。对于系统中的每个输出,可记录用于计算的 DAG 子集,这是一个简单的有序数据对象和任务标识符集合。当需要调度任务执行时,通过查找该有序集合,能快速确定输出是否已存在,这就是数据对象池化的本质。
超级会员免费看
订阅专栏 解锁全文
780

被折叠的 条评论
为什么被折叠?



