Skip to content

Commit

Permalink
Enable building FPGA or GPU platform independently
Browse files Browse the repository at this point in the history
The original building process would compile CPU-related code as well
even if we assign the other platform(GPU or FPGA) only.

The current building process can build each platform independently.
If no hardware platform is specified,
the CPU and the supported instruction set would be chose.
The libtuv code would be compiled only if the specified hardware
platforms contain CPU.

Close #105.
  • Loading branch information
marktwtn committed Feb 20, 2019
1 parent e24d70f commit 6f64e38
Show file tree
Hide file tree
Showing 6 changed files with 51 additions and 23 deletions.
39 changes: 29 additions & 10 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -30,16 +30,29 @@ include mk/cpu-features.mk
# Handle git submodule
include mk/submodule.mk

# Assign the hardware to CPU if no hardware is specified
PLATFORMS := $(BUILD_AVX) $(BUILD_SSE) $(BUILD_CPU) $(BUILD_GPU) $(BUILD_FPGA_ACCEL)
ENABLE_PLATFORMS := $(findstring 1,$(PLATFORMS))
ifneq ("$(ENABLE_PLATFORMS)","1")
ifeq ("$(call cpu_feature,AVX)","1")
BUILD_AVX = 1
else ifeq ("$(call cpu_feature,SSE)","1")
BUILD_SSE = 1
else
BUILD_CPU = 1
endif
endif


ifeq ("$(BUILD_AVX)","1")
CFLAGS += -mavx -DENABLE_AVX
ifeq ("$(call cpu_feature,AVX2)","1")
CFLAGS += -mavx2
endif
else
BUILD_SSE := $(call cpu_feature,SSE)
ifeq ("$(BUILD_SSE)","1")
else ifeq ("$(BUILD_SSE)","1")
CFLAGS += -msse2 -DENABLE_SSE
endif
else ifeq ("$(BUILD_CPU)","1")
CFLAGS += -DENABLE_CPU
endif

ifeq ("$(BUILD_GPU)","1")
Expand Down Expand Up @@ -87,13 +100,11 @@ OBJS = \

ifeq ("$(BUILD_AVX)","1")
OBJS += pow_avx.o
else
ifeq ("$(BUILD_SSE)","1")
else ifeq ("$(BUILD_SSE)","1")
OBJS += pow_sse.o
else
else ifeq ("$(BUILD_CPU)","1")
OBJS += pow_c.o
endif
endif

ifeq ("$(BUILD_GPU)","1")
OBJS += \
Expand All @@ -118,6 +129,14 @@ endif

OBJS := $(addprefix $(OUT)/, $(OBJS))

# Add the libtuv PIC(position independent code) library into the object files
# if the specified hardware is CPU
CPU_PLATFORMS := $(BUILD_AVX) $(BUILD_SSE) $(BUILD_CPU)
ENABLE_CPU_PLATFORMS := $(findstring 1,$(CPU_PLATFORMS))
ifeq ("$(ENABLE_CPU_PLATFORMS)","1")
OBJS += $(LIBTUV_LIBRARY)
endif

$(OUT)/test-%.o: tests/test-%.c $(LIBTUV_PATH)/include
$(VECHO) " CC\t$@\n"
$(Q)$(CC) -o $@ $(CFLAGS) -I $(SRC) $(LIBTUV_INCLUDE) -c -MMD -MF $@.d $<
Expand All @@ -126,11 +145,11 @@ $(OUT)/%.o: $(SRC)/%.c $(LIBTUV_PATH)/include
$(VECHO) " CC\t$@\n"
$(Q)$(CC) -o $@ $(CFLAGS) $(LIBTUV_INCLUDE) -c -MMD -MF $@.d $<

$(OUT)/test-%: $(OUT)/test-%.o $(OBJS) $(LIBTUV_LIBRARY)
$(OUT)/test-%: $(OUT)/test-%.o $(OBJS)
$(VECHO) " LD\t$@\n"
$(Q)$(CC) -o $@ $^ $(LDFLAGS)

$(OUT)/libdcurl.so: $(OBJS) $(LIBTUV_LIBRARY)
$(OUT)/libdcurl.so: $(OBJS)
$(VECHO) " LD\t$@\n"
$(Q)$(CC) -shared -o $@ $^ $(LDFLAGS)

