elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Únete al Grupo Steam elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  malloc_align y free_align.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: malloc_align y free_align.  (Leído 2,490 veces)
APOKLIPTICO


Desconectado Desconectado

Mensajes: 3.871


Toys in the attic.


Ver Perfil
malloc_align y free_align.
« en: 16 Septiembre 2010, 18:26 pm »

Hola gente, como va todo?
Estoy jugando un poco con la tecnología opencl y atistream, y entonces, me puse a tratar de adaptar un sample de Nbody, muy interesante que viene con el SDK a mi IDE code::blocks + Mingw. Pero me encontré con algunos problemas, cuando pude resolver todos los problemas del linker, me encontré con estos pedazos de código:
Código
  1. #if defined (_WIN32)
  2.    pos = (cl_float*)malloc_align(numBodies * sizeof(cl_float4),16);
  3. #else
  4.    pos = (cl_float*)memalign(16, numBodies * sizeof(cl_float4));
  5. #endif

y
Código
  1. #if defined (_WIN32)
  2.       free_align (pos);
  3. #else
  4.        free(pos);
  5. #endif

No pude encontrar los includes que funcionan con codeblocks + mingw, entonces pensé si era posible usar los operadores "new" y "delete" para allocar la memoria. Pero despues de probar varias formas, decidí pedir ayuda.
Alguien sabe cual es el include que funciona con esto, o como adaptarlo para que funcione con "new" y "delete"??
Muchas gracias!


En línea

AMD Phenom II 1075T X6 @ 290 Mhz x 11 (HT 2036 Mhz NB Link 2616 Mhz) 1.23 Vcore
ASUS M4A89GTD-PRO/USB3
2x2gb G-Skill RipjawsX DDR3 1600 Mhz CL7 (7-8-7-24-25-1T)
Seagate 500 Gb
XFX HD4850 512Mb GDDR3. 650 Mhz/995 Mhz 1.1 Tflops.
Littlehorse
All the world's a stage
Moderador
***
Desconectado Desconectado

Mensajes: 2.714


Nie Dam Sie


Ver Perfil WWW
Re: malloc_align y free_align.
« Respuesta #1 en: 16 Septiembre 2010, 22:14 pm »

Primero que nada, se supone que si estas utilizando memalign es para garantizar que el alineamiento que planteas va a ser respetado, por esa misma razón no estas usando ni new ni malloc. Dado eso, seria imprudente hacer los cambios que planteas.

Por otro lado, el tema de los includes, cstdlib/stdlib.h para memalign/free. Para malloc_align y free_align, busca en la documentación del SDK que debería estar todo lo necesario.

Saludos


En línea

An expert is a man who has made all the mistakes which can be made, in a very narrow field.
APOKLIPTICO


Desconectado Desconectado

Mensajes: 3.871


Toys in the attic.


Ver Perfil
Re: malloc_align y free_align.
« Respuesta #2 en: 17 Septiembre 2010, 00:18 am »

Ni en cstdlib ni en stdlib está memalign (Recordemos que estoy bajo windows).
En cuanto al SDK, de que SDK estás hablando???
El único SDK que encontré es en el de CELL, pero no necesito el SDK de CELL, y no me lo voy a bajar entero solo para una funcion...
Si estás hablando del SDK de ati stream, lo revisé pero malloc_align no está definido en ningun lado...

Bueno, despues de búsquedas interminables de google, pude robar el malloc_align de un código que estaba tirado por ahi, pero no está en el SDK de opencl ni el de stream..
Es extrañisimo, pero bueno, ya lo hice compilar y está funcionando bien.

Por si alguien lo llegase a necesitar:
Código
  1. template<class T>
  2. inline T align(T v, int N){
  3.    return (v+(N-1)) & ~(N-1);
  4. }
  5.  
  6. template<class T>
  7. inline T* align_p(T* v, int N){
  8.    return (T*)align((unsigned long)v, N);
  9. }
  10.  
  11.  
  12. void * malloc_align(size_t size,size_t alignment);
  13.  
  14. void * malloc_align(size_t size,size_t alignment)
  15. {
  16.    //return (char*)malloc(size+1)+1;
  17.  
  18.    if(alignment <= sizeof(void*)){
  19.        alignment = sizeof(void*);
  20.    }
  21.  
  22.    void* p = malloc(size + alignment);
  23.    if(!p){
  24.        return 0;
  25.    }
  26.  
  27.    char* aligned = (char*)align_p(p, alignment);
  28.    if(aligned==p){
  29.        aligned += alignment;
  30.    }
  31.  
  32.    *((void**)(aligned-sizeof(void*))) = p;
  33.    return aligned;
  34. }
En línea

AMD Phenom II 1075T X6 @ 290 Mhz x 11 (HT 2036 Mhz NB Link 2616 Mhz) 1.23 Vcore
ASUS M4A89GTD-PRO/USB3
2x2gb G-Skill RipjawsX DDR3 1600 Mhz CL7 (7-8-7-24-25-1T)
Seagate 500 Gb
XFX HD4850 512Mb GDDR3. 650 Mhz/995 Mhz 1.1 Tflops.
Littlehorse
All the world's a stage
Moderador
***
Desconectado Desconectado

Mensajes: 2.714


Nie Dam Sie


Ver Perfil WWW
Re: malloc_align y free_align.
« Respuesta #3 en: 17 Septiembre 2010, 00:47 am »

Citar
Ni en cstdlib ni en stdlib está memalign (Recordemos que estoy bajo windows).

Por supuesto que memalign no se encuentra en ninguno de esos headers si estas bajo Windows, eso ya estaba claro dadas las directivas empleadas (ifdef).

Citar
En cuanto al SDK, de que SDK estás hablando???

Al SDK que bajaste. Si el código es un ejemplo del SDK, seria curioso que contenga funciones que no estén definidas en ningún lado sin aclararlo como mínimo en los comentarios, pero en fin, me alegro que lo hayas solucionado.

Saludos
En línea

An expert is a man who has made all the mistakes which can be made, in a very narrow field.
APOKLIPTICO


Desconectado Desconectado

Mensajes: 3.871


Toys in the attic.


Ver Perfil
Re: malloc_align y free_align.
« Respuesta #4 en: 17 Septiembre 2010, 04:08 am »

Está diseñado para VC++ 2005, no se por que no funciona bien en mingw...
En línea

AMD Phenom II 1075T X6 @ 290 Mhz x 11 (HT 2036 Mhz NB Link 2616 Mhz) 1.23 Vcore
ASUS M4A89GTD-PRO/USB3
2x2gb G-Skill RipjawsX DDR3 1600 Mhz CL7 (7-8-7-24-25-1T)
Seagate 500 Gb
XFX HD4850 512Mb GDDR3. 650 Mhz/995 Mhz 1.1 Tflops.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines