float train_networks(network *nets, int n, data d, int interval) { int i; int batch = nets[0].batch; int subdivisions = nets[0].subdivisions; assert(batch * subdivisions * n == d.X.rows); pthread_t *threads = (pthread_t *) calloc(n, sizeof(pthread_t)); float *errors = (float *) calloc(n, sizeof(float)); float sum = 0; for(i = 0; i < n; ++i){ data p = get_data_part(d, i, n); threads[i] = train_network_in_thread(nets[i], p, errors + i); } for(i = 0; i < n; ++i){ pthread_join(threads[i], 0); //printf("%f\n", errors[i]); sum += errors[i]; } //cudaDeviceSynchronize(); if (get_current_batch(nets[0]) % interval == 0) { printf("Syncing... "); fflush(stdout); sync_nets(nets, n, interval); printf("Done!\n"); } //cudaDeviceSynchronize(); free(threads); free(errors); return (float)sum/(n); }
const gchar * get_data_f (xml_dayf *data, forecast type) { gchar *p, *str = NULL; if (data) { switch (type & 0x0F00) { case ITEMS: switch(type) { case WDAY: str = data->day; break; case TEMP_MIN: str = data->low; break; case TEMP_MAX: str = data->hi; break; default: str = g_strdup("-"); break; } break; case NPART: str = get_data_part(data->part[1], type); break; case DPART: str = get_data_part(data->part[0], type); break; } } if (!str) str = "-"; p = copy_buffer(str); //DBG ("value: %s", p); return p; }