hpc 相关问题

高性能计算(HPC)是指使用超级计算机和计算机集群来解决各种计算密集型问题。

HPC 上的 mpiexec 错误:文件 srun 上的 execvp 错误(没有此类文件或目录)

在HPC上,我先测试一下 apptainer exec my_container bash -c“激活环境;python3 script.py” 效果很好。 如果我以交互方式使用终端,它也可以很好地工作,例如: 应用泰...

回答 1 投票 0

在多个文件上运行 SLURM 的最简单方法

我有一个 Python 脚本,可以逐个处理大约 10,000 个 FITS 文件。对于每个文件,脚本都会在与输入文件相同的目录中生成输出,并创建单个 CSV 文件...

回答 1 投票 0

程序员在编写Python代码时是否需要手动实现循环展开等优化?

我最近在学习一些 HPC 主题,并了解到现代 C/C++ 编译器能够检测有权优化的位置,并使用相应的技术(例如 SIMD)进行优化...

回答 1 投票 0

从不同文件作为单个批处理作业提交太多命令

我想使用 bash 在 HPC 上运行批处理作业。要执行的命令保存到文本文件中。以前,我使用以下命令将文本文件的每一行作为批处理作业单独运行。 ...

回答 1 投票 0

Openmp 递归任务

我是 Openmp 编程新手,我有一个关于递归任务并行性的问题 让我们考虑一下这个演示 C 代码: #包括 #包括 #包括 我是 Openmp 编程新手,我有一个关于递归任务并行性的问题 让我们考虑一下这个演示 C 代码: #include <stdio.h> #include <stdlib.h> #include <sys/time.h> #include <omp.h> struct timeval t1, t2; void recursive_task(int level) { //printf("%d\n", level); if (level == 0){ usleep(1000); return; } else { recursive_task(level-1); #pragma omp task { recursive_task(level-1); } #pragma omp task { recursive_task(level-1); } #pragma omp taskwait recursive_task(level-1); } } int main() { double time; gettimeofday(&t1, 0); #pragma omp parallel { #pragma omp single { recursive_task(7); } } gettimeofday(&t2, 0); time = (double)((t2.tv_sec - t1.tv_sec) * 1000000 + t2.tv_usec - t1.tv_usec) / 1000000; printf("%.4f\n", time); return 0; } 每一级递归执行 4 次调用,其中只有第二次和第三次调用可以实际并行运行。 现在我尝试了这个不同的版本: #include <stdio.h> #include <stdlib.h> #include <sys/time.h> #include <omp.h> struct timeval t1, t2; void recursive_task(int level) { //printf("%d\n", level); if (level == 0){ usleep(1000); return; } else { #pragma omp task if(0) { recursive_task(level-1); #pragma omp task { recursive_task(level-1); } recursive_task(level-1); #pragma omp taskwait recursive_task(level-1); } } } int main() { double time; gettimeofday(&t1, 0); #pragma omp parallel { #pragma omp single { recursive_task(7); } } gettimeofday(&t2, 0); time = (double)((t2.tv_sec - t1.tv_sec) * 1000000 + t2.tv_usec - t1.tv_usec) / 1000000; printf("%.4f\n", time); return 0; } 执行似乎也遵循正确的调用顺序(我认为这与 if(0) 子句有关)。 然而令我惊讶的是第二个比第一个更快。我使用 8 个线程执行,第一种方法需要 4.4 秒,第二种方法需要 3.4 秒! 使第二个代码更快的主要区别是什么? 重点是影响#pragma omp taskwait等待当前任务的子任务完成,当有使用#pragma omp task if(0)创建的任务时,当前任务不一样。这意味着“不”拥有较晚的指令会导致“过度同步”,从而导致更高的执行时间(当然是由于并行性较低)。事实上,在这种情况下, #pragma omp taskwait 指令会等待更多任务(尤其是没有 if(0) 的真实任务。 2 个级别的示例 为了更好地理解发生了什么,我们可以分析该函数在级别 2 上到底做了什么(并将延迟增加到 10_000,以便我们可以在运行时看到任何差异)。这是扁平化代码: void recursive_task_level2() { #pragma omp task if(0) { #pragma omp task if(0) { usleep(10000); #pragma omp task usleep(10000); usleep(10000); #pragma omp taskwait usleep(10000); } #pragma omp task // <----- [A] WAITED TASK { #pragma omp task if(0) { usleep(10000); #pragma omp task usleep(10000); usleep(10000); #pragma omp taskwait usleep(10000); } } #pragma omp task if(0) // <----- [B] IMPORTANT ONE { usleep(10000); #pragma omp task usleep(10000); usleep(10000); #pragma omp taskwait // <----- [C] usleep(10000); } #pragma omp taskwait #pragma omp task if(0) { usleep(10000); #pragma omp task usleep(10000); usleep(10000); #pragma omp taskwait usleep(10000); } } } 这个想法是:如果 [B] 存在,那么 [C] 不会等待 [A],因为它不再是子任务;但是,如果 [B] 不存在,则 [C] 等待 [A],即等待 10 毫秒之前。通过在有/没有 [B] 以及有/没有所有其他 #pragma omp task if(0) 的情况下运行此代码来确认此效果。在这种情况下,唯一重要的指令是 [B],而注释 [B] 确实会增加执行时间 10 毫秒(92 毫秒 vs 102 毫秒)。这证明了假设是正确的。随着级别的增加,由于过度同步,并行量会大大减少,并且额外的时间也会在关键路径上累积(当然是指数级的),从而导致巨大的执行开销。

