From e4ad4cd5dcf68f1b3c4fddb124008b2583f91aa8 Mon Sep 17 00:00:00 2001 From: akielaries Date: Mon, 23 Dec 2024 13:00:05 -0800 Subject: [PATCH 1/8] some broken shit --- CMakeLists.txt | 2 +- modules/optim/function.cpp | 3 ++- tests/CMakeLists.txt | 29 ++++++----------------------- tests/linalg/t_eigen.cpp | 2 ++ 4 files changed, 11 insertions(+), 25 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d4c631f83..16eb0b0e6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -196,7 +196,7 @@ if(NOT BUILD_TINYGPMP AND NOT BUILD_PYGPMP OR BUILD_OPENGPMP) # run C++ and Fortran unit tests add_dependencies(${PROJECT_NAME} RUN_CPP_TESTS) - add_dependencies(${PROJECT_NAME} RUN_FORTRAN_TESTS) + add_dependencies(${PROJECT_NAME} RUN_FORTRAN_TESTS) endif() # uninstall target diff --git a/modules/optim/function.cpp b/modules/optim/function.cpp index cd85301c5..367c9dc49 100644 --- a/modules/optim/function.cpp +++ b/modules/optim/function.cpp @@ -31,8 +31,9 @@ * ************************************************************************/ #include -#include +#include #include +#include std::vector gpmp::optim::Func::generate_random_point( const std::vector &lower_bounds, diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 4cb034edf..8d9325e89 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -1,24 +1,5 @@ -include(FetchContent) - -find_package(GTest QUIET) - -message(STATUS "Detecting GoogleTest") -if(NOT GTest_FOUND) - message(STATUS "GoogleTest not found") - message(STATUS "Fetching GoogleTest") - # If GoogleTest is not found, fetch and build it - include(FetchContent) - FetchContent_Declare( - googletest - #URL https://github.com/google/googletest/archive/03597a01ee50ed33e9dfd640b249b4be3799d395.zip - URL https://github.com/google/googletest/archive/b75ecf1bed2fcd416b66c86cb6fe79122abf132e.zip - ) - FetchContent_MakeAvailable(googletest) - message(STATUS "Fetching GoogleTest - done") - -else() - message(STATUS "GoogleTest found") -endif() +enable_testing() +find_package(GTest REQUIRED) message(STATUS "Detecting GoogleTest - done") @@ -129,7 +110,9 @@ target_compile_options( target_link_libraries( test_openGPMP_cpp - GTest::gtest_main + #GTest::gtest_main + GTest::GTest + GTest::Main pthread --coverage -fprofile-arcs @@ -139,7 +122,7 @@ target_link_libraries( target_link_libraries( test_openGPMP_fortran - GTest::gtest_main + #GTest::gtest_main pthread -lgfortran --coverage diff --git a/tests/linalg/t_eigen.cpp b/tests/linalg/t_eigen.cpp index f440102cd..c1307da76 100644 --- a/tests/linalg/t_eigen.cpp +++ b/tests/linalg/t_eigen.cpp @@ -7,6 +7,8 @@ #include #include #include +#include + const double TOLERANCE = 1e-3; From 1b1a89efd80129c5a1860be2cba6312f85634bb5 Mon Sep 17 00:00:00 2001 From: akielaries Date: Mon, 23 Dec 2024 14:00:25 -0700 Subject: [PATCH 2/8] cmake verison --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 16eb0b0e6..905fdbf2a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,7 +2,7 @@ # Root CMake file for the openGPMP project # *************************************************************************/ -cmake_minimum_required(VERSION 3.25) +cmake_minimum_required(VERSION 3.20) set (CMAKE_CXX_STANDARD 20) include(CheckIncludeFileCXX) From 5efb03f73cd1a11abf9ecf2d7a4ee4fc63abff33 Mon Sep 17 00:00:00 2001 From: akielaries Date: Mon, 23 Dec 2024 14:21:26 -0700 Subject: [PATCH 3/8] ifdef the asm call? --- modules/linalg/dgemm_arr.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules/linalg/dgemm_arr.cpp b/modules/linalg/dgemm_arr.cpp index 11dfd190d..136a76343 100644 --- a/modules/linalg/dgemm_arr.cpp +++ b/modules/linalg/dgemm_arr.cpp @@ -98,6 +98,7 @@ void gpmp::linalg::DGEMM::dgemm_micro_kernel(long kc, long kb = kc / 4; long kl = kc % 4; +#ifdef __x86_64__ dgemm_kernel_asm(A, B, C, @@ -109,6 +110,7 @@ void gpmp::linalg::DGEMM::dgemm_micro_kernel(long kc, incColC, alpha, beta); +#endif } // MATRIX BUFFERS From 1677fba790bdb8f30e5c761d620d6ac3310b6dea Mon Sep 17 00:00:00 2001 From: akielaries Date: Mon, 23 Dec 2024 14:37:11 -0800 Subject: [PATCH 4/8] changing cmake back? --- tests/CMakeLists.txt | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 8d9325e89..4cb034edf 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -1,5 +1,24 @@ -enable_testing() -find_package(GTest REQUIRED) +include(FetchContent) + +find_package(GTest QUIET) + +message(STATUS "Detecting GoogleTest") +if(NOT GTest_FOUND) + message(STATUS "GoogleTest not found") + message(STATUS "Fetching GoogleTest") + # If GoogleTest is not found, fetch and build it + include(FetchContent) + FetchContent_Declare( + googletest + #URL https://github.com/google/googletest/archive/03597a01ee50ed33e9dfd640b249b4be3799d395.zip + URL https://github.com/google/googletest/archive/b75ecf1bed2fcd416b66c86cb6fe79122abf132e.zip + ) + FetchContent_MakeAvailable(googletest) + message(STATUS "Fetching GoogleTest - done") + +else() + message(STATUS "GoogleTest found") +endif() message(STATUS "Detecting GoogleTest - done") @@ -110,9 +129,7 @@ target_compile_options( target_link_libraries( test_openGPMP_cpp - #GTest::gtest_main - GTest::GTest - GTest::Main + GTest::gtest_main pthread --coverage -fprofile-arcs @@ -122,7 +139,7 @@ target_link_libraries( target_link_libraries( test_openGPMP_fortran - #GTest::gtest_main + GTest::gtest_main pthread -lgfortran --coverage From 906c5caddeccb37eb2f446c9dda3ff397ca8dfc4 Mon Sep 17 00:00:00 2001 From: akielaries Date: Mon, 23 Dec 2024 17:38:03 -0700 Subject: [PATCH 5/8] updates --- experiment/gemm.cpp | 115 +++++++++++++++++++++++++++++++++++++++++++ tests/CMakeLists.txt | 15 ------ 2 files changed, 115 insertions(+), 15 deletions(-) create mode 100644 experiment/gemm.cpp diff --git a/experiment/gemm.cpp b/experiment/gemm.cpp new file mode 100644 index 000000000..3d5914268 --- /dev/null +++ b/experiment/gemm.cpp @@ -0,0 +1,115 @@ +#include +#include +#include +#include + +// Block size for tiling optimization +const size_t BLOCK_SIZE = 256; + +// Naive GEMM implementation (no optimizations) +void gemm_naive(const float* A, const float* B, float* C, size_t M, size_t N, size_t K) { + for (size_t i = 0; i < M; ++i) { + for (size_t j = 0; j < N; ++j) { + C[i * N + j] = 0.0f; + for (size_t k = 0; k < K; ++k) { + C[i * N + j] += A[i * K + k] * B[k * N + j]; + } + } + } +} + +// Tiled GEMM implementation (optimized with blocking and packing) +void pack_matrix_A(const float* A, float* packed_A, size_t M, size_t K, size_t block_start_row, size_t block_start_col) { + for (size_t i = 0; i < BLOCK_SIZE && (block_start_row + i) < M; ++i) { + for (size_t j = 0; j < BLOCK_SIZE && (block_start_col + j) < K; ++j) { + packed_A[i * BLOCK_SIZE + j] = A[(block_start_row + i) * K + block_start_col + j]; + } + } +} + +void pack_matrix_B(const float* B, float* packed_B, size_t K, size_t N, size_t block_start_row, size_t block_start_col) { + for (size_t i = 0; i < BLOCK_SIZE && (block_start_row + i) < K; ++i) { + for (size_t j = 0; j < BLOCK_SIZE && (block_start_col + j) < N; ++j) { + packed_B[i * BLOCK_SIZE + j] = B[(block_start_row + i) * N + block_start_col + j]; + } + } +} + +void gemm_block(const float* packed_A, const float* packed_B, float* C, size_t M, size_t N, size_t K, size_t block_row, size_t block_col) { + for (size_t i = 0; i < BLOCK_SIZE && (block_row + i) < M; ++i) { + for (size_t j = 0; j < BLOCK_SIZE && (block_col + j) < N; ++j) { + float sum = 0.0f; + for (size_t k = 0; k < BLOCK_SIZE && k < K; ++k) { + sum += packed_A[i * BLOCK_SIZE + k] * packed_B[k * BLOCK_SIZE + j]; + } + C[(block_row + i) * N + block_col + j] += sum; + } + } +} + +void gemm_tiled(const float* A, const float* B, float* C, size_t M, size_t N, size_t K) { + std::vector packed_A(BLOCK_SIZE * BLOCK_SIZE, 0.0f); + std::vector packed_B(BLOCK_SIZE * BLOCK_SIZE, 0.0f); + + for (size_t block_row = 0; block_row < M; block_row += BLOCK_SIZE) { + for (size_t block_col = 0; block_col < N; block_col += BLOCK_SIZE) { + for (size_t block_k = 0; block_k < K; block_k += BLOCK_SIZE) { + pack_matrix_A(A, packed_A.data(), M, K, block_row, block_k); + pack_matrix_B(B, packed_B.data(), K, N, block_k, block_col); + gemm_block(packed_A.data(), packed_B.data(), C, M, N, K, block_row, block_col); + } + } + } +} + +void print_matrix(const std::vector& mat, size_t rows, size_t cols) { + for (size_t i = 0; i < rows; ++i) { + for (size_t j = 0; j < cols; ++j) { + std::cout << mat[i * cols + j] << " "; + } + std::cout << "\n"; + } +} + +int main() { + // Dimensions of matrices (use larger sizes for more meaningful benchmarks) + size_t M = 512, N = 512, K = 512; + + // Initialize matrices with random values + std::vector A(M * K, 1.0f); + std::vector B(K * N, 1.0f); + std::vector C_naive(M * N, 0.0f); + std::vector C_optimized(M * N, 0.0f); + + // Measure time for naive GEMM + auto start_naive = std::chrono::high_resolution_clock::now(); + gemm_naive(A.data(), B.data(), C_naive.data(), M, N, K); + auto end_naive = std::chrono::high_resolution_clock::now(); + std::chrono::duration duration_naive = end_naive - start_naive; + std::cout << "Naive GEMM Time: " << duration_naive.count() << " seconds\n"; + + // Measure time for optimized GEMM + auto start_optimized = std::chrono::high_resolution_clock::now(); + gemm_tiled(A.data(), B.data(), C_optimized.data(), M, N, K); + auto end_optimized = std::chrono::high_resolution_clock::now(); + std::chrono::duration duration_optimized = end_optimized - start_optimized; + std::cout << "Optimized GEMM Time: " << duration_optimized.count() << " seconds\n"; + + // Verify results + bool correct = true; + for (size_t i = 0; i < M * N; ++i) { + if (std::abs(C_naive[i] - C_optimized[i]) > 1e-6) { + correct = false; + break; + } + } + + if (correct) { + std::cout << "Results match between naive and optimized GEMM.\n"; + } else { + std::cout << "Results do not match between naive and optimized GEMM.\n"; + } + + return 0; +} + diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 4cb034edf..88953b5b2 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -45,29 +45,14 @@ set(CPP_TEST_FILES linalg/t_eigen.cpp linalg/t_linsys.cpp - linalg/t_matrix_vector_i32.cpp - linalg/t_matrix_vector_f64.cpp - linalg/t_matrix_arr_naive.cpp - linalg/t_matrix_arr_i8.cpp - linalg/t_matrix_arr_i16.cpp - linalg/t_matrix_arr_i32.cpp - linalg/t_matrix_arr_f64.cpp - - linalg/t_matrix_arr_f90.cpp - linalg/t_igemm_arr.cpp linalg/t_sgemm_arr.cpp linalg/t_dgemm_arr.cpp linalg/t_vector_vector_naive.cpp - linalg/t_vector_vector_i8.cpp - linalg/t_vector_vector_i32.cpp - linalg/t_vector_vector_f64.cpp - - nt/t_cipher.cpp nt/t_rc4.cpp nt/t_primes.cpp From d2c51be14710955ae316d9e4565345d67250eac8 Mon Sep 17 00:00:00 2001 From: akielaries Date: Mon, 23 Dec 2024 17:58:34 -0800 Subject: [PATCH 6/8] adding tinygpmp module stubs --- experiment/gemm.cpp | 2 +- experiment/gemm_comparison | Bin 0 -> 21208 bytes tinygpmp/fec/README.md | 2 ++ 3 files changed, 3 insertions(+), 1 deletion(-) create mode 100755 experiment/gemm_comparison create mode 100644 tinygpmp/fec/README.md diff --git a/experiment/gemm.cpp b/experiment/gemm.cpp index 3d5914268..79ddffe4b 100644 --- a/experiment/gemm.cpp +++ b/experiment/gemm.cpp @@ -73,7 +73,7 @@ void print_matrix(const std::vector& mat, size_t rows, size_t cols) { int main() { // Dimensions of matrices (use larger sizes for more meaningful benchmarks) - size_t M = 512, N = 512, K = 512; + size_t M = 384, N = 384, K = 384; // Initialize matrices with random values std::vector A(M * K, 1.0f); diff --git a/experiment/gemm_comparison b/experiment/gemm_comparison new file mode 100755 index 0000000000000000000000000000000000000000..ba3121de5a4696af74c4a53eeb17ec6b6c3b4821 GIT binary patch literal 21208 zcmeHP4Rl+@l^)rWZ9-xxY0?@JK+8I;DMYoBkk|!-dU%Y#n}VgqI2-5Y9xrCh!?VLJXo|J2RS8bvDeETGx zFDLD6kaA94aYG(#7v)JP%li`K$e(|0lHsvLls8uUHHdbQkm7_Al}kD()~;Q&lofQd zB+-od6l&yd%Aa^@#fe8AI9*qL$%#waDjr$%`C|(@zR(_8IdAS4+FNF|hr(TJXRWQ8 zH*4NpM=au)&6~Yc=+o=J3$_m|MD^DH4wNsUpeq8pigGgS$Bh;X(Ppy z{QgxPk+46e2BNCp&-|VypT8v-4Xz5s)L^v9x1c=|4mJf=wg>gR(Q}r!v^T8oVE*Nc z8r6BtZP7?LGRJ?zZ0GFQI;iRJH@8QcZ=Vy6tf^nknIhGGpFb3i1*58`rM`YiW26aX zFK<+5J42C}e`O#R^dq{Wf#^E0g;YrSSFK&^?+iv`k#L|rq^|R?uH+KVd47K+rbdH- z4ym!ZQFS_-+X7L)8V!Whn5UVFP@Qw2H`FY-Jx%_mN`HOhJb%OWjdT3%&=y`pb!b%Q zHb=Tt=3g3K6AHKZmjq*79jHE8)GR#J5eS7rXiDQcZvQW=@L&a*7ecYCC4nH>@m>ARKywg8|V`_MgMutK%Z!!_Z#Sw40J`< zL)8&W1fDDVEwz)?z|RDKF=)aCJh#L^7gGSI+YEF$_fSTefi7c#=yn5LAIFKxScQQu zeMj_4104-Fp2j^e?tyU+jC)|*1AmhTl=$HiWvk_P*D$7RPO1gj{YpGlvNNYMd&P6e z%FcWqzt)RfxFfuc@(22}NHcd3PE+K-evWS^oTkQsB*z~ooTl`FZ5;n8;WR}KJk0SQ z5KdF$Ko7^iLpV)|1Kk`yA9!mI@KKYp^^Wpo*j$)ddT>qVK1e9qTbZW-K|F_fwfBg= zTBi%r$xQ2T{->FnfOxedJTv3fIWsC?tHXNHCSK~Och-yQ7+d-qDn`-Xb>HZ|!M)Vo zDg!LHF1xY(bO|1#tiZTEI6)_Gjfc4iiX!qsP%;?8-TXMx3|r809s$y~@q z-tcP2;Sl$)y3wrer|Fm9dbHh{=h3oc+$X1DT>p&+woitGyq6Ao6E)7O5krY99>0LG z)Y}I?pY&?k^w6!Ahk&PtCfD!DFlbK?+3NT3oaM<(7D~uMT985V9&lz3fR=d>KW7#1 z)eh>0DH@a=gHR?+3by+8a7(7?S{6YI3Q#WH!>u3_rsqu90D%!E+(8mhH#GELfHqJVgQbo*r-qfFNXbWFOD@R7ZL_BI5E%VvDD2&g9MRkTimz0 z{kQDgUa718SE2fQU_10fv^Cmj;2%&AwAsMNAOaHUQ&OYnp2BTwkMjeM_TsIIc2J4G zbF`tU-kEgnRT4EbA)1}`<0~2a#2BzHG*iuaS5a$OrVyweRHtG1*aAixKF-PZTQBN{ zNo=Qp;2)sO#1#h#TzW>)jw-z$UZeC57AmG)%8O^zsZg*~C@9JH!?oyFQvR6r!lCY( zcTpDWx@@TuubBW&>Tl{qWoylyKr*kNM8vef-d&bwz-PJzvLoaN){N1a!6&=z(ndv7 z%a1CWw|r39yjNZC({}h!qv)c<+yqrf(N21_SL>Z0T$h+T->W@$UE-?EM6Y+gqX7H!;CEFLllJWP3gFq}dbSY4%k=*YysKr%E>MGd=Gy zy{wq_Db?-egI&+ue2Z+~ovl4yt))BzJAK-lUhQal@W!Me3PDHEm0vS?bY-QoSd_C%oG3)XEJvy`@+mJCS-D z1m$UNIb+=z#%?-7nUjv6PksADc#yDZ{lNIhM-1YR>TP>K=(r(FW*HNE6aQpq)KWR<&Sb@I@Rp7bf3xggbh$7FL6++s)H z#8hM5^Z>>%2tJ4FSo(v$SJS`j>rJ`4`u>_Pvqn z-EbgaF}EtUalOs_IPNNOH`)AzH_>TQ z;zK6uCVKd^IB`{}r}_nJ+zP~(xaw+;={T3zp5rb6cY$@&hp0KYot*n^?uOC03&CAz z-IO$PKLKP>;;Q*)>o$YijQSh7DQ-vSwt(BBwh1d@{?WPM*`Xq}R&rGfF8I6HSTk@H zt1~=_sV1fRx!7mWxW$U;DB{y*et@FX99K5(qRq7@n^H_Kcs3@ft(1*tXvb~ce2_-r z!8JF_&OqJT1rPp$M7*Z=z1p5bQ+sI8y_;+6#!&33-lhIjsooRK9QvU?j^yH7(O&Ra zALD`hmLaq$s_kWZRG;8cJpmYEITzSR^nj-j|1Xbk$LI9;UI;iG-(Lgvzd643h#imb z|B3i^--wCIeM7zTI4wRs+Vfs*?@~p38AB{W_>6aJdwCVjNiMJUKH`7B*Yt*>z3Que z*BbvJh5?WEx{_#m2D4aF?=ROU%!S_S{joNm_5#*Em~Ut{yxK777;g3XXW|y>c^h|A z@1<$ztBe*IHPlU23w6c=sqe2}X1?1K?=|CYGVX|fkQln|_sB6I?KQnh0|K;o0YI`zk~)3ETq-)GNt$J5}K;^(a#Yoy^>a1eEPcL+n*u* zE6C>OFmn#1)2p#uOMA6mKIh(zY-KByc(wL&1r4oeP31OE;;JGl>rYhCDlAK=92cp7 zQ_=1yx6>^4wxUfer@~6ST1G($%gCbr#JSeF*9$cjRKgpyhpI|%h@4ck74R2AM)7EG z(oFs~)f;YvamYXH(GK{kU$(|e^yzr!UHHd{rsZ!E+;A5*0p@2(qvaJ4oG+0|T%UmD zHDn*g3c3eVv(0Sd6ZBLizQe9;9HJJtZtBJs5KKcU_lC$TDYvC>F#Wy09VvH5-yzJ= zz3FKu2Xb@t2kA+D$7zaAr%xZ*tuxKuEPqD+q{U_wG?~!*-3%=67P%@YA)wq9(FwDJz5{{uj!d5UstqOcyoP%0ueXU z>^2T9Re)GV{2KiQ!8LOo&_frC_2ck*4=bJF^B$2^X)O(PZ8T=L zVP_?RtG(P#p;SSUr6}4*#Mpp`CDu4~C>jqtDX?z4J~87l=W)J&gdOw9j(_Aa=+REl zROWoiFnQ_o9oaXvN6GH+AkY!psU4wTZR8Ue1|~G2I)MsnLt)Xr^w2W%6S|S{-DaxO z6H0a$Em*^)bGnJ;zUo)3cV|yfzr!$1McUwH(%0bGnAYWA^i-d=-u)Xe zVg1Y_bR(jOBHJOrY_Wte~U{jxVP>m>e# zq6NpPrAlJfJp65rDfstz@>N0IxlGwzSB`FqI^l-@kELuruC8wFp^DfriFw8L88fVU z1@wBhn#cBA?9Tdyq@_rXx{2$UHf4g%#%c=M z9w23P!0_h*Pp1WxK(L{1NlQf92=rlyfyCUx%v=e9{-hPP7%c zs4l!MYD;bR7u1%P-B(y!YEPJJODpcRxJxUy6uC>Q;>88`Oen2%msTJTJm9S@Em=VC zHDV*l9>LWHU%WwebeGz;6cp4>Dq4Pj;eF~FGX&{@8;ssLk5g@!C3nmrS-d|XMpV^nN+*^cdxQg{^FgsY5;i~*YHjBSA znRyR>CKlP^#ajyQElODKGv8lGK2E~+JC0_v{0*HvAA88hb!59jwqIL%Tfu{+Rd9Nq zqshJ$t~!+UEPQNk0mAK5CKWB#{dRBBJ;m{o!dC8P_qn`26q`SNGn=giG&kUf>?_$) za8I$c5HzH0)^yH%JkDKedB2np^E4oUGs*y$TmIR?zGJdHVPQ|1ERR~)&k8aH4_i22 z4f2u9xai>ls>;8S0Kl8i^q%#28u!4s2gW@x?tyU+jC)|*1ONX#Aiukk-&xTbi4uJa zMoHrIt(g(0eFP=im+(XjEF}4j)F{;$#27C`FOXK*9Y00^^CyVgd*&Ac)qj?OLLCbihTSDHzHpY z^WP3~-;d{&JWs^ILIH0OuvNg-0&WrTK>?*2SA)FMA-=x+qP?OnxH1$7+nsYAvmKSQ zsxB3GBUwja)cj`lk=(}T@~Ayb*yYOa%LvFOZcOM!`SDYT1~akq za{W;9p9eZ#{y8i8IK7m~4lNsc73em0K5NK}BQrXb9rUU^dKmnZX?Iwu7eRYPN*h4G zSic?d`z_F?P&%5mm=lryEk%H((}%dit&A_iCjKal7 z5|r*FdI3gVxYU?7fll?!Z0erwV#^Uc1}5 zA0*c>^m01-yO^l>GaY2p7e}M{^ZqgDkAZFIE%?hv9=P~7{^ARM ze2brR7=Q3=a2WFkTLNkTCoL?-IRh=Bu)ix7Y=KqAa|U#6I5B{Z34p5EozYNO_2UV3 zG_-cf^*DfGb+8%U^RzYwJgxQh9UZ(0#PI|prTs0jh`$X_zUg>}<<2>sf#%zVCVwpq zTYyIgRPFy&tM?$!$dmSz;HN1t{j|ezzGBVVk_e-!4JNs&JR1GaA7$9_l*g$dOidg>Z^YsD(KY$-!tRMgd*V)h#z^;V0(ZB#9e2*N*Y7>#jRsi1UG7MEq-~-I-(KY+Z@3*F-Ekt zK#9bl9p`og*ER<`RSbA^0*Y=i&gGaz10Ywe4<@=sc@GN$9ie6@h^SODjHh1hK)5iB zgdH6irE(+p-*!XO2~Clh)_9WV6G>*(_T&Da=#{FQpl72 zWT&)WkQx1{M{OeI<$h7Zqk=Ktf3p6XkgpYda{npeqXv1}bIbCj{6B$4K9T$7-1z_zPTu~;B^3$y zXr8=WFH0!*=~67e|NLCY%l4D|1qmDS0?sZK3HVf=yxbQ_*q+CqUw$f2KIzm2B>YCs zFr6;_Ce`lClW!9HI0S%ePnJ z64JiWYLJ)Di=GySOFpphBykCgP$Ahji9zl^<+*sWW6J&^IHvX@7DtX@Q<= zbXcK-+^>|EkiKR!%FE|X86n@0lhkjdoP=e0@^b%E<Cy#lV&Ee^)Rm?EvR>3brR}o=bbl(dB;MT`wxN*J{AA~ literal 0 HcmV?d00001 diff --git a/tinygpmp/fec/README.md b/tinygpmp/fec/README.md new file mode 100644 index 000000000..ed594ef0c --- /dev/null +++ b/tinygpmp/fec/README.md @@ -0,0 +1,2 @@ +# Forward Error Correction + From c1408bf3ea0bd3669fee0a0bda87c64334f72bca Mon Sep 17 00:00:00 2001 From: akielaries Date: Mon, 23 Dec 2024 18:03:14 -0800 Subject: [PATCH 7/8] stubs --- tinygpmp/{ => include}/fec/README.md | 0 tinygpmp/modules/fec/README.md | 2 ++ 2 files changed, 2 insertions(+) rename tinygpmp/{ => include}/fec/README.md (100%) create mode 100644 tinygpmp/modules/fec/README.md diff --git a/tinygpmp/fec/README.md b/tinygpmp/include/fec/README.md similarity index 100% rename from tinygpmp/fec/README.md rename to tinygpmp/include/fec/README.md diff --git a/tinygpmp/modules/fec/README.md b/tinygpmp/modules/fec/README.md new file mode 100644 index 000000000..ed594ef0c --- /dev/null +++ b/tinygpmp/modules/fec/README.md @@ -0,0 +1,2 @@ +# Forward Error Correction + From 7b21c7a1f45fb9a2ad3b1895e35268c610410f23 Mon Sep 17 00:00:00 2001 From: akielaries Date: Mon, 23 Dec 2024 18:27:44 -0800 Subject: [PATCH 8/8] readme. need to get basic boot and UART app working for an example/hoster --- tinygpmp/README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tinygpmp/README.md b/tinygpmp/README.md index 1172c2cc9..4bd19ea1a 100644 --- a/tinygpmp/README.md +++ b/tinygpmp/README.md @@ -2,3 +2,8 @@ `tinygpmp` aims to support low-voltage and resource constrained devices, primarily microcontrollers. For now, focus on support for AVR and STM32 series devices is planned. + +## Testing +The `fixture` directory contains instructions and source code for an example application +and debugging via the UART pins on an STM32 and monitoring this connection using +screen or minicom on the `/dev`