1

私は、基本的に約500 000シリーズにロジスティック回帰を適用するという大きな計算作業を行っています。作業が重いので、125000系の4チャンクに分けて作業しました。

ハイパー スレッディングを備えた 2 コア プロセッサを使用していますが、結果は非常に高速です。

しかし、これについて質問があります。チャンクの数は、コア (またはハイパー スレッディングの場合はスレッド) の数と同じにする必要がありますか? 私はpmapがどのように機能するかわかりません.incanter confを読みましたが、その男には2つのコアがあり、作業を4つのスレッドに分割しているため、まだわかりません.

いずれにせよ、これは非常に重い作業です (pmap を使用すると 5 時間以上、使用しない場合はさらに多くの時間がかかります)。大幅な最適化は大歓迎です。

ありがとう

4

2 に答える 2

2

clojure.core.reducers独自のビルドを作成する前に確認してください。

個人の能力開発のためにこれを熟考することは重要なプロジェクトです。なぜなら、この問題が実際にどれほど難しいかについての理解と認識が構築されるからです。優れたソリューションには、たとえば、アイドル状態のプロセッサがビジー状態のプロセッサから作業を奪う「ワーク スティーリング」などの概念が含まれます。

実生活では、clojure の組み込み reducers に直行するが最善です。不変のベクトルを入力として使用している場合、これは一見簡単に実行でき、バッチ サイズと作業割り当てを処理するために Java のfork/joinフレームワークを自動的に管理します。また、このブログ投稿には多くの背景が記載されています。

次に、トランスデューサを使用して、生成される中間データ構造の量を減らすことを検討することができます。

于 2016-02-04T19:50:42.603 に答える
0

見るヒントc.c.reducersは良いものです。ジョブの結果が順不同で返されても問題ない場合は、Tesserもチェックしてください。これにより、多くの柔軟性とパワーを備えたきちんとした API が提供され、複数のスレッドまたは Hadoop でジョブを喜んで実行できます。必要に応じてクラスタ化します。

于 2016-02-04T21:17:16.303 に答える