openeuler-riscv / oerv-team

OERV 实习生工作中心
11 stars 43 forks source link

mvapich2 使用了 rdcycle 指令 #896

Open wzssyqa opened 4 months ago

wzssyqa commented 4 months ago

mvapich2-devel-2.3.6-3.oe2403.riscv64/usr/lib64/mvapich2/lib/libmpi.a mvapich2-2.3.6-3.oe2403.riscv64/usr/lib64/mvapich2/lib/libmpi.so.12.1.1 mvapich2-2.3.6-3.oe2403.riscv64/usr/lib64/mvapich2/bin/mpivars

1291945816 commented 4 months ago

分析这三个文件,大概能确定涉及调用的函数是mv2_get_time_usimage image

进一步分析,是调用了get_cycles,具体在于补丁在该函数实现提交了对rdcycle的使用(原软件仓mv2_clock.h#L54没有对risc-v指定架构实现): image image

而这个mv2_get_time_us 作用是计算us,也就是说上述提到的获取cycle是为了计算us(精度高一些): image

为了移除rdcycle而不影响程序使用,针对risc-v架构使用clock_gettime系统调用实现us的计算,参考PR https://github.com/abseil/abseil-cpp/pull/1644: unscaledcycleclock: remove RISC-V support

std::chrono::steady_clock::now().time_since_epoch() which is basically a wrapper around clock_gettime (CLOCK_MONOTONIC), which in turns use __vdso_clock_gettime(). On RISC-V this VDSO is just a wrapper around RDTIME correctly scaled to use nanoseconds units.

不知道上述方案是否可行?

wzssyqa commented 4 months ago

我觉得可以(除此之外似乎也没有其他办法。

1291945816 commented 4 months ago

目前已经完成修改,并成功通过OBS构建RPM包,并且在2403 LTS上进行安装。但目前不知道咋测它的运行是否符合期望。 mvapich2image

laokz commented 3 weeks ago

@wzssyqa @1291945816 建议仅将原补丁中的rdcycle改为rdtime

1291945816 commented 3 weeks ago

好的