Open wzssyqa opened 4 months ago
分析这三个文件,大概能确定涉及调用的函数是mv2_get_time_us
:
进一步分析,是调用了get_cycles
,具体在于补丁在该函数实现提交了对rdcycle
的使用(原软件仓mv2_clock.h#L54没有对risc-v指定架构实现):
而这个mv2_get_time_us
作用是计算us
,也就是说上述提到的获取cycle
是为了计算us
(精度高一些):
为了移除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.
不知道上述方案是否可行?
我觉得可以(除此之外似乎也没有其他办法。
目前已经完成修改,并成功通过OBS构建RPM包,并且在2403 LTS上进行安装。但目前不知道咋测它的运行是否符合期望。 mvapich2:
@wzssyqa @1291945816 建议仅将原补丁中的rdcycle
改为rdtime
好的
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