aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDeterminant <ted.sybil@gmail.com>2015-06-07 21:59:10 +0800
committerDeterminant <ted.sybil@gmail.com>2015-06-07 21:59:10 +0800
commit0f30b1a4b5e583cb1df7dbb349c1af4378e41369 (patch)
tree967c6326b83cda2b92eee5f597dde0e74b071dbb
parent6e720b961f7edac9c3a41affe0ca40dd0ec9fc85 (diff)
fix minor bugs in cumatrix; clean up part of code
-rw-r--r--common.c2
-rw-r--r--examples/asr_trainer.lua7
-rw-r--r--matrix/cukernel.cu1
-rw-r--r--matrix/cumatrix.c28
-rw-r--r--matrix/generic/cumatrix.c6
-rw-r--r--matrix/generic/matrix.c1
-rw-r--r--matrix/init.c21
-rw-r--r--matrix/mmatrix.c13
8 files changed, 53 insertions, 26 deletions
diff --git a/common.c b/common.c
index 355d7ff..b4e39e6 100644
--- a/common.c
+++ b/common.c
@@ -3,7 +3,7 @@
int nerv_error(lua_State *L, const char *err_mesg_fmt, ...) {
va_list ap;
va_start(ap, err_mesg_fmt);
- lua_pushstring(L, "Nerv internal error: ");
+ lua_pushstring(L, "[nerv] internal error: ");
lua_pushvfstring(L, err_mesg_fmt, ap);
lua_concat(L, 2);
lua_error(L);
diff --git a/examples/asr_trainer.lua b/examples/asr_trainer.lua
index 2993192..05d770f 100644
--- a/examples/asr_trainer.lua
+++ b/examples/asr_trainer.lua
@@ -33,6 +33,7 @@ function build_trainer(ifname)
collectgarbage("collect")
end
print_stat(crit)
+ nerv.CuMatrix.print_profile()
if (not bp) and prefix ~= nil then
nerv.info("writing back...")
local fname = string.format("%s_cv%.3f.nerv",
@@ -71,7 +72,9 @@ for i = 1, max_iter do
nerv.info("[TR] training set %d: %.3f", i, accu_tr)
local accu_new = trainer(
string.format("%s_%s_iter_%d_lr%f_tr%.3f",
- string.gsub(pf0, "(.*/)(.*)%..*", "%2"),
+ string.gsub(
+ (string.gsub(pf0, "(.*/)(.*)", "%2")),
+ "(.*)%..*", "%1"),
os.date("%Y%m%d%H%M%S"),
i, gconf.lrate,
accu_tr),
@@ -91,5 +94,5 @@ for i = 1, max_iter do
if accu_new > accu_best then
accu_best = accu_new
end
- nerv.Matrix.print_profile()
+-- nerv.Matrix.print_profile()
end
diff --git a/matrix/cukernel.cu b/matrix/cukernel.cu
index fbac369..a19030a 100644
--- a/matrix/cukernel.cu
+++ b/matrix/cukernel.cu
@@ -9,6 +9,7 @@
#undef MATRIX_ELEM
#undef MATRIX_ELEM_PTR
#undef MATRIX_ELEM_FMT
+#undef MATRIX_ELEM_WRITE_FMT
#define cudak_(NAME) cudak_double_ ## NAME
#define MATRIX_USE_DOUBLE
diff --git a/matrix/cumatrix.c b/matrix/cumatrix.c
index ee5ecaa..af34fb4 100644
--- a/matrix/cumatrix.c
+++ b/matrix/cumatrix.c
@@ -1,11 +1,14 @@
#define NERV_GENERIC_CUMATRIX
#include "../common.h"
#include "cuda_helper.h"
+#include <string.h>
+#define PROFILE_HASHMAP_SIZE 123457
static cublasHandle_t cublas_handle;
static cudaEvent_t profile_start, profile_stop;
static HashMap *profile;
-int print_profile(lua_State *L) {
+static int print_profile(lua_State *L) {
+ (void)L;
size_t i;
fprintf(stderr, "*** [nerv cumatrix profile] **\n");
for (i = 0; i < profile->size; i++)
@@ -19,7 +22,8 @@ int print_profile(lua_State *L) {
return 0;
}
-int clear_profile(lua_State *L) {
+static int clear_profile(lua_State *L) {
+ (void)L;
hashmap_clear(profile);
return 0;
}
@@ -35,6 +39,25 @@ void accu_profile(const char *name, float delta) {
*val += delta;
}
+static const luaL_Reg cumatrix_methods[] = {
+ {"print_profile", print_profile},
+ {"clear_profile", clear_profile},
+ {NULL, NULL}
+};
+
+extern void nerv_matrix_cuda_float_init(lua_State *L);
+extern void nerv_matrix_cuda_double_init(lua_State *L);
+
+void nerv_cumatrix_init(lua_State *L) {
+ luaL_register(L, NULL, cumatrix_methods);
+ cublasCreate(&cublas_handle);
+ cudaEventCreate(&profile_start);
+ cudaEventCreate(&profile_stop);
+ profile = hashmap_create(PROFILE_HASHMAP_SIZE, bkdr_hash, strcmp);
+ nerv_matrix_cuda_float_init(L);
+ nerv_matrix_cuda_double_init(L);
+}
+
#define MATRIX_USE_FLOAT
#define cuda_matrix_(NAME) cuda_matrix_float_##NAME
#define nerv_matrix_(NAME) nerv_matrix_cuda_float_##NAME
@@ -51,6 +74,7 @@ const char *nerv_matrix_(tname) = "nerv.CuMatrixFloat";
#undef MATRIX_ELEM
#undef MATRIX_ELEM_PTR
#undef MATRIX_ELEM_FMT
+#undef MATRIX_ELEM_WRITE_FMT
#undef MATRIX_CUMATRIX_HOST_TNAME
#define MATRIX_USE_DOUBLE
diff --git a/matrix/generic/cumatrix.c b/matrix/generic/cumatrix.c
index a340aef..a8e18e0 100644
--- a/matrix/generic/cumatrix.c
+++ b/matrix/generic/cumatrix.c
@@ -11,11 +11,9 @@
#define MATRIX_BASE_TNAME nerv_matrix_cuda_tname
#define NERV_GENERIC_MATRIX
#define NERV_GENERIC_CUKERNEL
-#define PROFILE_HASHMAP_SIZE 123457
#include "../../common.h"
#include "../cukernel.h"
#include "../cuda_helper.h"
-#include <string.h>
Matrix *nerv_matrix_(new_)(lua_State *L, long nrow, long ncol);
void nerv_matrix_(data_free)(lua_State *L, Matrix *self);
@@ -442,10 +440,6 @@ static const luaL_Reg nerv_matrix_(extra_methods)[] = {
static void cuda_matrix_(init)(lua_State *L) {
luaN_append_methods(L, nerv_matrix_(extra_methods));
- cublasCreate(&cublas_handle);
- cudaEventCreate(&profile_start);
- cudaEventCreate(&profile_stop);
- profile = hashmap_create(PROFILE_HASHMAP_SIZE, bkdr_hash, strcmp);
}
static void cuda_matrix_(free)(lua_State *L, MATRIX_ELEM *ptr) {
diff --git a/matrix/generic/matrix.c b/matrix/generic/matrix.c
index d6b0aea..e17fb42 100644
--- a/matrix/generic/matrix.c
+++ b/matrix/generic/matrix.c
@@ -6,6 +6,7 @@ extern const char *nerv_matrix_(tname);
extern const char *MATRIX_BASE_TNAME;
void nerv_matrix_(data_free)(lua_State *L, Matrix *self) {
+ (void)L;
assert(*self->data_ref > 0);
if (--(*self->data_ref) == 0)
{
diff --git a/matrix/init.c b/matrix/init.c
index 7b7f478..c29d7e9 100644
--- a/matrix/init.c
+++ b/matrix/init.c
@@ -5,21 +5,14 @@ const char *nerv_matrix_tname = "nerv.Matrix";
const char *nerv_matrix_cuda_tname = "nerv.CuMatrix";
const char *nerv_matrix_host_tname = "nerv.MMatrix";
-void nerv_matrix_host_float_init(lua_State *L);
-void nerv_matrix_cuda_float_init(lua_State *L);
-void nerv_matrix_host_double_init(lua_State *L);
-void nerv_matrix_cuda_double_init(lua_State *L);
-void nerv_matrix_host_int_init(lua_State *L);
-int print_profile(lua_State *L);
-int clear_profile(lua_State *L);
+void nerv_cumatrix_init(lua_State *L);
+void nerv_mmatrix_init(lua_State *L);
static const luaL_Reg matrix_methods[] = {
{"__tostring__", nerv_error_method_not_implemented },
{"__add__", nerv_error_method_not_implemented },
{"__sub__", nerv_error_method_not_implemented },
{"__mul__", nerv_error_method_not_implemented },
- {"print_profile", print_profile},
- {"clear_profile", clear_profile},
{NULL, NULL}
};
@@ -32,13 +25,11 @@ void nerv_matrix_init(lua_State *L) {
/* CuMatrix inherits from Matrix */
luaT_newmetatable(L, nerv_matrix_cuda_tname, nerv_matrix_tname,
NULL, NULL, NULL);
- nerv_matrix_cuda_float_init(L);
- nerv_matrix_cuda_double_init(L);
-
+ nerv_cumatrix_init(L);
+ lua_pop(L, 1);
/* MMatrix inherits from Matrix */
luaT_newmetatable(L, nerv_matrix_host_tname, nerv_matrix_tname,
NULL, NULL, NULL);
- nerv_matrix_host_float_init(L);
- nerv_matrix_host_double_init(L);
- nerv_matrix_host_int_init(L);
+ nerv_mmatrix_init(L);
+ lua_pop(L, 1);
}
diff --git a/matrix/mmatrix.c b/matrix/mmatrix.c
index 81f8dfc..ffc058d 100644
--- a/matrix/mmatrix.c
+++ b/matrix/mmatrix.c
@@ -1,4 +1,15 @@
#define NERV_GENERIC_MMATRIX
+#include "../common.h"
+void nerv_matrix_host_float_init(lua_State *L);
+void nerv_matrix_host_double_init(lua_State *L);
+void nerv_matrix_host_int_init(lua_State *L);
+
+void nerv_mmatrix_init(lua_State *L) {
+ nerv_matrix_host_float_init(L);
+ nerv_matrix_host_double_init(L);
+ nerv_matrix_host_int_init(L);
+}
+
#define MATRIX_USE_FLOAT
#define host_matrix_(NAME) host_matrix_float_##NAME
#define nerv_matrix_(NAME) nerv_matrix_host_float_##NAME
@@ -10,6 +21,7 @@ const char *nerv_matrix_(tname) = "nerv.MMatrixFloat";
#undef MATRIX_ELEM
#undef MATRIX_ELEM_PTR
#undef MATRIX_ELEM_FMT
+#undef MATRIX_ELEM_WRITE_FMT
#define NERV_GENERIC_MMATRIX
#define MATRIX_USE_DOUBLE
@@ -23,6 +35,7 @@ const char *nerv_matrix_(tname) = "nerv.MMatrixDouble";
#undef MATRIX_ELEM
#undef MATRIX_ELEM_PTR
#undef MATRIX_ELEM_FMT
+#undef MATRIX_ELEM_WRITE_FMT
#define NERV_GENERIC_MMATRIX
#define MATRIX_USE_INT