Expand Down
4 changes: 3 additions & 1 deletion docs/build-n-test.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,13 @@
* dcurl allows various combinations of build configurations to fit final use scenarios.
* You can execute `make config` and then edit file `build/local.mk` for custom build options.
- ``BUILD_AVX``: build Intel AVX-accelerated Curl backend.
- ``BUILD_SSE``: build Intel SSE-accelerated Curl backend.
- ``BUILD_CPU``: build CPU Curl backend without acceleration.
- ``BUILD_GPU``: build OpenCL-based GPU accelerations.
- ``BUILD_FPGA_ACCEL``: build the interface interacting with the Cyclone V FPGA based accelerator. Verified on DE10-nano board and Arrow SoCKit board.
- ``BUILD_JNI``: build a shared library for IRI. The build system would generate JNI header file
downloading from [latest JAVA source](https://github.com/DLTcollab/iri).
- ``BUILD_COMPAT``: build extra cCurl compatible interface.
- ``BUILD_FPGA_ACCEL``: build the interface interacting with the Cyclone V FPGA based accelerator. Verified on DE10-nano board and Arrow SoCKit board.
- ``BUILD_STAT``: show the statistics of the PoW information.
- ``BUILD_DEBUG``: dump verbose messages internally.
* Alternatively, you can specify conditional build as following:
Expand Down
12 changes: 9 additions & 3 deletions mk/defs.mk
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,23 @@ BUILD_DEBUG ?= 0
# Build AVX backend or not
BUILD_AVX ?= 0

# Build SSE backend or not
BUILD_SSE ?= 0

# Build CPU backend or not
BUILD_CPU ?= 0

# Build OpenCL backend or not
BUILD_GPU ?= 0

# Build FPGA backend or not
BUILD_FPGA_ACCEL ?= 0

# Build JNI glue as the bridge between dcurl and IRI
BUILD_JNI ?= 0

# Build cCurl compatible interface
BUILD_COMPAT ?= 0

# Build FPGA backend or not
BUILD_FPGA_ACCEL ?= 0

# Show the PoW-related statistic messages or not
BUILD_STAT ?= 0
6 changes: 3 additions & 3 deletions src/dcurl.c
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
#include "pow_avx.h"
#elif defined(ENABLE_SSE)
#include "pow_sse.h"
#else
#elif defined(ENABLE_CPU)
#include "pow_c.h"
#endif

Expand All @@ -46,7 +46,7 @@ LIST_HEAD(IMPL_LIST);
extern ImplContext PoWAVX_Context;
#elif defined(ENABLE_SSE)
extern ImplContext PoWSSE_Context;
#else
#elif defined(ENABLE_CPU)
extern ImplContext PoWC_Context;
#endif

Expand All @@ -66,7 +66,7 @@ bool dcurl_init()
ret &= registerImplContext(&PoWAVX_Context);
#elif defined(ENABLE_SSE)
ret &= registerImplContext(&PoWSSE_Context);
#else
#elif defined(ENABLE_CPU)
ret &= registerImplContext(&PoWC_Context);
#endif

Expand Down
7 changes: 4 additions & 3 deletions tests/common.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,16 @@
#include "pow_avx.h"
#elif defined(ENABLE_SSE)
#include "pow_sse.h"
#elif defined(ENABLE_FPGA_ACCEL)
#include "pow_fpga_accel.h"
#else
#elif defined(ENABLE_CPU)
#include "pow_c.h"
#endif

#if defined(ENABLE_OPENCL)
#include "pow_cl.h"
#endif
#if defined(ENABLE_FPGA_ACCEL)
#include "pow_fpga_accel.h"
#endif

#include <stdint.h>
#include <stdlib.h>
Expand Down
6 changes: 3 additions & 3 deletions tests/test-pow.c
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
extern ImplContext PoWAVX_Context;
#elif defined(ENABLE_SSE)
extern ImplContext PoWSSE_Context;
#else
#elif defined(ENABLE_CPU)
extern ImplContext PoWC_Context;
#endif

Expand All @@ -26,7 +26,7 @@ const char *description[] = {
"CPU - AVX",
#elif defined(ENABLE_SSE)
"CPU - SSE",
#else
#elif defined(ENABLE_CPU)
"CPU - pure C",
#endif

Expand Down Expand Up @@ -114,7 +114,7 @@ int main()
PoWAVX_Context,
#elif defined(ENABLE_SSE)
PoWSSE_Context,
#else
#elif defined(ENABLE_CPU)
PoWC_Context,
#endif

Expand Down

0 comments on commit 6f64e38

Please sign in to comment.