Computer/Algorithm6 최척화된 Barnes-Hut 시뮬레이션 쿼드트리 멀티스레딩, Cache locality를 최대한 지킨 코드를 만들었다. 아직 배열 기반 스택을 사용하진 않아서 완벽하진 않지만, 조금만 손보면 CUDA에도 거의 그대로 이식 가능할 정도로 만들었다. 3차원 모델을 빨리 만들고 다음 주제인 SPH 시뮬레이션으로 넘어가야겠다. 만드는 데 최적화 생각을 상당히 많이 해야하기도 했고 어려운 알고리즘이 많이 사용되기도 했고 학교다니느라 시간이 없어서 오래 걸렸음. 2023. 12. 28. 배열 쿼드트리 #include #include #include const int NULL_INDEX = -1; constexpr int MAX_NODES = 1000; constexpr int MAX_PARTICLES = 1000; float nodeX[MAX_NODES]; float nodeY[MAX_NODES]; float nodeWidth[MAX_NODES]; float nodeHeight[MAX_NODES]; int nodeParticleIndex[MAX_NODES]; int nodeChildren[MAX_NODES][4]; float particleX[MAX_PARTICLES]; float particleY[MAX_PARTICLES]; float particleMass[MAX_PARTICLES]; int no.. 2023. 9. 16. 쿼드트리 Barnes-Hut 천체 시뮬레이션 만들고 있는데 필요해서 만들어봄. 이진 트리하고 비슷하게 만들면 되는데 이진 트리보다 구분해야 하는 차원의 개수가 하나 늘어서 만들 때 꼬일 수 있음. 2021. 11. 7. 고속 푸리에 변환 이산 푸리에 변환 이산 푸리에 변환의 C++ 코드이다. #define M_PI 3.14159265358979323846 void DFT(const std::vector &input, std::vector > &output) { int N = input.size(); std::complex img(0.0, 1.0); for (int i = 0; i 1) { n = k; k >>= 1; phiT = phiT * phiT; T = 1.0L; for (int i = 0; i < k; ++i) { for (int a = i; a < N; a += n) { int b = a + k; std::complex t = x.at(a) - x.at(b); x.at(a) += x.at(b); x.at(b) = t * T; }.. 2021. 1. 28. 이산 푸리에 변환 푸리에 해석을 모른다면 슬쩍 보고 오자 푸리에 해석 테일러 급수를 아는 사람들은 알겠지만, 어떤 임의의 함수는 멱급수 형태로 전개할 수 있다. 그럼 반대로 생각해보자 어떤 임의의 주기함수는 사인함수의 합으로 이루어질 수 있는가? 어떤 함수 ellipsoid.tistory.com 이산 푸리에 변환의 C++ 코드이다. #define M_PI 3.14159265358979323846 void DFT(const std::vector &input, std::vector &output) { int N = input.size(); std::complex img(0.0, 1.0); for (int i = 0; i < N; ++i) { std::complex tmp(0.0, 0.0); for (int j = 0; j <.. 2021. 1. 28. C++ vector, list, queue 속도 실험 #include #include #include #include #include void vec_t(int size) { std::vector t; for (int i = 0; i < size; ++i) t.push_back(i); while (!t.empty()) t.erase(t.begin()); } void list_t(int size) { std::list t; for (int i = 0; i < size; ++i) t.push_back(i); while (!t.empty()) t.pop_front(); } void queue_t(int size) { std::queue t; for (int i = 0; i < size; ++i) t.push(i); while (!t.empty()) t.pop().. 2021. 1. 17. 이전 1 다음