So-net無料ブログ作成
Swiftプログラミング ブログトップ

SIMDライブラリの行列とクォータニオン [Swiftプログラミング]

CPUが持っているベクトルユニットを陽に使うためのSIMDライブラリの一部が、Swift Standard Libraryの中に取り込まれていることをこないだ確認した。アセンブラを見ると作業量が少ない場合は、Standard Libraryにある関数を呼ぶのではなく、ベクトルユニットの命令が直接インライン展開されていることがわかる。ソースは確認してないので実際にどうなのかはわからないけど、@inlinable属性がついていてその通りのコードが出力されているということだろう。

またこのStandard Libraryとは別に
import simd
で、SIMD関連の追加がされることを知った。simdのインポートによって4次元までのベクトルと行列の基本的な演算がいろいろ可能になる。ちょっとだけ前回の追加...

続きを読む


nice!(0)  コメント(0) 

SIMDがStandard Libraryに [Swiftプログラミング]

こないだSwiftの勉強で光線追跡エンジンを書き直してる話を書いた。そこでは勉強なのでベクトル行列演算もベタに自分で書いてたけど、Objective-Cで書いたやつではAccelerate frameworkを呼んでいる。よく見るとSwiftのStandard LibraryにSIMDが入っている。知らなかった。

SIMDはもともとCPUのベクトルユニット使うためのライブラリで、昔は確かAccelerate frameworkの一部だったと思う(一番最初は、懐かしいAltiVecを使い倒すために導入されたと覚えている)。整数や浮動小数点数を4つなり8つなりまとめて、ベクトルユニットが可能な演算を定義してあった。

今見ると、Accelerateからは独立してるようである。Swift Standard Libraryに入れるためにそうなったんだろうか。Metalのshaderにも構造体が流用されているようなので、その関係なんだろうか。Swift Standard LibraryのSIMDドキュメントはかなり簡素でこれだけ見てもなかなかよくわからない。たぶんAccelerateにあったやつのラッパになってるんだろうと思う。僕は昔ならいざ知らず今後SIMDを単独で積極的に使うことはあまりないとは思うんだけど、Swiftの勉強になりそうなので詳しく見てみる....

続きを読む


nice!(0)  コメント(0) 

またSwiftでわからないことが [Swiftプログラミング]

昔Objective-Cで書いたアプリをSwiftに書き直しながらSwiftの勉強をしょぼしょぼ続けている。でも単に逐語的に変換したのではSwiftの勉強にはならないので、Swiftらしい言い回しになるように考えながらやってる。CodeWarriorのC++からObjective-Cに切り替えるときもそうやって苦労した。そんなことしてると全然進まない。慌てることはないとは言うものの、仕事でもmacOSに書くことがある(というかソフトウェアで解決しないといけないことはよくあってそのときは僕にはmacOSしかない)ので、いつまでもObjective-Cというわけにはいかない。悩ましい。

古いのを書き直してる中でまたよくわからないことに出くわした....

続きを読む


nice!(0)  コメント(0) 

protocolでよくわからないことがある [Swiftプログラミング]

まだまともなアプリに使えないでいるけど、Swiftはしょぼしょぼと勉強を続けている。よくわからないことがでてきた....

続きを読む


nice!(0)  コメント(2) 

SwiftのProtocolが面白い [Swiftプログラミング]

Swiftの勉強をちびちび続けている。どうせAppleのことだからSwiftのランタイムがObjective-Cのコードに依存しなくなったら、あっという間にObjective-CをObsoleteにするに違いなくて、その準備をしないといけない。この歳になって新しいことを勉強するのは厳しいけど、いまさら他のプラットフォームに移るなんてことはもっと大変なのでしょうがない。

最初、僕はSwiftを「ようするにCとおさらばしたObjective-Cという感じ」だと思っていたけど、ちゃんと勉強を始めてみると、結構Objecitve-Cとは違っていて面白い、と思うようになってきた。単に文法をすっきりさせて流行りを取り込んだだけ、というわけではないらしい。

なんとなくわかってきたのが、LLVMの解析能力をフルに使えるような工夫がいろいろあるように思えるところ。ARCはその最たるものだし、整数や実数なんか(Cではスカラ型と分類される)までStructの仲間にしておきながら、実行時のメモリや命令のオーバーヘッドはCと変わらない、というのもできる限りコンパイル時点で解析して静的に解決するような言語仕様になっているからだろう。Objective-Cとは真逆の考え方である。

さらにProtocolの位置付けがObjective-Cとはかなり違っている、というのに気がついた。特にSwift Standard Libraryに含まれる基本的なProtocolは数学のあるものによく似ている.....

続きを読む


nice!(0)  コメント(0) 
Swiftプログラミング ブログトップ