leenldk 发布的文章

あぁ! 夏を今もう一回
いまが最高!

时间追溯到几个月前,之前就一直想去一次ASL现场,没去上23年的觉得还是有点可惜的,所以就在想今年跑一趟。公布阵容的时候发现 day3 的阵容很想看:闹闹,TRUE老师,minori,ReoNa ,爱喵,asaka,还有南球和 fripside。所以拜托马哥帮忙搞票。后来又追加了北宇治和B小町,阵容就更加无敌了。

- 阅读剩余部分 -

放着女武神final的live 写这一篇游记,女武神真的是神企划,五位都太会唱了,以后会不会再遇到这样的企划了呢?也珍惜跑live的机会吧

这次时隔五年赴日,主要是去看三场 event :

  • 1.26 プロジェクトセカイ COLORFUL LIVE 3rd - Evolve - 東京 1/26 夜公演
  • 1.27 VOCALOCK MANIA ver.2
  • 1.28 リスアニ!LIVE 2024 SUNDAY STAGE

- 阅读剩余部分 -

Kokkos 是 C++ library

hierarchy :
device, host-parallel, host-serial

同步:
Kokkos::fence()

两个问题:

  1. memory space : device / host
  2. memory layout : LayoutLeft / LayoutRight

DualView : 维护在 device memory 上的 Kokkos::View 和其在 host memory 上的 Kokkos::View mirror,同时维护在两个不同 memory space 的 data

  • template argument:DataType, Layout, Device
  • using view_type = Kokkos::DualView<Scalar**, Kokkos::LayoutLeft, Device>

原子操作相关

scatter-add :两个粒子共享邻居,当两个粒子同时更新邻居时可能造成 race
使用 data replication V.S. 使用 atomic operation 解决 race 问题
ScatterView : 在编译时透明地选择处理原子操作方法,对于 CPU 使用 data replication,对于 GPU 使用 atomic operation

`Kokkos::Experimental::contribute(View &dest, Kokkos::Experimental::ScatterView
const &src) 将 ScatterView 的 reduction 结果放回到 dest,可能在 Kokkos::parallel_reduce()` 后调用

检查 Kokkos 属性

判断 layout :

  if (std::is_same<typename decltype(fpair->f)::traits::array_layout, Kokkos::LayoutLeft>::value) {
    printf("array fpair->f is LayoutLeft\n");
  }
  if (std::is_same<typename decltype(fpair->f)::traits::array_layout, Kokkos::LayoutRight>::value) {
    printf("array fpair->f is LayoutRight\n");
  }

获取 stride :

  int strides[2];
  (fpair->x).stride(strides);
  printf("array fpair->x stride : (%d, %d)\n", strides[0], strides[1]);

Access traits

RandomAccess : Kokkos::MemoryTraits<Kokkos::RandomAccess> ,当在 Cuda execution space 中执行时, 如果对于在 CudaSpaceCudaUVMSpace 中的 const View,Kokkos 会使用 texture fetch 访问

Unmanaged View : Kokkos::MemoryTraits<Kokkos::Unmanaged>, 对于一个 raw pointer, Kokkos 不进行 reference counting 和 deallocation