brew-fileの各コマンド

BREWFILE: brewでインストールされるアプリのリスト。デフォルトで/usr/local/Library/Brewfileにある。

こんなときは...

新しいアプリを入れるとき

brew file install <Application>

OR

brew file brew cask install <Application>

アップデートをチェックするとき

brew file update && brew file cask_upgrade

現在のアプリ情報をもとに、BREWFILEを初期化したいとき

brew file init

各コマンドの意味

brew file install

パッケージをインストールする。 --preupdateオプションを付けると、インストール前にbrew updateする。

brew file brew

通常のbrewコマンドを実行した後、BREWFILEをアップデートする

brew file init / -i / --init

現在のインストール済みパッケージをもとにBREWFILEを初期化し、アップデートする。

brew file set_repo / -s / --set_repo

BREWFILEレポジトリGitHubなどにセットする。 例: brew file set_repo -r <repository> <repository>にはgithubレポジトリ名を書く(e.g. joker8phoenix/Brewfile)。

brew file pull

レポジトリBREWFILEを落としてくる。

brew file push

レポジトリに、ローカルのBREWFILEをアップする。

brew file clean / -c / --clean

リストにないインストールパッケージ、リストにないタップ、キャッシュを削除する。 より強くクリーンアップしたい場合は、-Cオプションをつける。

brew file update / -u / --update

以下の一連を実行する。 1. brew file pull: BREWFILEを落としてくる。 2. brew file install: リストから不足分をインストール。 3. brew update/upgrade: パッケージのアップデート 4. brew file init: ローカルのインストールパッケージ分を足してリストを初期化。 5. brew file push: リストをレポジトリにアップ 6. brew file clean -C: クリーンアップ

brew file edit / -e / --edit

ローカルのBREWFILEを編集する。

brew file casklist

Applications, /Applications/Utilities, ~/Applications/にインストールされているアプリを、Caskに存在しているかどうかでチェックして、リスト表示する。 同時に~/にリストを保存する。

brew file cask_upgrade

caskアプリをアップグレード。 -Cオプションを付けると、古いバージョンを削除する。

参考

rcmdnk/homebrew-file

MacのRの行列演算を高速化

1. 背景

Mac限定の方法だが、Appleは各デバイスごとに数値計算アルゴリズムを最適化しており、accelerate.framework(vecLib)といった名前で標準装備されている。

BLASLAPACKなどが実装されている。

Rへの適用方法は、BLASシンボリックリンクを変更するだけだ。

2. 方法

ターミナル上で

cd /Library/Frameworks/R.framework/Resources/lib
ln -sf /System/Library/Frameworks/Accelerate.framework/Versions/Current/Frameworks/vecLib.framework/Versions/Current/libBLAS.dylib libRblas.dylib

とすることで適用される。 Rstudioでも適用される。

3. テスト

これを用いて、行列演算テストを行う。 以下、結果を記載する。

################################################
### MacBook Pro (Retina, 15-inch, Late 2013) ###
################################################
system.time(solve(matrix(runif(3000*3000),3000,3000)))['elapsed']
#       elapsed 
# 設定前  48.756 
# 設定後    1.25 

set.seed(0)
T <- 5
N <- 2000
A <- matrix(rnorm(N * N), N, N)

## Matrix multiplication
t1 <- sapply(1 : T, function(t) system.time(A %*% A)['elapsed'])
 
## Matrix inversion
t2 <- sapply(1 : T, function(t) system.time(solve(A))['elapsed'])
 
## Eigenvalues/vectors
t3 <- sapply(1 : T, function(t) system.time(eigen(A))['elapsed'])

## Linear regression
D <- as.data.frame(A)
t4 <- sapply(1 : T, function(t) system.time(lm(V1 ~ ., data=D))['elapsed'])

t1
#       elapsed elapsed elapsed elapsed elapsed 
# 設定前   4.822   4.801   4.929   4.821   4.921 
# 設定後   0.121   0.137   0.130   0.131   0.125 

t2
#       elapsed elapsed elapsed elapsed elapsed 
# 設定前  14.338  14.312  14.399  14.665  14.289 
# 設定後   0.311   0.280   0.279   0.284   0.297 
t3
#       elapsed elapsed elapsed elapsed elapsed 
# 設定前  38.313  37.788  37.910  37.739  38.073
# 設定後   6.427   6.360   6.359   6.426   6.595 
t4
#       elapsed elapsed elapsed elapsed elapsed 
# 設定前   4.378   4.256   4.218   4.189   4.220 
# 設定後   2.490   2.410   2.380   2.419   2.384 

かなり高速化されていることが分かる。

参考

Accelerate(7) Mac OS X Manual Page https://developer.apple.com/library/mac/documentation/Darwin/Reference/Manpages/man7/Accelerate.7.html