メモ
・サーバー側はMBaaS(Mobile Backend as a Service)というのを利用するのがよさそう。parseというのがよさそう。
https://qiita.com/kazu0620/items/20ea8cd1c3a2e3bb5574
・parseについて
https://dev.classmethod.jp/cloud/parse-introduction-1/
(x_train, t_train), (x_test, t_test) = load_mnist(flatten=True, normalize=False)・x_trainとt_trainは訓練用の画像(の配列)と、正解を表す数字(の配列)が入っていて、
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace TestParallel { class Program { //------------------------------- //ここはテストコードを呼び出しているだけなので重要でないです。 //------------------------------- static void Main(string[] args) { // 時間測定用 System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch(); sw.Start(); // 本体 double pi = SerialPi(); Console.WriteLine("--- シリアル ---"); Console.WriteLine("答え:" + pi.ToString("R")); //時間測定用 sw.Stop(); Console.WriteLine("時間:"+ sw.Elapsed); sw.Restart(); // 本体 double npi = NaiveParallelPi(); Console.WriteLine("--- パラレル( よくない ) ---"); Console.WriteLine("答え:" + npi.ToString("R")); //時間測定用 sw.Stop(); Console.WriteLine("時間:" + sw.Elapsed); sw.Restart(); // 本体 double ppi = ParallelPi(); Console.WriteLine("--- パラレル( よい )---"); Console.WriteLine("答え:" + ppi.ToString("R")); //時間測定用 sw.Stop(); Console.WriteLine("時間:" + sw.Elapsed); // getchar Console.ReadKey(); } const long NUM_STEPS = 500000000; //------------------------------- //シリアルで計算 (単純なfor文) //------------------------------- static double SerialPi() { double sum = 0.0; double step = 1.0 / (double)NUM_STEPS; for (long i = 0; i < NUM_STEPS; i++) { double x = (i + 0.5) * step; double partial = 4.0 / (1.0 + x * x); sum += partial; } return step * sum; } //------------------------------- //パラレルで計算 (よくない) //------------------------------- static double NaiveParallelPi() { double sum = 0.0; double step = 1.0 / (double)NUM_STEPS; object obj = new object(); Parallel.For(0, NUM_STEPS, i => { double x = (i + 0.5) * step; double partial = 4.0 / (1.0 + x * x); lock (obj) sum += partial; }); return step * sum; } //------------------------------- //パラレルで計算 (よい) //------------------------------- static double ParallelPi() { double sum = 0.0; double step = 1.0 / (double)NUM_STEPS; object obj = new object(); Parallel.For(0, NUM_STEPS, () => 0.0, (i, state, partial) => { double x = (i + 0.5) * step; return partial + 4.0 / (1.0 + x * x); }, partial => { lock (obj) sum += partial; }); return step * sum; } } }