이런 갤이 있는거 방금 알아서 밤샌 김에 그냥 끄적임... 여기에 올려도 될 지는 모르겠는데 안되는 글이면 완장아 잘라줘용


라이브러리 자체는 완성이고 깃에 오픈 했긴 했는데 그거에 대한 논문? 레포트? 기술백서? 는 아직 미완성이라 자세한 내부 로직은 말 못함.


제대로 된 단어를 모르는 이유는 내가 랩실이라는 곳에 발도 안들여 본 학부생이라 이런 쪽 연구 용어를 몰라서 그럼


어쨌든 이게 대충 설명하자면, 자바에서 파이썬 넘파이마냥 라이브러리 하나 딸깍 객체 선언 딸각 하면 GPU 돌림



CuBridge cb = CuBridge.getInstance();


Tensor t1 = new Tensor(new double[] {1, 2, 3, 1, 2, 3}, new int[] {3, 2});

Tensor t2 = new Tensor(new double[] {1, 2, 3, 1, 2, 3}, new int[] {1, 6});


cb.put(t1).put(t2)

   .add()

   .get()

   .printData();


Consol :


Tensor(shape=[3, 6]):

    [  2.000,  3.000,  4.000,  3.000,  4.000,  5.000 ]

    [  4.000,  5.000,  6.000,  2.000,  3.000,  4.000 ]

    [  3.000,  4.000,  5.000,  4.000,  5.000,  6.000 ]



대충 이러면 알아서 gpu로 (3, 6) add 해서 뱉음... 은 시발 저거 결과가 좀 이상하네 아 시발 버그


일단 저거 브로드캐스팅은 넘파이꺼 개량해서 직접 만듦. 그래서 N 배수 브로드캐스팅도 됨


내부적으로 최적화 짜놔서 10억개 원소 벡터 두 개 연산도 가능함.


add 뿐만 아니라 일단 기본 대수연산들은 다 구현해놨음. im2col col2im affine 등도.


일단 이리 만들었다구 머... 나중에 버그 잡고 다시 옴.



+


버그 잡음 시이발. 내가 만든 브로드캐스팅 함수 for문이 잘못되어 있었음. 121212가 아니라 111222 형태로 확장되는 문제.


Tensor(shape=[3, 2]):

    [  1.000,  2.000 ]

    [  3.000,  1.000 ]

    [  2.000,  3.000 ]

Tensor(shape=[1, 6]):

    [  1.000,  2.000,  3.000,  1.000,  2.000,  3.000 ]

Tensor(shape=[3, 6]):

    [  2.000,  4.000,  4.000,  3.000,  3.000,  5.000 ]

    [  4.000,  3.000,  6.000,  2.000,  5.000,  4.000 ]

    [  3.000,  5.000,  5.000,  4.000,  4.000,  6.000 ]


이제 제대로 나온다 시발...