34 #ifdef USE_SHORTREAL_KERNELCACHE
125 #ifndef DOXYGEN_SHOULD_SKIP_THIS
127 template <
class T>
struct K_THREAD_PARAM
228 "Index out of Range: idx_a=%d/%d idx_b=%d/%d\n",
240 return get_kernel_matrix<float64_t>();
253 for (int32_t i=0; i!=
num_rhs; i++)
269 for (int32_t j=0; j!=
num_lhs; j++)
289 int64_t total_num = int64_t(m)*n;
292 bool symmetric= (
lhs &&
lhs==
rhs && m==n);
294 SG_DEBUG(
"returning kernel matrix of size %dx%d\n", m, n);
301 K_THREAD_PARAM<T> params;
303 params.result=result;
306 params.total_start=0;
307 params.total_end=total_num;
310 params.symmetric=symmetric;
312 get_kernel_matrix_helper<T>((
void*) ¶ms);
316 pthread_t* threads =
SG_MALLOC(pthread_t, num_threads-1);
317 K_THREAD_PARAM<T>* params =
SG_MALLOC(K_THREAD_PARAM<T>, num_threads);
318 int64_t step= total_num/num_threads;
323 for (t=0; t<num_threads; t++)
325 params[t].kernel =
this;
326 params[t].result = result;
329 params[t].total_start=t*step;
330 params[t].total_end=(t+1)*step;
333 params[t].symmetric=symmetric;
334 params[t].verbose=
false;
336 int code=pthread_create(&threads[t], NULL,
337 CKernel::get_kernel_matrix_helper<T>, (
void*)¶ms[t]);
341 SG_WARNING(
"Thread creation failed (thread %d of %d) "
342 "with error:'%s'\n",t, num_threads, strerror(code));
348 params[t].kernel =
this;
349 params[t].result = result;
352 params[t].total_start=t*step;
353 params[t].total_end=total_num;
356 params[t].symmetric=symmetric;
357 params[t].verbose=
true;
358 get_kernel_matrix_helper<T>(¶ms[t]);
360 for (t=0; t<num_threads; t++)
362 if (pthread_join(threads[t], NULL) != 0)
363 SG_WARNING(
"pthread_join of thread %d/%d failed\n", t, num_threads);
516 #endif //USE_SVMLIGHT
549 int32_t docnum, int32_t *active2dnum,
float64_t *buffer,
550 bool full_line=
false);
575 int32_t totdoc, int32_t num_shrink, int32_t *after);
583 bool regression_hack=
false);
638 #endif //USE_SVMLIGHT
688 int32_t count, int32_t *IDX,
float64_t *weights);
719 int32_t num_vec, int32_t* vec_idx,
float64_t* target,
720 int32_t num_suppvec, int32_t* IDX,
float64_t* alphas,
747 int32_t vector_idx,
float64_t * subkernel_contrib);
822 i_start=(int32_t) (offs/int64_t(n));
834 K_THREAD_PARAM<T>* params= (K_THREAD_PARAM<T>*) p;
835 int32_t i_start=params->start;
836 int32_t i_end=params->end;
838 T* result=params->result;
839 bool symmetric=params->symmetric;
842 bool verbose=params->verbose;
843 int64_t total_start=params->total_start;
844 int64_t total_end=params->total_end;
845 int64_t total=total_start;
847 for (int32_t i=i_start; i<i_end; i++)
854 for (int32_t j=j_start; j<n; j++)
859 if (symmetric && i!=j)
866 if (symmetric && i!=j)
870 k->SG_PROGRESS(total, total_start, total_end);
924 #ifndef DOXYGEN_SHOULD_SKIP_THIS
926 struct KERNEL_CACHE {
932 int32_t *active2totdoc;
934 int32_t *totdoc2active;
955 struct S_KTHREAD_PARAM
964 int32_t* uncached_rows;
966 int32_t num_uncached;
968 uint8_t* needs_computation;
976 #endif // DOXYGEN_SHOULD_SKIP_THIS
979 static void* cache_multiple_kernel_row_helper(
void* p);
982 void kernel_cache_free(int32_t cacheidx);
983 int32_t kernel_cache_malloc();
984 int32_t kernel_cache_free_lru();
986 #endif //USE_SVMLIGHT
996 #endif //USE_SVMLIGHT