2017-05-24 1 views
1

J'ai une idée conceptuelle pour un pipeline permettant l'accélération GPU dans Erlang. L'API consisterait en des fonctions d'ordre supérieur qui amusent, un binaire et quelques drapeaux, une vérification d'exécution sur le bytecode BEAM pour voir si le fun peut être compilé en OpenCL, mettre en cache le résultat et ensuite travailler de la même manière le module des listes. Si le plaisir ne peut pas être converti en OpenCL, le processus échouerait.Création d'un pipeline d'accélération matérielle pour BEAM

Toutes les opérations seraient effectuées sur les binaires car les listes ne sont pas représentées de manière contiguë en mémoire, ce qui nécessite beaucoup de travail pour les déplacer vers et depuis la mémoire GPU. Il y aurait des options pour interpréter le binaire comme des flottants, doubles, entiers ou un mélange, et avoir une taille variable d'entrée et de sortie pour le plaisir. Est-il possible de faire cela en pur Erlang ou C sans pirater BEAM? Si c'est le cas, des liens vers des ressources pertinentes seraient appréciés.

Répondre

1

erlang:fun_info/1erlang:fun_info/1 retourne une liste contenant le numéro {env, ...} qui contient un AST. Je peux tirer parti de ce sto créer mon code OpenCL, et utiliser une liaison OpenCL existante et utiliser une table ETS dans un gen_server pour la mise en cache, couvrant le pipeline while en pur Erlang.