Skip to content

Sync: main - Document #6

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 16 commits into from
Mar 13, 2025
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -19,14 +19,17 @@ if(NOT TARGET ${PROJECT_NAME})
"include/ae2f/Ann/Sp.h.c/clean.script.h"
"include/ae2f/Ann/Sp.h.c/cleandef.h"
"include/ae2f/Ann/Sp.h.cxx/Sp.hh"
"include/ae2f/Ann/Sp.h.cxx/mSp.hh"
"include/ae2f/Ann/Sp.h.cxx/imp.hh"

"include/ae2f/Ann/Slp.h"
"include/ae2f/Ann/Slp.h.cxx/Slp.hh"
"include/ae2f/Ann/Slp.h.cxx/mSlp.hh"
"include/ae2f/Ann/Slp.h.cxx/imp.hh"

"include/ae2f/Ann/Mlp.h"
"include/ae2f/Ann/Mlp.h.cxx/Mlp.hh"
"include/ae2f/Ann/Mlp.h.cxx/mMlp.hh"
"include/ae2f/Ann/Mlp.h.cxx/imp.hh"
)
target_link_libraries(Ann-H INTERFACE Core)
@@ -77,9 +80,16 @@ if(ae2fCL_needed)
include ae2fCL
${PROJECT_SOURCE_DIR}/Config/CL-Ann-H.cmake.in
"include/ae2fCL/Ann.h"

"include/ae2fCL/Ann/Sp.h.cxx/Sp.hh"
"include/ae2fCL/Ann/Sp.h.cxx/mSp.hh"
"include/ae2fCL/Ann/Sp.h.cxx/imp.hh"
"include/ae2fCL/Ann/Sp.h"

"include/ae2fCL/Ann/Slp.h.cxx/Slp.hh"
"include/ae2fCL/Ann/Slp.h.cxx/mSlp.hh"
"include/ae2fCL/Ann/Slp.h.cxx/imp.hh"
"include/ae2fCL/Ann/Slp.h"
)

