「アセンブラー言語」 (GNU をアセンブラーとして使用する x86 アーキテクチャー上の Linux) を学習している間、あははの瞬間の 1 つは、システム コールを使用する可能性でした。これらのシステム コールは非常に便利で、プログラムがユーザー空間で実行されるときに必要になることもあります。
ただし、システム コールは割り込み (およびもちろんシステム コール) を必要とするため、パフォーマンスの点でかなり高価です。つまり、ユーザー空間で現在アクティブなプログラムからカーネル空間で実行されているシステムへのコンテキスト スイッチを行う必要があります。
私が言いたいことは次のとおりです。現在、(大学のプロジェクト用に) コンパイラを実装していますが、追加したい機能の 1 つは、コンパイルされたプログラムのパフォーマンスを向上させるためのマルチスレッド コードのサポートです。 . マルチスレッド コードの一部はコンパイラ自体によって自動的に生成されるため、これにより、マルチスレッド コードのごく一部が含まれることがほぼ保証されます。パフォーマンスを向上させるには、スレッドを使用することでこれが実現することを確認する必要があります。
ただし、スレッドを使用するには、システム コールと必要な割り込みを行わなければならないのではないかと心配しています。したがって、非常に小さな (自動生成された) スレッドは、これらのシステム コールを実行するのにかかる時間の影響を大きく受け、パフォーマンスの低下につながる可能性さえあります...
したがって、私の質問は2つあります(その下に追加のボーナス質問があります):
- システムコールを必要とせずに、一度に複数のコアで同時に複数のスレッドを実行できるアセンブラコードを書くことは可能ですか?
- 本当に小さいスレッド (スレッドの合計実行時間のように小さい)、パフォーマンスの低下、またはまったく努力する価値がない場合、パフォーマンスは向上しますか?
私の推測では、マルチスレッド アセンブラ コードはシステム コールなしでは実現できないと思います。その場合でも、可能な限り効率的にスレッドを実装するための提案 (またはさらに良い: いくつかの実際のコード) はありますか?