Excelでいくつかの列を自動入力しています(一度に1つずつ)。これらの列は、ExcelDnaで作成したUDFを使用しています。taskmanagerを使用すると、コアの半分だけが使用されていることに気付きました。Excelの設定は、「このコンピューターのすべてのプロセッサーを使用する」ように設定されています。そのため、コアの半分しか使用されていない理由がわかりません。考え?
1 に答える
このページには、Excel 2007 以降でのマルチプロセッシングに関する洞察に満ちた説明が含まれています 。
*参照:「マルチスレッド計算」「一部の Excel 機能は、マルチスレッド計算を使用しません。たとえば、データ テーブル計算 (ただし、テーブルへの構造化参照は MTC を使用します)。ユーザー定義関数 (ただし、XLL 関数はマルチスレッド対応にすることができます。XLM関数. format2 または address オプションを使用する INDIRECT、CELL 関数. ピボットテーブルまたはキューブを参照する GETPIVOTDATA およびその他の関数. Range.Calculate および Range.CalculateRowMajorOrder. 循環参照ループ内のセル. "
「自動入力」について具体的に説明していないので、並行性の観点から見てみましょう。憶測の部分もあるかもしれませんがご容赦ください..
一部の関数は、プロセッサ間で簡単に分割できない「順序どおりの」タスクを必要とします。fill がその 1 つだと思われるかもしれません。(一部のモードでは順次操作が必要です。例: ステッピング 1、1.2、1.4 など)。この例では、プロセッサ 2 は、新しい/カスタムの独立した計算を実行せずに、ページの途中から開始することはできません。特別な機能を設計する必要があります。おそらく彼らは、この種のシーン用にコーディングしないことに決めたのでしょう。数式では、数式ツリーを作成している可能性があるため、これが可能であるとは思えません。
他の操作は、数式ツリーに基づいて独立しています (リンクを参照)。これは、Excel が複雑な数式ツリーをマルチプロセスしないことを強く意味します。したがって、多数の数式が接続されている場合、それら (そのツリー) は 1 つのプロセッサによって順番にのみ処理されます。
確かに、これらの状況にはあらゆる種類の複雑な回避策があります..(おそらくコンパイラ、SQLサーバーなどに似ています)が、上記のドキュメントは、Microsoftが独立したタスクのみを合理化するように設計したことを強く示唆しています.