ae2f_RulerMeasure(
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# Ann
> Rel-v0.0.0
> Rel-v1.0.0

ANN interfaces with basic implementation for example.

@@ -14,7 +14,7 @@ ANN interfaces with basic implementation for example.
- cmake

# CL-Ann
> Rel-v2.1.0
> Rel-v3.1.0

A simple ann project with opencl written in C.

113 changes: 48 additions & 65 deletions include/ae2f/Ann/Mlp.h
Original file line number Diff line number Diff line change
@@ -16,101 +16,80 @@
#include <ae2f/Pack/Beg.h>

/// @brief
/// Element of @ref ae2f_AnnMlp
typedef ae2f_AnnSlp ae2f_AnnMlpEl;
/// Element of @ref ae2f_mAnnMlp
typedef ae2f_mAnnSlp ae2f_mAnnMlpEl;

#if ae2f_WhenCXX(!) 0

struct ae2f_AnnMlp : ae2f_AnnSlp {
#include "Mlp.h.cxx/Mlp.hh"
struct ae2f_mAnnMlp {
#include "Mlp.h.cxx/mMlp.hh"
};

#else

/// @class ae2f_AnnMlp
/// @extends ae2f_AnnSlp
/// @class ae2f_mAnnMlp
/// @extends ae2f_mAnnSlp
/// @brief
/// # Multi Layered Perceptron
///
///
typedef ae2f_AnnSlp ae2f_AnnMlp;
typedef ae2f_mAnnSlp ae2f_mAnnMlp;

#endif
/// @memberof ae2f_AnnMlp
/// @details ae2f_AnnSlpPerVPad
#define ae2f_AnnMlpLayerVPad ae2f_AnnSlpPerVPad

/// @memberof ae2f_AnnMlp
#define ae2f_AnnMlpLayerV(mlp, i, ...) \
ae2f_reinterpret_cast(__VA_ARGS__ ae2f_AnnMlpEl*, ae2f_AnnMlpLayerVPad(mlp, __VA_ARGS__)[i] + 1)
typedef union ae2f_AnnMlp {
ae2f_mAnnSlp Slp;
ae2f_mAnnMlp Mlp;

/// @memberof ae2f_AnnMlp
#define ae2f_AnnMlpInitSz(layerc, add) \
(sizeof(ae2f_AnnMlp) + (sizeof(void*) * ((layerc))) + (sizeof(size_t) * 1) + (add))
#if ae2f_WhenCXX(!)0
#include "Mlp.h.cxx/Mlp.hh"
#endif
} ae2f_AnnMlp;

/// @memberof ae2f_mAnnMlp
/// @details ae2f_mAnnSlpPerVPad
#define ae2f_mAnnMlpLayerVPad ae2f_mAnnSlpPerVPad

/// @memberof ae2f_mAnnMlp
#define ae2f_mAnnMlpLayerV(mlp, i, ...) \
ae2f_reinterpret_cast(__VA_ARGS__ ae2f_mAnnMlpEl*, ae2f_mAnnMlpLayerVPad(mlp, __VA_ARGS__)[i] + 1)

/// @memberof ae2f_mAnnMlp
#define ae2f_mAnnMlpInitSz(layerc, add) \
(sizeof(ae2f_mAnnMlp) + (sizeof(void*) * ((layerc))) + (sizeof(size_t) * 1) + (add))

/// @brief
/// Predict function api. \n
/// For details see @ref ae2f_AnnMlpPredict_t.
typedef ae2f_AnnSlpPredict_t ae2f_AnnMlpPredict_t;
/// For details see @ref ae2f_mAnnMlpPredict_t.
typedef ae2f_mAnnSlpPredict_t ae2f_mAnnMlpPredict_t;

/// @brief
/// Training function api. \n
/// For details see @ref ae2f_AnnMlpTrain_t
typedef ae2f_AnnSlpTrain_t ae2f_AnnMlpTrain_t;
/// For details see @ref ae2f_mAnnMlpTrain_t
typedef ae2f_mAnnSlpTrain_t ae2f_mAnnMlpTrain_t;

/// @brief
/// Cleaning function api.
typedef ae2f_AnnSlpClean_t ae2f_AnnMlpClean_t;
typedef ae2f_mAnnSlpClean_t ae2f_mAnnMlpClean_t;

/// @memberof ae2f_AnnMlp
/// @memberof ae2f_mAnnMlp
/// @brief
/// The predicted max buffer count among all perceptron's possible length of I/O.
#define ae2f_AnnMlpLayerBuffCount(mlp, ...) \
ae2f_AnnSlpX(mlp, __VA_ARGS__ size_t*, __VA_ARGS__)

/// @memberof ae2f_AnnMlp
/// @brief
/// Its length is @ref (*ae2f_AnnMlpLayerBuffCount(mlp) * mlp->layerc, 3 * sizeof(ae2f_float_t)).
#define ae2f_AnnMlpCache(mlp, ...) \
ae2f_reinterpret_cast(__VA_ARGS__ ae2f_float_t**, ae2f_AnnMlpLayerBuffCount(mlp, __VA_ARGS__) + 1)

/// @memberof ae2f_AnnMlp
/// @brief
#define ae2f_AnnMlpX(mlp,type,...) \
ae2f_reinterpret_cast(__VA_ARGS__ type, ae2f_AnnMlpCache(mlp, __VA_ARGS__) + 1)
#define ae2f_mAnnMlpLayerBuffCount(mlp, ...) \
ae2f_mAnnSlpX(mlp, __VA_ARGS__ size_t*, __VA_ARGS__)

/// @memberof ae2f_AnnMlp
/// @memberof ae2f_mAnnMlp
/// @brief
/// Predict function call. \n
/// See @ref ae2f_AnnSlpPredict
#define ae2f_AnnMlpPredict ae2f_AnnSlpPredict
/// Its length is @ref (*ae2f_mAnnMlpLayerBuffCount(mlp) * mlp->layerc, 3 * sizeof(ae2f_float_t)).
#define ae2f_mAnnMlpCache(mlp, ...) \
ae2f_reinterpret_cast(__VA_ARGS__ ae2f_float_t**, ae2f_mAnnMlpLayerBuffCount(mlp, __VA_ARGS__) + 1)

/// @memberof ae2f_AnnMlp
/// @memberof ae2f_mAnnMlp
/// @brief
/// Training function call. \n
/// See @ref ae2f_AnnSlpTrain
#define ae2f_AnnMlpTrain ae2f_AnnSlpTrain
#define ae2f_mAnnMlpX(mlp,type,...) \
ae2f_reinterpret_cast(__VA_ARGS__ type, ae2f_mAnnMlpCache(mlp, __VA_ARGS__) + 1)

/// @memberof ae2f_AnnMlp
/// @brief
/// See @ref ae2f_AnnSlpTrainA
#define ae2f_AnnMlpTrainA ae2f_AnnSlpTrainA

/// @memberof ae2f_AnnMlp
/// @brief
/// See @ref ae2f_AnnSlpTrainB
#define ae2f_AnnMlpTrainB ae2f_AnnSlpTrainB

/// @memberof ae2f_AnnMlp
/// @brief
/// Deleting function. \n
/// We are reusing the previous definition since the process is literally saem.
///
/// See @ref ae2f_AnnSlpDel
#define ae2f_AnnMlpDel ae2f_AnnSlpDel
#define ae2f_AnnMlpClean ae2f_AnnSlpClean

/// @memberof ae2f_AnnMlp
/// @memberof ae2f_mAnnMlp
/// @brief
/// d
/// @param _this
@@ -125,8 +104,8 @@ ae2f_reinterpret_cast(__VA_ARGS__ type, ae2f_AnnMlpCache(mlp, __VA_ARGS__) + 1)
/// @param errret_opt
/// @return
ae2f_extern ae2f_SHAREDCALL
size_t ae2f_AnnMlpInit(
ae2f_AnnMlp* _this,
size_t ae2f_mAnnMlpInit(
ae2f_mAnnMlp* _this,
size_t layerc,
size_t add_opt,
const size_t* layerlenv,
@@ -151,6 +130,10 @@ ae2f_AnnMlp* ae2f_AnnMlpMk(
ae2f_err_t* errret_opt
) noexcept;


#define ae2f_AnnMlpClean ae2f_AnnSlpClean
#define ae2f_AnnMlpDel ae2f_AnnSlpDel

#if ae2f_WhenCXX(!) 0
#include "Mlp.h.cxx/imp.hh"
#endif
22 changes: 6 additions & 16 deletions include/ae2f/Ann/Mlp.h.cxx/Mlp.hh
Original file line number Diff line number Diff line change
@@ -1,19 +1,9 @@
/**
* @file Mlp.hh
* @author ae2f
* @brief
* @version 0.1
* @date 2025-02-19
*
* @copyright Copyright (c) 2025
*
* Additional definition for @ref ae2f_AnnMlp, @ref ae2f_AnnMlpEl
*
*/

#include "../Mlp.h"

#define ae2f_TMP
constexprfun ae2f_AnnMlpEl* ae2f_TMP Perc(size_t a);
constexprfun const ae2f_AnnMlpEl* ae2f_TMP Perc(size_t a) const;
#undef ae2f_TMP
inline ae2f_TMP ~ae2f_AnnMlp();
#undef ae2f_TMP

private:
uint8_t szero;
constexpr ae2f_AnnMlp() : szero(0) {}
24 changes: 19 additions & 5 deletions include/ae2f/Ann/Mlp.h.cxx/imp.hh
Original file line number Diff line number Diff line change
@@ -11,13 +11,27 @@
*
*/

#define ae2f_TMP ae2f_AnnMlp::
#define ae2f_TMP ae2f_mAnnMlp::

constexprfun ae2f_mAnnMlpEl* ae2f_TMP Perc(size_t a) {
return ae2f_mAnnMlpLayerV(this->_this, a);
}
constexprfun const ae2f_mAnnMlpEl* ae2f_TMP Perc(size_t a) const {
return ae2f_mAnnMlpLayerV(this->_this, a, const);
}

constexprfun ae2f_AnnMlpEl* ae2f_TMP Perc(size_t a) {
return ae2f_AnnMlpLayerV(this, a);
constexprfun size_t* ae2f_TMP PercPad(size_t a) {
return ae2f_mAnnMlpLayerVPad(this->_this)[a];
}
constexprfun const ae2f_AnnMlpEl* ae2f_TMP Perc(size_t a) const {
return ae2f_AnnMlpLayerV(this, a, const);
constexprfun const size_t* ae2f_TMP PercPad(size_t a) const {
return ae2f_mAnnMlpLayerVPad(this->_this, const)[a];
}

#undef ae2f_TMP


#define ae2f_TMP ae2f_AnnMlp::
inline ae2f_TMP ~ae2f_AnnMlp() {
ae2f_AnnMlpClean(this);
}
#undef ae2f_TMP
25 changes: 25 additions & 0 deletions include/ae2f/Ann/Mlp.h.cxx/mMlp.hh
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
/**
* @file Mlp.hh
* @author ae2f
* @brief
* @version 0.1
* @date 2025-02-19
*
* @copyright Copyright (c) 2025
*
* Additional definition for @ref ae2f_mAnnMlp, @ref ae2f_mAnnMlpEl
*
*/

#include "../Mlp.h"

#define ae2f_TMP
constexprfun ae2f_mAnnMlpEl* ae2f_TMP Perc(size_t a);
constexprfun const ae2f_mAnnMlpEl* ae2f_TMP Perc(size_t a) const;

constexprfun size_t* ae2f_TMP PercPad(size_t);
constexprfun const size_t* ae2f_TMP PercPad(size_t) const;
#undef ae2f_TMP

private:
ae2f_mAnnSlp _this[1];
Loading