Exemplo n.º 1
0
Arquivo: mmc.c Projeto: bokdong2/vane
/**
 * \brief Allocate size bytes.
 *
 * \param size Number of bytes.
 *
 * \return pointer to allocated memory block.
 */
void *m4ri_mmc_malloc(size_t size) {

#ifdef __M4RI_ENABLE_MMC
	void *ret = NULL;

#if __M4RI_HAVE_OPENMP
#pragma omp critical (mmc)
	{
#endif
		mmb_t *mm = m4ri_mmc_cache;
		if (size <= __M4RI_MMC_THRESHOLD) {
			for (int i = 0; i < __M4RI_MMC_NBLOCKS; ++i) {
				if(mm[i].size == size) {
					ret = mm[i].data;
					mm[i].data = NULL;
					mm[i].size = 0;
					break;
				}
			}
		}
#if __M4RI_HAVE_OPENMP
	}
#endif
	if (ret)
		return ret;
	else
		return m4ri_mm_malloc(size);

#else // __M4RI_ENABLE_MMC

	return m4ri_mm_malloc(size);

#endif // __M4RI_ENABLE_MMC
}
Exemplo n.º 2
0
mzp_t *mzp_init(size_t length) {
  size_t i;
  mzp_t *P = (mzp_t*)m4ri_mm_malloc(sizeof(mzp_t));
  P->values = (size_t*)m4ri_mm_malloc(sizeof(size_t)*length);
  P->length = length;
  for (i=0; i<length; i++) {
    P->values[i] = i;
  }
  return P;
}
Exemplo n.º 3
0
mzp_t *mzp_init_window(mzp_t* P, size_t begin, size_t end){
  mzp_t *window = (mzp_t *)m4ri_mm_malloc(sizeof(mzp_t));
  window->values = P->values + begin;
  window->length = end-begin;
  return window;
}