¿Hay alguna función memcpy asincrónica en Linux? Quiero que funcione con DMA y notificarme cuando se complete.memcpy asincrónico en Linux?
Respuesta
Por lo que sé, la CPU no puede/no puede hacer DMA a sí misma. Entonces necesitas un hardware externo en el bus para hacer el truco para ti.
Sin embargo, la mayoría del hardware no puede ocupar toda la memoria física, por lo que no es posible una copia exacta de memcpy a menos que tenga definiciones muy estrictas de rangos de direcciones de memoria en su caso de uso. De lo contrario, kernel tendría que memcpy el bloque a su propio bloque de memoria que mataría el propósito de clonar memcpy en primer lugar :)
Pero aún así si quieres crear un "clon" de un bloque de memoria sin usar memcpy (aún así, es una mala idea porque el acceso a la memoria DMA suele ser más lento que el de la CPU), puede enviar el bloque de memoria a la tarjeta de video y volver a colocarlo en otro buffer. Incluso podría colocar el bloque en la memoria de video (putbitmap()? :)) y hacer un bitblt acelerado por hardware() para crear una copia sobre la marcha.
¿Te importa compartir tu objetivo real para que la gente pueda pensar en trucos más inteligentes/mejores?
@ssg, Mi objetivo real es crear un reproductor de video optimizado, en él copio mis datos de YUV a su cola. Ahora esa copia tarda 2 segundos, si esta copia ocurre a través de DMA que en este momento, en otro hilo puedo hacer decodificación de audio. – SunnyShah
@Sunny Shah, ¿Debería estar buscando una solución de copia cero quizás utilizando memoria compartida? ¿Por qué estás copiando grandes trozos de memoria? – Dipstick
FFMPEG genera YUVFrame como salida de función de decodificación. cuando quieras el próximo YUVFrame, solo edita el YUVFrame existente para crear uno nuevo. Entonces, lo que hago es copiar IUVFrame a la cola de los buffers y mostrar el frame de la cola cuando llegue el momento. Esta copia toma alrededor del 7% del tiempo de procesamiento. – SunnyShah
En un procesador multinúcleo o incluso solo en un procesador con hyper-threading, puede ordenar lo que desee ejecutando el habitual (síncrono) memcpy
en una secuencia separada. No digo que sea una buena idea, solo señalar lo obvio.
Puede hacer algunas reproducciones con mremap. O puede hackear FFmpeg para usar diferentes búferes para diferentes marcos.
- 1. ¿Puedo hacer una memcpy copy-on-write en Linux?
- 2. Controlador de dispositivo Linux: no se encuentra el símbolo "memcpy"
- 3. C memcpy en reversa
- 4. optimizado memcpy
- 5. XmlReader asincrónico en .NET?
- 6. IO asincrónico en Java?
- 7. Memcpy() en la programación segura?
- 8. memcpy vs asignación en C
- 9. CreateProcess asincrónico?
- 10. Pobre rendimiento memcpy en el espacio de usuario para memoria física mmap'ed en Linux
- 11. Struct assignment or memcpy?
- 12. memcpy y punteros
- 13. strcpy vs. memcpy
- 14. ¿Memcpy() usa realloc()?
- 15. ¿Cómo usar memcpy?
- 16. memcpy con startIndex?
- 17. Acceso DLL asincrónico en LabVIEW?
- 18. es node.js 'console.log asincrónico?
- 19. Conector Mysql asincrónico
- 20. Mongoose asincrónico por defecto
- 21. es playframework verdaderamente asincrónico?
- 22. NSURLConnection asincrónico con NSOperation
- 23. ¿Hay un equivalente a memcpy() en Java?
- 24. Procedimiento almacenado asincrónico Llamadas
- 25. Delphi CopyMemory vs C++ memcpy
- 26. optimizaciones std :: copy/memcpy/memmove
- 27. Diferencia entre strncpy y memcpy?
- 28. Microsoft SDL y memcpy deprecation
- 29. alternativa más rápida a memcpy?
- 30. ¿Se reentrató la función memcpy()?
¿Qué plataforma? ¿Es esto x86? –
Es un procesador ARM9, microcontrolador Freescale iMX233. – SunnyShah