Skip to content

Commit e647d04

Browse files
authored
Merge pull request #1968 from CEED/jeremy/magma-new
Magma use ceed includes
2 parents 596876e + f95a87b commit e647d04

1 file changed

Lines changed: 31 additions & 87 deletions

File tree

backends/magma/ceed-magma-basis.c

Lines changed: 31 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -317,11 +317,7 @@ static int CeedBasisApplyNonTensorCore_Magma(CeedBasis basis, bool apply_add, Ce
317317
CeedFESpace fe_space;
318318
CeedInt q_comp_interp, q_comp_deriv;
319319
Ceed ceed_delegate;
320-
char *basis_kernel_source;
321-
const char *basis_kernel_path, *weight_kernel_path;
322-
char **file_paths = NULL;
323-
CeedInt num_file_paths = 0;
324-
magma_int_t arch = magma_getdevice_arch();
320+
magma_int_t arch = magma_getdevice_arch();
325321

326322
// Tuning parameters for NB
327323
CeedCallBackend(CeedBasisGetFESpace(basis, &fe_space));
@@ -346,14 +342,12 @@ static int CeedBasisApplyNonTensorCore_Magma(CeedBasis basis, bool apply_add, Ce
346342
CeedCallBackend(CeedGetDelegate(ceed, &ceed_delegate));
347343

348344
// Compile kernels
349-
CeedCallBackend(CeedGetJitAbsolutePath(ceed, "ceed/jit-source/magma/magma-basis-interp-deriv-nontensor.h", &basis_kernel_path));
350-
CeedDebug256(ceed, CEED_DEBUG_COLOR_SUCCESS, "----- Loading Basis Kernel Source -----\n");
351-
CeedCallBackend(CeedLoadSourceAndInitializeBuffer(ceed, basis_kernel_path, &num_file_paths, &file_paths, &basis_kernel_source));
352-
if (!impl->Weight) {
353-
CeedCallBackend(CeedGetJitAbsolutePath(ceed, "ceed/jit-source/magma/magma-basis-weight-nontensor.h", &weight_kernel_path));
354-
CeedCallBackend(CeedLoadSourceToInitializedBuffer(ceed, weight_kernel_path, &num_file_paths, &file_paths, &basis_kernel_source));
355-
}
356-
CeedDebug256(ceed, CEED_DEBUG_COLOR_SUCCESS, "----- Loading Basis Kernel Source Complete! -----\n");
345+
char basis_kernel_source[] =
346+
"// Interp and grad basis source\n"
347+
"#include <ceed/jit-source/magma/magma-basis-interp-deriv-nontensor.h>\n"
348+
"// Weight basis source\n"
349+
"#include <ceed/jit-source/magma/magma-basis-weight-nontensor.h>\n";
350+
357351
CeedCallBackend(CeedCompileMagma(ceed_delegate, basis_kernel_source, "basis_nontensor", &impl->module[iN], 8, "BASIS_Q_COMP_INTERP",
358352
q_comp_interp, "BASIS_Q_COMP_DERIV", q_comp_deriv, "BASIS_P", P, "BASIS_Q", Q, "BASIS_NB_INTERP_N",
359353
impl->NB_interp[iN], "BASIS_NB_INTERP_T", impl->NB_interp_t[iN], "BASIS_NB_DERIV_N", impl->NB_deriv[iN],
@@ -366,12 +360,7 @@ static int CeedBasisApplyNonTensorCore_Magma(CeedBasis basis, bool apply_add, Ce
366360
CeedCallBackend(CeedGetKernelMagma(ceed, impl->module[iN], "magma_deriv_nontensor_ta", &impl->DerivTransposeAdd[iN]));
367361
if (!impl->Weight) {
368362
CeedCallBackend(CeedGetKernelMagma(ceed, impl->module[iN], "magma_weight_nontensor", &impl->Weight));
369-
CeedCallBackend(CeedFree(&weight_kernel_path));
370363
}
371-
CeedCallBackend(CeedFree(&basis_kernel_path));
372-
CeedCallBackend(CeedFree(&basis_kernel_source));
373-
for (CeedInt i = 0; i < num_file_paths; i++) CeedCallBackend(CeedFree(&file_paths[i]));
374-
CeedCallBackend(CeedFree(&file_paths));
375364
CeedCallBackend(CeedDestroy(&ceed_delegate));
376365
}
377366
}
@@ -532,10 +521,6 @@ int CeedBasisCreateTensorH1_Magma(CeedInt dim, CeedInt P_1d, CeedInt Q_1d, const
532521
const CeedScalar *q_ref_1d, const CeedScalar *q_weight_1d, CeedBasis basis) {
533522
Ceed ceed, ceed_delegate;
534523
Ceed_Magma *data;
535-
char *basis_kernel_source;
536-
const char *interp_kernel_path, *grad_kernel_path, *weight_kernel_path;
537-
char **file_paths = NULL;
538-
CeedInt num_file_paths = 0;
539524
CeedInt num_comp;
540525
CeedBasis_Magma *impl;
541526

@@ -558,35 +543,19 @@ int CeedBasisCreateTensorH1_Magma(CeedInt dim, CeedInt P_1d, CeedInt Q_1d, const
558543

559544
// Compile kernels
560545
CeedCallBackend(CeedBasisGetNumComponents(basis, &num_comp));
561-
{
562-
char *interp_kernel_name_base = "ceed/jit-source/magma/magma-basis-interp";
563-
CeedInt interp_kernel_name_len = strlen(interp_kernel_name_base) + 6;
564-
char interp_kernel_name[interp_kernel_name_len];
546+
char basis_kernel_source[CEED_MAX_RESOURCE_LEN];
547+
548+
snprintf(basis_kernel_source, CEED_MAX_RESOURCE_LEN,
549+
"// Interp basis source\n"
550+
"#include <ceed/jit-source/magma/magma-basis-interp-%" CeedInt_FMT
551+
"d.h>\n"
552+
"// Grad basis source\n"
553+
"#include <ceed/jit-source/magma/magma-basis-grad-%" CeedInt_FMT
554+
"d.h>\n"
555+
"// Weight basis source\n"
556+
"#include <ceed/jit-source/magma/magma-basis-weight-%" CeedInt_FMT "d.h>\n",
557+
num_comp, num_comp, num_comp);
565558

566-
snprintf(interp_kernel_name, interp_kernel_name_len, "%s-%" CeedInt_FMT "d.h", interp_kernel_name_base, dim);
567-
CeedCallBackend(CeedGetJitAbsolutePath(ceed, interp_kernel_name, &interp_kernel_path));
568-
}
569-
CeedDebug256(ceed, CEED_DEBUG_COLOR_SUCCESS, "----- Loading Basis Kernel Source -----\n");
570-
CeedCallBackend(CeedLoadSourceAndInitializeBuffer(ceed, interp_kernel_path, &num_file_paths, &file_paths, &basis_kernel_source));
571-
{
572-
char *grad_kernel_name_base = "ceed/jit-source/magma/magma-basis-grad";
573-
CeedInt grad_kernel_name_len = strlen(grad_kernel_name_base) + 6;
574-
char grad_kernel_name[grad_kernel_name_len];
575-
576-
snprintf(grad_kernel_name, grad_kernel_name_len, "%s-%" CeedInt_FMT "d.h", grad_kernel_name_base, dim);
577-
CeedCallBackend(CeedGetJitAbsolutePath(ceed, grad_kernel_name, &grad_kernel_path));
578-
}
579-
CeedCallBackend(CeedLoadSourceToInitializedBuffer(ceed, grad_kernel_path, &num_file_paths, &file_paths, &basis_kernel_source));
580-
{
581-
char *weight_kernel_name_base = "ceed/jit-source/magma/magma-basis-weight";
582-
CeedInt weight_kernel_name_len = strlen(weight_kernel_name_base) + 6;
583-
char weight_kernel_name[weight_kernel_name_len];
584-
585-
snprintf(weight_kernel_name, weight_kernel_name_len, "%s-%" CeedInt_FMT "d.h", weight_kernel_name_base, dim);
586-
CeedCallBackend(CeedGetJitAbsolutePath(ceed, weight_kernel_name, &weight_kernel_path));
587-
}
588-
CeedCallBackend(CeedLoadSourceToInitializedBuffer(ceed, weight_kernel_path, &num_file_paths, &file_paths, &basis_kernel_source));
589-
CeedDebug256(ceed, CEED_DEBUG_COLOR_SUCCESS, "----- Loading Basis Kernel Source Complete! -----\n");
590559
CeedCallBackend(CeedCompileMagma(ceed_delegate, basis_kernel_source, "basis_h1_tensor", &impl->module, 5, "BASIS_DIM", dim, "BASIS_NUM_COMP",
591560
num_comp, "BASIS_P", P_1d, "BASIS_Q", Q_1d, "BASIS_MAX_P_Q", CeedIntMax(P_1d, Q_1d)));
592561
switch (dim) {
@@ -618,13 +587,6 @@ int CeedBasisCreateTensorH1_Magma(CeedInt dim, CeedInt P_1d, CeedInt Q_1d, const
618587
CeedCallBackend(CeedGetKernelMagma(ceed, impl->module, "magma_weight_3d_kernel", &impl->Weight));
619588
break;
620589
}
621-
CeedCallBackend(CeedFree(&interp_kernel_path));
622-
CeedCallBackend(CeedFree(&grad_kernel_path));
623-
CeedCallBackend(CeedFree(&weight_kernel_path));
624-
CeedCallBackend(CeedFree(&basis_kernel_source));
625-
for (CeedInt i = 0; i < num_file_paths; i++) CeedCallBackend(CeedFree(&file_paths[i]));
626-
CeedCallBackend(CeedFree(&file_paths));
627-
628590
CeedCallBackend(CeedBasisSetData(basis, impl));
629591

630592
CeedCallBackend(CeedSetBackendFunction(ceed, "Basis", basis, "Apply", CeedBasisApply_Magma));
@@ -671,22 +633,16 @@ int CeedBasisCreateH1_Magma(CeedElemTopology topo, CeedInt dim, CeedInt num_node
671633

672634
// Compile the weight kernel if it won't be compiled later on
673635
if (num_nodes > MAGMA_NONTENSOR_CUSTOM_KERNEL_MAX_P || num_qpts > MAGMA_NONTENSOR_CUSTOM_KERNEL_MAX_Q) {
674-
Ceed ceed_delegate;
675-
char *basis_kernel_source;
676-
const char *weight_kernel_path;
636+
Ceed ceed_delegate;
677637

678638
// The RTC compilation code expects a Ceed with the common Ceed_Cuda or Ceed_Hip data
679639
CeedCallBackend(CeedGetDelegate(ceed, &ceed_delegate));
680640

681641
// Compile weight kernel (the remainder of kernel compilation happens at first call to CeedBasisApply)
682-
CeedCallBackend(CeedGetJitAbsolutePath(ceed, "ceed/jit-source/magma/magma-basis-weight-nontensor.h", &weight_kernel_path));
683-
CeedDebug256(ceed, CEED_DEBUG_COLOR_SUCCESS, "----- Loading Basis Kernel Source -----\n");
684-
CeedCallBackend(CeedLoadSourceToBuffer(ceed, weight_kernel_path, &basis_kernel_source));
685-
CeedDebug256(ceed, CEED_DEBUG_COLOR_SUCCESS, "----- Loading Basis Kernel Source Complete! -----\n");
686-
CeedCallBackend(CeedCompileMagma(ceed_delegate, basis_kernel_source, "basis_h1_tensor", &impl->module[0], 1, "BASIS_Q", num_qpts));
642+
const char basis_kernel_source[] = "// Weight basis source\n#include <ceed/jit-source/magma/magma-basis-weight-nontensor.h.h>\n";
643+
644+
CeedCallBackend(CeedCompileMagma(ceed_delegate, basis_kernel_source, "basis_h1_nontensor_weight", &impl->module[0], 1, "BASIS_Q", num_qpts));
687645
CeedCallBackend(CeedGetKernelMagma(ceed, impl->module[0], "magma_weight_nontensor", &impl->Weight));
688-
CeedCallBackend(CeedFree(&weight_kernel_path));
689-
CeedCallBackend(CeedFree(&basis_kernel_source));
690646
CeedCallBackend(CeedDestroy(&ceed_delegate));
691647
}
692648

@@ -735,22 +691,16 @@ int CeedBasisCreateHdiv_Magma(CeedElemTopology topo, CeedInt dim, CeedInt num_no
735691

736692
// Compile the weight kernel if it won't be compiled later on
737693
if (num_nodes > MAGMA_NONTENSOR_CUSTOM_KERNEL_MAX_P || num_qpts > MAGMA_NONTENSOR_CUSTOM_KERNEL_MAX_Q) {
738-
Ceed ceed_delegate;
739-
char *basis_kernel_source;
740-
const char *weight_kernel_path;
694+
Ceed ceed_delegate;
741695

742696
// The RTC compilation code expects a Ceed with the common Ceed_Cuda or Ceed_Hip data
743697
CeedCallBackend(CeedGetDelegate(ceed, &ceed_delegate));
744698

745699
// Compile weight kernel (the remainder of kernel compilation happens at first call to CeedBasisApply)
746-
CeedCallBackend(CeedGetJitAbsolutePath(ceed, "ceed/jit-source/magma/magma-basis-weight-nontensor.h", &weight_kernel_path));
747-
CeedDebug256(ceed, CEED_DEBUG_COLOR_SUCCESS, "----- Loading Basis Kernel Source -----\n");
748-
CeedCallBackend(CeedLoadSourceToBuffer(ceed, weight_kernel_path, &basis_kernel_source));
749-
CeedDebug256(ceed, CEED_DEBUG_COLOR_SUCCESS, "----- Loading Basis Kernel Source Complete! -----\n");
750-
CeedCallBackend(CeedCompileMagma(ceed_delegate, basis_kernel_source, "basis_h_div", &impl->module[0], 1, "BASIS_Q", num_qpts));
700+
const char basis_kernel_source[] = "// Weight basis source\n#include <ceed/jit-source/magma/magma-basis-weight-nontensor.h.h>\n";
701+
702+
CeedCallBackend(CeedCompileMagma(ceed_delegate, basis_kernel_source, "basis_h_div_weight", &impl->module[0], 1, "BASIS_Q", num_qpts));
751703
CeedCallBackend(CeedGetKernelMagma(ceed, impl->module[0], "magma_weight_nontensor", &impl->Weight));
752-
CeedCallBackend(CeedFree(&weight_kernel_path));
753-
CeedCallBackend(CeedFree(&basis_kernel_source));
754704
CeedCallBackend(CeedDestroy(&ceed_delegate));
755705
}
756706

@@ -799,22 +749,16 @@ int CeedBasisCreateHcurl_Magma(CeedElemTopology topo, CeedInt dim, CeedInt num_n
799749

800750
// Compile the weight kernel if it won't be compiled later on
801751
if (num_nodes > MAGMA_NONTENSOR_CUSTOM_KERNEL_MAX_P || num_qpts > MAGMA_NONTENSOR_CUSTOM_KERNEL_MAX_Q) {
802-
Ceed ceed_delegate;
803-
char *basis_kernel_source;
804-
const char *weight_kernel_path;
752+
Ceed ceed_delegate;
805753

806754
// The RTC compilation code expects a Ceed with the common Ceed_Cuda or Ceed_Hip data
807755
CeedCallBackend(CeedGetDelegate(ceed, &ceed_delegate));
808756

809757
// Compile weight kernel (the remainder of kernel compilation happens at first call to CeedBasisApply)
810-
CeedCallBackend(CeedGetJitAbsolutePath(ceed, "ceed/jit-source/magma/magma-basis-weight-nontensor.h", &weight_kernel_path));
811-
CeedDebug256(ceed, CEED_DEBUG_COLOR_SUCCESS, "----- Loading Basis Kernel Source -----\n");
812-
CeedCallBackend(CeedLoadSourceToBuffer(ceed, weight_kernel_path, &basis_kernel_source));
813-
CeedDebug256(ceed, CEED_DEBUG_COLOR_SUCCESS, "----- Loading Basis Kernel Source Complete! -----\n");
814-
CeedCallBackend(CeedCompileMagma(ceed_delegate, basis_kernel_source, "basis_h_curl", &impl->module[0], 1, "BASIS_Q", num_qpts));
758+
const char basis_kernel_source[] = "// Weight basis source\n#include <ceed/jit-source/magma/magma-basis-weight-nontensor.h.h>\n";
759+
760+
CeedCallBackend(CeedCompileMagma(ceed_delegate, basis_kernel_source, "basis_h_curl_weight", &impl->module[0], 1, "BASIS_Q", num_qpts));
815761
CeedCallBackend(CeedGetKernelMagma(ceed, impl->module[0], "magma_weight_nontensor", &impl->Weight));
816-
CeedCallBackend(CeedFree(&weight_kernel_path));
817-
CeedCallBackend(CeedFree(&basis_kernel_source));
818762
CeedCallBackend(CeedDestroy(&ceed_delegate));
819763
}
820764

0 commit comments

Comments
 (0)