Malloc Replacements

This page describes possible malloc replacements to be used for memory management in SAGE which is not directly controlled by Python such as manual malloc/realloc calls, the GMP library etc..

Introduction

malloc

   1 sage: x = 3; y = 5
   2 
   3 sage: timeit _ = x + y
   4 100000 loops, best of 3: 7.37 mircoseconds per loop

PyMem_Malloc

The Python memory manager does keep track of some previous allocated, unused, but not yet freed blocks so it should be faster than malloc itself. It is currently used in GMP and Pyrex code in SAGE.

OMalloc

   1 sage: x = 3; y = 5 #  malloc (GMP default)
   2 sage: timeit _ = x + y
   3 100000 loops, best of 3: 8.14 microseconds per loop
   4 sage: timeit _ = x + y
   5 100000 loops, best of 3: 8.05 microseconds per loop
   6 
   7 sage: sage.rings.integer.pmem_malloc()
   8 
   9 sage: timeit _ = x + y # PyMem_Malloc
  10 100000 loops, best of 3: 8.27 microseconds per loop
  11 sage: x = 3; y = 5
  12 sage: timeit _ = x + y
  13 100000 loops, best of 3: 8.21 microseconds per loop
  14 
  15 sage: omalloc_malloc() 
  16 
  17 sage: timeit _ = x + y # omalloc
  18 100000 loops, best of 3: 7.55 microseconds per loop
  19 sage: timeit _ = x + y
  20 100000 loops, best of 3: 7.55 microseconds per loop

Larger integers:

   1 sage: x = 
   2 45234723458934634056310653251305043576435013985134515643531450714359863148659136951369851836545643565
   3 
   4 sage: y = 
   5 23423964523462384234234234872345623645623452345283548234652365482348562346523642348263486234954534554
   6 
   7 sage: timeit _ = x + y #malloc
   8 100000 loops, best of 3: 8.3 microseconds per loop
   9 
  10 sage: sage.rings.integer.pmem_malloc()
  11 
  12 sage: timeit _ = x + y #PyMem_Malloc
  13 100000 loops, best of 3: 8.58 microseconds per loop
  14 
  15 sage: omalloc_malloc() 
  16 
  17 sage: timeit _ = x + y # omalloc
  18 100000 loops, best of 3: 7.58 microseconds per loop

DLMalloc

default libCF Memory Manager

   1 sage: from sage.memory import * #only in my (malb) working copy
   2 
   3 # PyMem_Malloc
   4 sage: x = 5; y = 3
   5 sage: %timeit _ = x+y
   6 100000 loops, best of 3: 8.15 microseconds per loop
   7 
   8 # default libCF memory manager
   9 sage: memman_malloc()
  10 sage: %timeit _ = x+y
  11 100000 loops, best of 3: 7.36 microseconds per loop

libCF new Memory Manager

GivMM

   1 sage: from sage.memory import *
   2 sage: x = 5; y = 3
   3 
   4 # PyMem_Malloc
   5 sage: %timeit _ = x+y
   6 100000 loops, best of 3: 8.15 microseconds per loop
   7 
   8 # GivaroMM
   9 sage: givaro_malloc()
  10 sage: %timeit _ = x+y
  11 100000 loops, best of 3: 8.36 microseconds per loop

MallocReplacements (last edited 2008-11-14 13:42:11 by localhost)