マルチスレッド・プログラミングの性能限界
|
はじめに
|
|
•
|
並列プログラミングでは、シングルスレッドのボトルネックは必ず性能低下につながります。Maple の カーネル は、できるだけこのようなボトルネックを排除できるように最適化されています。しかし、それでもいくつか性能低下につながる問題が残っており、今後のリリースでそのような問題も解決していきたいと考えています。
|
|
|
メモリ管理
|
|
•
|
Maple のガーベジコレクションでは、実行中のスレッドを全て停止させ、単一スレッドでコレクションを行います。この方法は、メモリを大量に消費するコードでは並列計算の性能を大幅に制限するものです。
|
|
|
ミュータブル構造体
|
|
•
|
ミュータブル構造体(rtable、table、グローバルな名前、その他)は、並列でアクセスされた場合ロックされます。
|
|
|
外部コール
|
|
•
|
Maple が外部で定義されたルーチンを呼ぶ場合、そのルーチンはスレッドセーフでないものと見なします。従って、Maple は 1 つのスレッドで外部コード内に入っているとき、他のスレッドが外部ルーチンを呼ぶことを禁止します。このことから、コードが外部ルーチンを並列に呼ぼうとしている場合、実行速度に影響します。自分で外部ルーチンを定義する場合は、define_external の THREAD_SAFE 引数を指定して、Maple にその外部ルーチンがスレッドセーフであることを伝えることができます。こうすることで、Maple がスレッドセーフな外部ルーチンを呼ぶときに他のスレッドが外部コードに入ることを禁止しないようにできます。
|
|
|
インターフェースとの通信
|
|
•
|
メープルスレッドがインターフェースと通信するとき、通信チャネルに対して排他的ロックを取得します。これにより、他のスレッドはインターフェースとの通信をブロックされます。ブロックされたスレッドは、最初のスレッドの通信が終わるまで待機してから再開します。
|
|
|
Download Help Document
Was this information helpful?