光学薄膜設計ソフトの設計 その2 計算対象とついでの勉強 [考え中 - 光学薄膜設計]
薄膜光学計算エンジンのもうちょっと具体的な中身について。
基本的な計算式は簡単なので、その展開はいいとして、考え方やノーテーションはこの分野の定番のH.A.Macleodさんの「光学薄膜」(出版元の日刊工業新聞社にページが無かった。絶版ですか。amazonでも品切れみたいやし。まあちょっと古いからなあ)に従うことにする。この際なのでこの本をもうちょっとまじめに勉強しながら進める。この本、ものすごく高い(定価12,000円)ので僕は持ってないけど、仙台市図書館にはあった。さっそく貸し出すと前に借りた人の貸出票がページに挟まっていて日付が06/11/17。ラッキー、もうほとんど僕の本やね、この貸出票が一人前の人だとしての話やけど。
古典的な薄膜の計算はこの本一冊で十分。この本に従って、計算対象は
- 等方で均一な誘電体膜
- 等方で均一な吸収を持つ膜
の積層膜の
- 振幅反射率
- 振幅透過率
- そこから反射率と透過率と位相(偏光)
がまず計算できることを目指す。その上で
- 復屈折性材料の膜
- 不均一膜
- ラフネス層
まで含めてできるといいね。
ところで今回プログラミングの勉強もかねて、これまでやったことのないマルチコアが使える計算ができるようにしたい。僕が今使っている一番安いiMacでさえ2コアなので、特に最適化計算ではこれが使いこなせるようにしたい。そのためには
- threadを複数生成して計算を割り振る
- thread safeな計算
- threadからの結果の収集
ができなければいけない。どんな単位で計算を分けるか、が重要。これを考慮しながら具体的にthread safeな実装はどこを注意すればいいか、どのような単位で計算すれば簡単でかつthread safeな実装になるかを考えて行くことにする。
ちなみにコアをいくつ持っているか、はNSProcessInfoでわかる。例えば
id procinfo = [NSProcessInfo processInfo]; NSLog(@"number of cores = %d\n", [procinfo processorCount]); NSLog(@"number of active cores = %d\n", [procinfo activeProcessorCount]); NSLog(@"physical memory = %x\n", [procinfo physicalMemory]); NSLog(@"OS VersionString = %@\n", [procinfo operatingSystemVersionString]);
を実行すると、
[Session started at 2008-02-21 20:45:48 +0900.] 2008-02-21 20:45:48.774 Cores[386:10b] number of cores = 2 2008-02-21 20:45:48.776 Cores[386:10b] number of active cores = 2 2008-02-21 20:45:48.776 Cores[386:10b] physical memory = 80000000 2008-02-21 20:45:48.781 Cores[386:10b] OS VersionString = Version 10.5.2 (Build 9C31)
などと帰ってくる。これ、今使っているiMacでの出力。
今回の場合、コアの数より多い計算threadを作ってもオーバーヘッド分が無駄になるだけでメリットは無いので、計算を始める前にコアの数を確認してそれに従ってthreadを生成するのが当たり前のやり方でしょう。
ところで、メソッドのprocessorCountとactiveProcessorCountの違いがわからない。deactiveなコアってあるの?
コメント 0