SoA should allow arbitrary initialization of matrix if it isn't elementwise accessed thereafter

オープン
#1,503 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

まだ誰も着手していません。

評価

難易度
5/5
見積もり時間
1週間以上
初心者へのやさしさ
35/100
issue の種類
機能追加
明瞭さ
おおむね明確
活発さ
停滞
技術スタック
cpp, ocaml

調査の方向性

ファイル、テスト、エントリーポイントは指定されていません。まずメモリパターンの最適化と、その要素単位アクセスのヒューリスティックを追跡し、次に行列の初期化がどのようにコード生成されるかを調べてください。要素単位ではない行列構築が、後続の要素単位アクセスがない場合に、要求された SoA 表現を使用できるようになれば完了です。ループを使用する構築も含まれます。

索引モデルが issue の本文から書いたものです。

説明

optimization

Currently, the memory pattern optimization relies on all functions being inlined and then searches for elementwise accesses as its heuristic to disable function promotion.

It would be really nice if we instead allowed things like

transformed parameters {
  matrix[N,M] foo = some_function(N, M, other_arguments) + possibly_other_expressions;
}

to be code generated to something like auto foo = to_soa(some_function(...) ...) when there are no further elementwise accesses of foo, even if the code in some_function does use for-loops to construct it. This is sort of on-the-way to something like a comprehension, but I believe it is implementable right now for many models.

主要言語
OCaml
スター
162
フォーク
60
平均マージ
2日 22時間
マージ済み PR(30日)
14

環境構築

  • Dockerfile・Docker Compose ファイルなし
  • プルリクエストのテンプレートあり
  • コントリビューションガイドなし

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

stan-dev/stanc3 のほかの issue

stan-dev/stanc3 の issue をすべて見る

似ている issue

Compilers の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。