ベースRは計算の高速化にBLASを使用することが知られています。私のコードでは、基底Rからそれらの関数を使いたいし、BLASを使うパッケージかもしれません。 BLASを正確に使用するR関数のリストを取得するにはどうすればよいですか?または、私のコードで使用したい機能がBLAS(ATLAS、LAPACKなど)を使用しているかどうかをどうやって確認できますか?どのR関数がBLAS(ATLAS、LAPACKなど)に基づいていますか?
答えて
私はこれについて専門家ではないので、これは完全な答えではありません。しかし、多分あなたや他の誰かがこれらの出発いくつかのアイデアを取ると、それからソリューションを作成することができます(あなたがしていることを投稿することができれば素晴らしいだろう!)
それらが定義されている場合はRの機能を点検C
でのみ機能Cコードを呼び出すBLASを使用するための疑いがあります。したがって、これらの機能を見つけることが第一歩になります。
capture.output(print(FUN))
ので.Internal
の観点で定義されているすべての機能を一覧表示するにはあなたの文字列ベクトル(1行につき1つの要素)としての機能の定義を与え、.Primitive
など次のようにします。
# Set this to the package you want to screen
envName <- 'base'
# Get the environment for the given name
env <- pos.to.env(which(search() == paste0('package:',envName)))
# Return TRUE if `string` contains `what`
contains <- function(string, what){
length(grep(what, string, fixed = TRUE)) != 0
}
# Build up a matrix which contains true if an element is defined in terms
# of the following functions which indicate calls to C code
signalWords <- c('.Primitive', '.Internal', '.External'
, '.Call' , '.C' , '.Fortran')
envElements <- ls(envir = env)
funTraits <- matrix(FALSE, nrow = length(envElements), ncol = length(signalWords),
dimnames = list(envElements, signalWords))
# Fill up the values of the matrix by reading each elements' definition
for (elementName in envElements){
element <- get(elementName, envir = env)
if(!is.function(element)){
next
}
fun.definition <- capture.output(print(element))
for(s in signalWords){
if(contains(fun.definition, s)){
funTraits[elementName, s] <- TRUE
}
}
}
とき関数は次のようになり、外部のC関数(.Primitive
関数とは対照的に)呼び出し:
dnorm
## function (x, mean = 0, sd = 1, log = FALSE)
## .External(C_dnorm, x, mean, sd, log)
## <bytecode: 0x1b1eebfc>
## <environment: namespace:stats>
そして.External
によって呼び出されたオブジェクトを追い詰めます。対応するC関数の名前を持ちます。それを見つけるためにPACKAGE:::OBJECT$name
を使用します。
stats:::C_dnorm$name
## [1] "dnorm"
はさらに参照:コンパイルされた関数のソースコードの入手先についてHow can I view the source code for a function?、それはまたの情報、およびHow to see the source code of R .Internal or .Primitive function?
最後に、あなたは何とかCコードを選別する必要がありますし、それはBLASルーチンを求めて、すべての機能... BLAS関数は
呼び出された場合は、BLASの名前を持っていますが、ちょうどそれをログに記録するDLLを開発する可能性がログに記録
LD_PRELOAD何か実際のBLASルーチンにコールを転送する前にどこから呼び出されたのかを確認します。LD_PRELOAD
BLASではなく、このライブラリをロードするためにUNIX環境変数を使用できます。これは、動的にリンクされたライブラリとしてBLASをロードするためにRがコンパイルされた場合にのみ機能します。
https://blog.netspi.com/function-hooking-part-i-hooking-shared-library-function-calls-in-linux/
も参照してください:あなたはベクトル化操作によって、あなたの計算を行った場合Why can R be linked to a shared BLAS later even if it was built with `--with-blas = lblas`?
- 1. BLASとLAPACKとATLASとの関係
- 2. BLAS&LAPACKのBazelビルドルール
- 3. コンパイルに必要なBLASとLAPACKライブラリ
- 4. BLAS/LAPACKガウス消去のルーチン
- 5. BLASとATLASが既にインストールされているかどうかを確認する方法
- 6. libopenblas:混合BLAS、LAPACK、アトラス、
- 7. rmsm BLAS/LAPACKルーチン 'DGEBAL'がエラーコード-3
- 8. CLAPACK、BLAS、LAPACKをmexファイルで使用するにはどうしたらいいですか?
- 9. lapackとblasをC++で呼び出す
- 10. R関数は列の値に基づいて繰り返されます
- 11. 列の値に基づいて複数のモデルを作成する関数R
- 12. 典型的なFortranプログラムのmacportsからのATLAS/Lapackの使用
- 13. CirrOSはどのディストリビューションに基づいていますか?
- 14. solusOs - どのLinuxディストリビューションに基づいていますか?
- 15. IP(Internet Protocol)はどのプロトコルに基づいていますか?
- 16. 取得XTSは、行列演算に基づいてRの関数からオブジェクト
- 17. パターンマッチンに基づいて引数を渡します。R
- 18. numpy.distutils.system_info.NotFoundError:見つかりませLAPACK/BLAS資源:エラーscipyのダウンロード
- 19. Enum値に基づいて関数を使用しますか?
- 20. CYGWINを使ってLAPACKとBLASをインストールするには?
- 21. 複数のBLAS/LAPACKライブラリの一般化
- 22. Rデータフレームの値に基づいてフィルタリング
- 23. 選択値に基づいて関数に変数を渡すにはどうすればよいですか?
- 24. sqlite - コア関数に基づいてユーザー関数を作成できますか?
- 25. IF関数に基づいて配列を作成するにはどうすればいいですか?
- 26. 関数の引数に基づいて変数を取得しますか?
- 27. Kotlinにガベージコレクタがありますか?もしそうなら、どのアルゴリズムに基づいていますか?
- 28. 入力に基づいて異なるタイプを返す関数
- 29. lapack/blas/openblasソースからの適切なインストール - システムライブラリを新しいライブラリに置き換えます。
- 30. R:どのように私は、条件付きのDateTimeデータに基づいて
、私はあなたがBLASルーチンを使用してのかなり良いチャンスだと思います。 [The R inferno、第3章「ベクトル化に失敗する」](http://www.burns-stat.com/pages/Tutor/R_inferno.pdf)と[ベクター化に関するSOの質問](https://あなたの特定の問題を見つけるためには、stackoverflow.com/questions/tagged/vectorization+r)。 – akraf