C++9 [caffe2] 기본 구성 요소(operator, workspace, net, ...) 일반적으로 inference 엔진들은 다양한 타입을 입력으로 받고, 또 다양한 device들에서 동작되어야 합니다. 그런데 이 조건들을 충족하게 개발하는게 개인적으로 쉽지 않았습니다. 그래서 기존에 잘 만들어진 라이브러리들을 많이 벤치마크하게 되었고, 오늘은 그 중에서 caffe2에 대해서 이야기 해보려고 합니다. (단, 코드가 너무 방대하다 보니 제가 잘못 이해한 부분도 있을거라 생각됩니다. 그런 부분들은 댓글을 통해 지적해 주시면 감사하겠습니다.) caffe는 원래는 University of California, Berkeley에서 개발된 딥 러닝 프레임워크로서 독립적으로 존재했지만, Facebook에서 RNN기능을 지원하면서 caffe2를 발표하였고, 지금은 pytorch에 편입되어 같은 repos.. 2023. 8. 6. [기본] 소멸자의 virtual 키워드에 대해 기본적으로 C++에서는 소멸자에 virtual 키워드를 붙이는 습관을 들이라는 이야기를 많이 합니다. 왜냐하면 실수로 virtual 키워드를 붙이지 않게되었을 때, 다형성의 형태로 객체들을 관리하게 되면 Memory Leak이 발생할 수 있기 때문입니다. 하지만 해당 Class를 상속하지 않거나 상속하더라도 다형성의 형태로 사용하지 않는다면 virtual 키워드를 붙였을 때 비효율이 발생하게 됩니다. 첫 번째로 코드의 크기가 증가하게 됩니다. 우리는 소멸자에 virtual 키워드 하나 붙였을 뿐이지만, 실제로 상당히 많은 양의 코드가 만들어지게 되게 됩니다. 그리고 이에 따라 바이너리 사이즈가 커지고 해당 소멸자를 수행하는 시간이 길어지게 됩니다. 두 번째로 Class의 메모리 offset 0 부분에 v.. 2023. 6. 25. [CppCon] C++에서 데이터를 Handling하기 위한 다양한 구조들 최근에 CppCon에서 데이터 핸들링에 관하여 재밌는 영상을 보게되어 소개하려고 합니다. 5분이 약간 넘는 아주 간단한 동영상이니 직접 시청해 보시는 것을 추천합니다. Lightning Talk: Cute Approach for Polymorphism in C++ - Liad Aben Sour Asayag - CppCon 2022 - YouTube 데이터를 핸들링하는 아래와 같은 상황을 생각해 볼 수 있습니다. 다양한 형태의 데이터(Element)들이 들어오고, 그 데이터의 형태에 따라서 작업을 하기위해 다양한 Handler가 존재할 수 있습니다. 그리고 어떠한 Handler를 사용해야 하는지는 runtime에 결정되게 됩니다. 그러면 우리가 가장 먼저 생각해볼 수 있는 구조는 이렇습니다. Handler.. 2023. 4. 20. [삽질] runtime_error를 던질 때 segmentation fault 발생 CUDA에서 Texture Memory를 사용하기 위해서 cudaCreateTextureObject를 통해 cudaTextureObject를 생성하던 중에 계속해서 segmentation fault가 발생했습니다. 잘못된 메모리 접근이 있다고 생각해 이전의 malloc을 사용하는 부분과 memcy을 사용하는 부분을 확인해 보았지만 원인을 알 수 없었습니다. 그러던 중에 특별한 곳에서 원인을 찾을 수 있었습니다. cudaError_t cudaStatus = cudaCreateTextureObject(&tex, &texRes, &texDescr, nullptr); if (cudaStatus != cudaSuccess) { throw std::runtime_error("cudaCreateTextureObjec.. 2023. 2. 28. 이전 1 2 3 다음