목록전체 글 (279)
ecsimsw
/// matmul_op.cc #endif // GOOGLE_CUDA template class MatMulOp : public OpKernel { public: explicit MatMulOp(OpKernelConstruction* ctx) : OpKernel(ctx), algorithms_set_already_(false) { OP_REQUIRES_OK(ctx, ctx->GetAttr("transpose_a", &transpose_a_)); OP_REQUIRES_OK(ctx, ctx->GetAttr("transpose_b", &transpose_b_)); LaunchMatMul::GetBlasGemmAlgorithm( ctx, &algorithms_, &algorithms_set_already_); ..
/// matmul_op.cc 1468 REGISTER_KERNEL_BUILDER #if defined(INTEL_MKL) // math kernel library TF_CALL_float(REGISTER_CPU_EIGEN); #else TF_CALL_float(REGISTER_CPU); #define REGISTER_CPU_EIGEN(T) \ REGISTER_KERNEL_BUILDER( \ Name("MatMul").Device(DEVICE_CPU).TypeConstraint("T").Label("eigen"), \ MatMulOp); #define REGISTER_CPU(T) \ REGISTER_KERNEL_BUILDER( \ Name("MatMul").Device(DEVICE_CPU).TypeCon..
암시적으로 생성자가 호출되면서 발생할 수 있는 의도치 않은 형 변환을 막기 위해 생성자의 명시적 호출을 강제하기 위한 키워드
/// REGISTER_KERNEL_BUILDER(Name("SparseApplyAdadelta") \ .Device(DEVICE_CPU) \ .TypeConstraint("T") \ .TypeConstraint("Tindices"), \ SparseApplyAdadeltaOp); /// #define REGISTER_KERNEL_BUILDER_UNIQ(ctr, kernel_builder, ...) \ constexpr bool should_register_##ctr##__flag = \ SHOULD_REGISTER_OP_KERNEL(#__VA_ARGS__); \ static ::tensorflow::kernel_factory::OpKernelRegistrar \ registrar__body__##ctr..
http://blog.naver.com/PostView.nhn?blogId=wkdghcjf1234&logNo=220210906503 형 변환 연산자: static_cast와 reinterpret_cast의 차이 이번에는 간단하게 static_cast와 reinterpret_cast의 차이점에 대하여 알아봅니다. 실제로 이 두가지는 비... blog.naver.com 다시 정리
stackexchange_ What's the difference between user registers and kernel registers? "Answer" It's simple - when each application program runs, it has access to its own set of registers. When you switch to other application, these register contents is saved to memory, and registers, saved from other application, loaded and this application continues its execution. Similarly, OS has its own register..
///"tensorflow/core/framework/op_kernel.cc" typedef std::unordered_multimap KernelRegistry; void* GlobalKernelRegistry() { static KernelRegistry* global_kernel_registry = new KernelRegistry; return global_kernel_registry; } static KernelRegistry* GlobalKernelRegistryTyped() { return reinterpret_cast(GlobalKernelRegistry()); } /// Conclusion KernelRegistry : Unordered multi_map , includes key, ke..
typedef OpKernel* (*Factory)(OpKernelConstruction*); - tensorflow source를 분석하다가 위의 typedef로 Factory가 정의되있는 것을 보고 공부하게 되었다. function pointer - 함수를 호출한다는 것은 함수가 정의된 메모리의 시작 주소로 pc를 이동시키는 것을 의미한다. 다른 상수 타입의 포인터와 마찬가지로 함수 포인터 단순히 이런 주소를 담는 변수이다. returnType (*fpName) (parmeters) - 위처럼 가리킬 함수의 리턴 타입, 파라미터와 함께 함수 포인터를 선언하고 같은 형태를 갖는 함수를 대입하여 주소를 저장하고, 이를 호출한다. void foo() { cout