問題タブ [snowfall]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
r - 並列実行時のグローバル環境への書き込み
セル、値、座標の data.frame があります。それは地球環境に存在します。
私のカスタム関数は、個々のセルを計算するのにほぼ 1 秒かかるため (そして計算するセルが数万あるため)、既に値を持つセルの計算を複製したくありません。私の次の解決策はそれを回避しようとします。各セルは独立して計算でき、並列実行を叫ぶことができます。
私の関数が実際に行うことは、指定されたセル番号の値があるかどうかを確認し、それが NA の場合、それを計算して NA の代わりに挿入することです。
apply ファミリーの関数を使用して魔法の関数を実行できます (結果はvalue
対応するです)。 内から、問題なく読み書きできます(グローバル環境にあります)。cell
apply
cont.values
これを ( を使用して) 並行して実行したいのですがsnowfall
、個々のコアからこの変数を読み書きすることができません。
質問: 関数を並列で実行するときに、ワーカー (コア) 内からグローバル環境に存在する動的変数を読み書きできるソリューションはどれですか。これを行うためのより良いアプローチはありますか?
r - Rでの並列処理のためにAWSで雪(および降雪)を使用する
以前の同様のSOの質問に関連して、並列コンピューティングにAWSでsnow/snowfallを使用してみました。
私がしたことは:
- 関数では、次のようなパラメータ
sfInit()
にパブリックDNSを提供しましたsocketHosts
sfInit(parallel=TRUE,socketHosts =list("ec2-00-00-00-000.compute-1.amazonaws.com"))
- 返されたエラーは
Permission denied (publickey)
- 次に、http://www.imbi.uni-freiburg.de/parallel/の「PasswordlessSecure Shell(SSH)login」セクションの指示に従いました(正しく推測します!)。
- AWSで作成した.pemファイルのコンテンツを、マスターAWSインスタンスから、またマスターAWSインスタンスにも接続するAWSインスタンスの〜/ .ssh/authorized_keysにキャットします。
私が見逃しているものはありますか?ユーザーがAWSでの雪の使用に関する経験を共有できれば非常にありがたいです。
ご提案ありがとうございます。
更新:私は自分の特定の問題に対して見つけた解決策を更新したかっただけです:
- StarClusterを使用してAWSクラスターをセットアップしました:StarCluster
snowfall
クラスターのすべてのノードにインストールされたパッケージ- マスターノードから次のコマンドを発行しました
hostslist <- list("ec2-xxx-xx-xxx-xxx.compute-1.amazonaws.com","ec2-xx-xx-xxx-xxx.compute-1.amazonaws.com")
sfInit(parallel=TRUE, cpus=2, type="SOCK",socketHosts=hostslist)
l <- sfLapply(1:2,function(x)system("ifconfig",intern=T))
lapply(l,function(x)x[2])
sfStop()
- IP情報により、AWSノードが利用されていることが確認されました
iphone - opengl と cocos2D なしでパーティクルを作成します。降雪アプリケーション
さて、openGL や cocs2D を使用せずに (snow ) のようなパーティクルを作成したかったのですが、このサンプル コードが呼び出されsnowfall
、このコードには次のコードが含まれていることがわかりました。
このコードがパフォーマンスやメモリに悪影響を与える可能性があるかどうか (おそらくタイマーを使用するため) を知りたかったのですが、お勧めできない場合は、iPhone で使用できる CAReplicator について聞いたことがありますが、CAReplicatorDemo は Apple のドキュメントで Mac でのみ機能します。 :/ 私の英語で申し訳ありませんが、私はフランス人です :/
r - 降雪時にメッセージを出力するには?
Windows 7 で Snowfall パッケージを使用してシミュレーション研究を行っています。
進行状況を監視するために、メインの R コンソールに 10 回の実行ごとにメッセージを出力したいのですが、そうできません。すなわち。何も印刷されない
どんな助けでも大歓迎です。
r - クラスター内の文字列名でライブラリを初期化する方法は?
文字列として表される名前でクラスタ内のライブラリを初期化したいと考えています。
このコードは正常に動作します:
そして、このコードはエラーを生成します:4 nodes produced errors; first error: object 'expr' not found
したがって、を含む式ではなく、sfClusterEval
評価してみてください。本体で使用する関数にどのタイプの式を渡す必要があるのか わかりませんexpr
expr
sfClusterEval
substitute
この質問は簡単に思えますが、解決できず、誰かのアドバイスが必要です。
アップデート:
より単純な例に関するさらなる調査の詳細。真実は近いと感じます。このコードは正常に動作します
しかし、この呼び出しではエラーが発生します。4 つのノードでエラーが発生しました。最初のエラー: オブジェクト 'lib' が見つかりません
答え:
変数lib
は事前にクラスターにエクスポートする必要があります。その後、それを削除することができます。
最初のアイデアを提供してくれた Richie に感謝します。
r - 「apply( )」に渡されたベクトルの要素ごとに個別の行列を返す
少し調べてみましたが、この問題に対するエレガントな解決策はまだ見つかりません。
「snowfall」パッケージを使用して、複数のコアでシミュレーションを実行しようとしています。これは、sfApply()、sfSapply、または sfLapply() を使用します。「snowfall」を使用する際の複雑さを回避するために、ここでは単純化して、並列の apply()、sapply()、および lapply() 関数について考えてみましょう。
生態学的シミュレーションがあり、その結果はマトリックスとして返されます。簡単に言うと、複数のパッチに広がる個人に対するさまざまなサイズと強度の妨害イベントの影響をシミュレートしています。たとえば、私のシミュレーションの出力は次のようなものです
シミュレーション実行からの母集団サイズの 95% 信頼区間の下限と上限だけでなく、平均値もあります。各実行には、擾乱イベントによって影響を受ける長さ (DisturbancePatchesPercent) の数のパッチがあります。1 回の実行では、擾乱の強度は均一です。
適用機能を使用して、複数の異なる外乱強度の下でこのシミュレーションを実行しようとしています。そのため、シミュレーションを関数に入れ、その関数にシミュレートしたい外乱強度のベクトルを渡します。問題は、各擾乱強度の結果行列 (上でシミュレートしたもの) を返す関数を取得する方法がわからないことです。作成される複数のマトリックスの配列を作成する方法を見つけられることを望んでいましたが、それを理解することに失敗しました
何か案は??
一般的な概念を理解するために私が試した再現可能な例を以下に示します。この模擬例に非常に近いものを作成できましたが、最善を尽くして、さまざまなサンプル マトリックスのリストを作成しました。しかし、リスト内の 4 つの要素はすべて同じ名前であるため、個別にアクセスする方法がわかりません。
r - 並列プロセスの通信: オプションは何ですか?
R ルーチンの並列化をもう少し深く掘り下げようとしています。
一連の「ワーカー」プロセスの通信に関する私のオプションは何ですか
- それぞれの労働者間の通信?
- 「マスター」プロセスとの労働者のコミュニケーション?
私の知る限り、マスタープロセスとすべてのワーカープロセスの両方がアクセスできる「共有環境/共有メモリ」などはありませんよね?
これまでに思いついた最良のアイデアは、JSON ドキュメントの読み取りとハード ドライブへの書き込みに基づいて通信を行うことです。それはおそらく悪い考えです;-) JSONはソフトウェア間の通信によく使用されるように見えるため、ファイルよりも選択.json
した.Rdata
ので、その「標準」を使用することにしました。
より良いオプションについて学ぶことを楽しみにしています!
参考までに: 私は通常、基本パッケージのparallelと contrib パッケージのsnowfallの関数に基づいて並列化し、主に関数に依存しsfClusterApplyLB()
て仕事を完了させています。
編集
私は Windows で実行していると述べるべきでしたが、Linux ベースの回答/ヒントも大歓迎です!
r - 複数のコアで異なるプログラムを実行する
うまくいけば、これは私が答えを見落とした単純な質問ですが、今朝の私の検索では、私は無益でした。
コンピューターに4つのコアがあり、複数のコアを介してRで異なるプログラム(ループ)を同時に実行したいと考えています。4つのRセッションを開くと、それらは自動的に異なるコアに配置されますか、それとも降雪でこれを行う方法を見つける必要がありますか?
以前はsnowfallを使用して同じプログラムを実行しましたが、以前は値が異なりました。しかし、降雪により、異なるコアで完全に異なるプログラムを実行できるようになりますか?各シミュレーションループを異なる関数(つまり、func1、func2、func3、func4)に設定してから、降雪によって各関数を異なるコアに割り当てることはできますか?
助けてくれてありがとう
r - Snowfall を使用した R 並列計算 - 別々のワーカーからのファイルへの書き込み
並列計算に Snowfall 1.84 パッケージを使用しています。計算中に各ワーカーがデータを個別のファイルに書き込むようにしたいと考えています。これは可能ですか?もしそうならどのように?
sfInit( parallel=TRUE, ...,type="SOCK" ) などの「SOCK」タイプの接続を使用しており、コードをプラットフォームに依存しない (unix/windows) にしたいと考えています。
sfInit で「slaveOutfile」オプションを使用して、ログ ファイルを書き込むファイルを定義できることはわかっています。ただし、これはデバッグ目的のためのものであり、すべてのスレーブ/ワーカーは同じファイルを使用する必要があります。各ワーカーに独自の出力ファイルが必要です!!!
書き込む必要があるデータは大きなデータフレームであり、単純な診断メッセージではありません。これらのデータフレームはスレーブによって出力される必要があり、マスター プロセスに送り返すことができませんでした。誰も私がこれを成し遂げることができる方法を知っていますか?
ありがとう