回答 1 投票 0

英特尔 mpicc 链接器错误未定义对 `_mm_idivrem_epi32' 的引用

我正在尝试使用版本11.1 20090511在具有MPICC的集群上编译milcv7.7.8/ks_spectrum的源代码,然后通过“make ks_spectrum_hisq”命令在milcv7.7.8/ks_spectrum中创建源代码...

回答 1 投票 0

R 是否将计算限制在单个核心?可以吗?

已经有一段时间了,我的记忆已经模糊了,但我记得当我在 HPC 上使用 Matlab 时,我必须明确告诉 Matlab 不要使用比我的工作要求更多的线程,否则 Matlab 会吃掉

回答 1 投票 0

Slurm:使用多个节点的核心进行 Python 并行化

这个问题与这个问题有些相似, Slurm:使用多个节点的核心进行 R 并行化 但这是针对Python的。 我有一个可以在 PC 上使用多个内核的 python 程序,它确实...

回答 1 投票 0

dpdk 和 rdma 的根本区别是什么?

我只知道DPDK背后的核心思想是绕过内核网络堆栈,直接在用户空间中访问和处理网络数据包。 RDMA只是在用户空间和网卡之间进行...

回答 1 投票 0

如何在LSF中限制用户访问或为特定用户保留队列?

我目前正在使用 LSF(负载共享设施)集群,需要限制对名为 bhigh 的特定队列的访问。我想确保只有某些用户可以向此队列提交作业...

回答 1 投票 0

Snakemake 远程规则在 PBS 集群中执行脚本之前停止

我有一个snakemake (7.22.0),在启动后就停止了。我有在集群上运行(通过 pbs)并执行外部 Python 脚本的规则。我注意到现在有些规则停滞不前......

回答 1 投票 0

启动一个可更改节点数量的 SBATCH 脚本

我需要测试分布式算法的可扩展性,当在我选择的集群上运行测试时,我希望在单个脚本中动态设置节点数量。 我想要什么...

回答 1 投票 0

在 HPC 系统上使用 Dask 的常见工作流程

我是 Dask 新手。我目前正在由 SLURM 管理的 HPC 中工作,其中包含一些计算节点(执行作业的节点)和登录节点(我通过 SSH 访问该节点以发送 SLURM 作业)。我是...

回答 1 投票 0

如何使用 slurm 运行 NVSHMEM

我正在开始使用 NVSHMEM,我想从一个简单的示例开始,但没有取得太大成功。 #包括 #包括 int main(int argc, char *argv[]) { ...

回答 1 投票 0

使R代码(dada2包)在HPC计算机上多线程运行(通过slurm提交)

我的 R 代码无法在 HPC 集群上并行运行,我不明白为什么。根据dada2文档,如果为multithreaded = #标志指定了一个整数,它将被传递给

回答 1 投票 0

HPC Pack 2019 - 无法连接到在头节点服务器上运行集群管理器的头节点

我使用的是 Windows Server 2019,我激活了 Active Directory 并使另一台装有 Windows 10 的设备成为域成员。 我想在 HPC pack 2019 的帮助下对计算机进行集群,但是,当...

回答 2 投票 0

显示帐户所有成员的使用情况的 SLURM 命令是什么?

我尝试了“sacct -A ----allusers format=User,JobID,CPUTime,MaxRSS,Elapsed” 然而,它显示了该帐户的每个用户的每个作业的资源使用情况,而我...

回答 1 投票 0

snakemake - 在资源指令中指定内存与单独规则的命令行调用

可以在资源指令中按规则定义内存要求 黑桃规则: 输入: 规则.规则.输出 输出: “{样本}/黑桃/contigs.fasta” 资源...

回答 1 投票 0

在隔离的 CPU 上运行 OpenMP 线程

如何在从调度程序中删除核心的 (Linux) 系统上设置 OpenMP 线程的 CPU 关联性(例如使用 isolcpus 引导参数)? 在只有前 12 个核心的系统上

回答 1 投票 0

位置编号系统

我一直在研究浮点数的局限性,并了解了我们的算法由于使用浮点数而遭受的“精度损失”。然后我学会了...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.