J'essaie Intel MKL et il semble qu'ils ont leur propre gestion de la mémoire (style C).Intel MKL gestion de la mémoire et des exceptions
Ils suggèrent d'utiliser leurs paires MKL_malloc/MKL_free pour les vecteurs et les matrices et je ne sais pas ce qui est un bon moyen de le gérer. Une des raisons en est que l'alignement de la mémoire est recommandé pour être au moins de 16 octets et avec ces routines, il est explicitement spécifié.
Je comptais beaucoup sur auto_ptr et boost :: smart_ptr pour oublier les nettoyages de la mémoire.
Comment puis-je écrire un programme de sécurité exceptionnelle avec la gestion de la mémoire MKL ou dois-je simplement utiliser auto_ptr normal et ne pas déranger?
Merci d'avance.
EDIT http://software.intel.com/sites/products/documentation/hpc/mkl/win/index.htm
ce lien peut expliquer pourquoi j'ai soulevé la question
MISE À JOUR
je une idée de la réponse ci-dessous pour allocateur. C'est ce que j'ai maintenant:
template <typename T, size_t TALIGN=16, size_t TBLOCK=4>
class aligned_allocator : public std::allocator<T>
{
public:
pointer allocate(size_type n, const void *hint)
{
pointer p = NULL;
size_t count = sizeof(T) * n;
size_t count_left = count % TBLOCK;
if(count_left != 0) count += TBLOCK - count_left;
if (!hint) p = reinterpret_cast<pointer>(MKL_malloc (count,TALIGN));
else p = reinterpret_cast<pointer>(MKL_realloc((void*)hint,count,TALIGN));
return p;
}
void deallocate(pointer p, size_type n){ MKL_free(p); }
};
Si quelqu'un a des suggestions, n'hésitez pas à faire mieux.
16- * octets * alignement, je pense. –
oui, absolument vrai. Corrigée. – Andrew