在基准游戏中提高谱范数性能的任何技巧

问题描述

我正在尝试实施 spectral-norm 基准测试游戏,以下是我的 Raku 实施。它紧跟 Python 实现 here。它产生正确的结果,但是,它是如此缓慢。例如,当输入为 200 时,Python 运行大约 1.3 秒,而 Raku 在我的笔记本电脑中运行大约 6.4 秒。任何人有任何好的做法来提高其性能?

sub A(\i,\j) {
  1e0 / ((i+j)*(i+j+1e0)/2e0 + i + 1e0)
}

sub Av(@v,\i) {
  [+] ( -> \j { A(i,j) *  @v[j] } for ^@v.elems );
}

sub Atv(@v,\i) {
  [+] ( -> \j { A(j,i) *  @v[j] } for ^@v.elems );
}

my $*SCHEDULER = ThreadPoolScheduler.new(:max_threads(4));
sub AtAv (@v) {
  my @u-promise = (^@v.elems).map(-> \i { start Av(@v,i) });
  my @u = await @u-promise;
  my @w-promise = (^@u.elems).map(-> \i { start Atv(@u,i) });
  await @w-promise;
}

multi sub MAIN(Int $n) {
  my @u := (1e0 xx $n).list;
  my @v;

  for ^10 {
    @v := AtAv(@u);
    @u := AtAv(@v);
  }

  my $a = start { [+] @u [Z*] @v };
  my $b = start { [+] @v [Z*] @v };
  printf "%.9f",($a.result / $b.result).sqrt; 
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...