Idea about the missing API af_get_raw_ptr
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 5/5
- Tempo estimado
- Mais de uma semana
- Facilidade para iniciantes
- 25/100
Direção de pesquisa
A issue não menciona arquivos do repositório nem testes. Comece revisando as declarações de interoperabilidade em C# apresentadas e o contrato da API ArrayFire af_get_raw_ptr; em seguida, determine os requisitos de ownership e lifetime compatíveis. O trabalho estará concluído quando houver um design acordado voltado ao .NET para acesso por ponteiro bruto ou zero-copy, com a validação de que a memória exposta permanece válida sem duplicação.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
Hello Arrayfire team!,
I was curious about the implemented APIs for dotnet so far and noticed that there is one is missing (or commented out) : "af_get_raw_ptr".
When using arrayfire you just always get the "unmanaged" C++ af array object as an IntrPtr without any possibility to use this object in other .NET APIs (except arrayfire). In my opinion it would be awesome if .NET would have the underlying array as dotnet object but without duplicating it in memory (this means the raw pointer as .NET array or Span or sth in this way).
If arrayfire-dotnet could do this - you could interact with many other librarties but do not duplicate the memory (as long as on CPU backend I guess).
For this the API af_get_raw_ptr is important. I did some ... try outs and played around with it. I was able to create an arrayfire array, got the raw pointer and created a span object from it. Just want to share with you and ask what you think about. unfortunately until now I did not test if there is really not a duplicate in memory and it was for a very small array so far... plus a lot of unsafe sections
public static class af
{
[DllImport("afcpu.dll", ExactSpelling = true, SetLastError = false, CallingConvention = CallingConvention.Cdecl)]
public static extern int af_create_array(out IntPtr array_arr, [In] float[] data, uint ndims, [In] long[] dim_dims, int type);
[DllImport("afcpu.dll")]
public unsafe static extern int af_get_raw_ptr(void** ptr, IntPtr arr);
}
class Program
{
static unsafe void Main(string[] args)
{
float[] dotnetArray = {101,2,3,4,5};
float puffer_1 = 5;
IntPtr af_Ptr = new IntPtr();
void* puffer_2=(void*) &puffer_1;
void** raw_ptr = & puffer_2;
int error = af.af_create_array(out af_Ptr, dotnetArray, 1,new long[] {5},0 );
error = af.af_get_raw_ptr(raw_ptr,af_Ptr);
puffer_2 = *raw_ptr;
var dotnetSpan = new Span<float>((float*)puffer_2, 5);
}
}
- Linguagem predominante
- C#
- Estrelas
- 76
- Forks
- 19
- Métricas de merge de PRs
- Nenhum PR com merge em 30d
Preparar o ambiente
Este projeto não oferece contêiner de desenvolvimento, Dockerfile nem guia de contribuição, então a configuração fica por sua conta: comece pelo README e veja nosso guia da primeira contribuição para os passos gerais.
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de arrayfire/arrayfire-dotnet
-
How convert array to af_seq?Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 25/100
-
Error in ar_topkAberta
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 35/100
-
af_index_tAbertaquestion
Dificuldade 5/5 Mais de uma semana Facilidade para iniciantes 20/100
arrayfire/arrayfire-dotnet#31 · 3 comentários ·
-
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 45/100
arrayfire/arrayfire-dotnet#29 · 3 comentários ·
-
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 42/100
arrayfire/arrayfire-dotnet#27 · 1 comentário ·
Todas as issues de arrayfire/arrayfire-dotnet
Issues semelhantes
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 84/100
lay295/TwitchDownloader#1675 ·
-
copilot documentation
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 88/100
Mantenedores costumam responder em até 2 dias
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 88/100
space-wizards/RobustToolbox#7119 ·
Mantenedores costumam responder em até 1 dia
-
Bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 82/100
Mantenedores costumam responder em até 4 dias
-
.NET Bug Waiting for: Product Owner
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
getsentry/sentry-dotnet#5666 · 2 comentários ·
Mantenedores costumam responder em até 2 dias