Skip to content

Commit 32015b5

Browse files
simd corrected DIT
1 parent 69e2ce2 commit 32015b5

13 files changed

Lines changed: 1389 additions & 1510 deletions

CMakeLists.txt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ option(BFFT_BUILD_PROBES "Build optional BFFT comparison probes" ON)
1313
option(BFFT_ENABLE_AUTO_SIMD "Enable host SIMD flags detected by CMake" ON)
1414
option(BFFT_COMPARE_WITH_IPP "Enable Intel IPP in the library comparison probe when found" ON)
1515
option(BFFT_ENABLE_PFFFT_BENCHMARK "Enable PFFFT in the benchmark example when found" ON)
16+
option(BFFT_USE_DIT_RFFT "Use the experimental DIT RFFT kernel for standard double forward" OFF)
17+
option(BFFT_USE_DIT_RFFT_INVERSE "Use the experimental DIT RFFT kernel for standard double inverse" OFF)
1618

1719
set(BFFT_PUBLIC_HEADERS
1820
include/bfft/bfft.h
@@ -43,6 +45,12 @@ function(bfft_configure_library target)
4345
if(BFFT_PLATFORM_LIBS)
4446
target_link_libraries(${target} PUBLIC ${BFFT_PLATFORM_LIBS})
4547
endif()
48+
if(BFFT_USE_DIT_RFFT)
49+
target_compile_definitions(${target} PRIVATE BFFT_USE_DIT_RFFT=1)
50+
endif()
51+
if(BFFT_USE_DIT_RFFT_INVERSE)
52+
target_compile_definitions(${target} PRIVATE BFFT_USE_DIT_RFFT_INVERSE=1)
53+
endif()
4654
endfunction()
4755

4856
add_library(bfft_static STATIC ${BFFT_SOURCES} ${BFFT_PUBLIC_HEADERS})
@@ -114,6 +122,7 @@ if(BFFT_BUILD_EXAMPLES)
114122
bfft_add_cpp_executable(locality_probe examples/locality_probe.cpp)
115123
bfft_add_cpp_executable(cpp_api_demo examples/cpp_api_demo.cpp)
116124
bfft_add_cpp_executable(atan2_benchmark examples/atan2_benchmark.cpp)
125+
bfft_add_cpp_executable(dif_vs_dit_benchmark examples/dif_vs_dit_benchmark.cpp)
117126
bfft_add_cpp_executable(atan_vectoring_network_experiment src/atan_vectoring_network_experiment.cpp)
118127
bfft_add_cpp_executable(audio_magphase_roundtrip_benchmark examples/audio_magphase_roundtrip_benchmark.cpp)
119128
bfft_add_cpp_executable(fftw_polar_roundtrip_benchmark examples/fftw_polar_roundtrip_benchmark.cpp)

Makefile

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,14 @@ CXXWARNFLAGS ?= -Wall -Wextra -Wpedantic
1616
COPTFLAGS ?= -O2
1717
CWARNFLAGS ?= -Wall -Wextra -Wpedantic
1818
CPPFLAGS ?=
19+
BFFT_USE_DIT_RFFT ?= 0
20+
BFFT_USE_DIT_RFFT_INVERSE ?= 0
21+
ifeq ($(BFFT_USE_DIT_RFFT),1)
22+
CPPFLAGS += -DBFFT_USE_DIT_RFFT=1
23+
endif
24+
ifeq ($(BFFT_USE_DIT_RFFT_INVERSE),1)
25+
CPPFLAGS += -DBFFT_USE_DIT_RFFT_INVERSE=1
26+
endif
1927
# BFFT_MAKE_DOCTOR_CXXFLAGS_GUARD_BEGIN
2028
ifeq ($(filter undefined default,$(origin CXXFLAGS)),)
2129
else
@@ -66,6 +74,7 @@ SHARED_LIB := $(BUILD_DIR)/lib$(LIB_NAME).so
6674
PC_FILE := $(BUILD_DIR)/$(LIB_NAME).pc
6775
BENCH := $(BUILD_DIR)/examples/benchmark
6876
BODFT_BENCH := $(BUILD_DIR)/examples/bodft_benchmark
77+
DIF_DIT_BENCH := $(BUILD_DIR)/examples/dif_vs_dit_benchmark
6978
APPLE_BENCH := $(BUILD_DIR)/examples/apple_benchmark
7079
ATAN2_BENCH := $(BUILD_DIR)/examples/atan2_benchmark
7180
LOCALITY_PROBE := $(BUILD_DIR)/examples/locality_probe
@@ -96,10 +105,10 @@ all: $(STATIC_LIB) $(SHARED_LIB) examples
96105
$(BUILD_DIR):
97106
mkdir -p $(BUILD_DIR)/src $(BUILD_DIR)/examples $(BUILD_DIR)/tests $(BUILD_DIR)/benchmarks
98107

99-
$(OBJ): $(SRC) include/bfft/bfft.h src/detail/bruun_kernel.hpp | $(BUILD_DIR)
108+
$(OBJ): $(SRC) include/bfft/bfft.h src/detail/bruun_kernel.hpp src/detail/experimental_radix4_rfft_kernel.hpp src/detail/MAG_REPRESENT_KERNEL.hpp | $(BUILD_DIR)
100109
$(CXX) $(LIB_CPPFLAGS) $(LIB_CXXFLAGS) -c $< -o $@
101110

102-
$(BODFT_OBJ): $(BODFT_SRC) include/bfft/bodft.h include/bfft/bfft.h src/detail/bodft_kernel.hpp src/detail/bruun_kernel.hpp | $(BUILD_DIR)
111+
$(BODFT_OBJ): $(BODFT_SRC) include/bfft/bodft.h include/bfft/bfft.h src/detail/bodft_kernel.hpp src/detail/bruun_kernel.hpp src/detail/MAG_REPRESENT_KERNEL.hpp | $(BUILD_DIR)
103112
$(CXX) $(LIB_CPPFLAGS) $(LIB_CXXFLAGS) -c $< -o $@
104113

105114
$(STFT_OBJ): $(STFT_SRC) include/bfft/stft.h include/bfft/bfft.h include/bfft/bodft.h | $(BUILD_DIR)
@@ -120,27 +129,30 @@ $(PC_FILE): pkgconfig/bfft.pc.in | $(BUILD_DIR)
120129

121130
examples: $(BENCH) $(BODFT_BENCH) $(APPLE_EXAMPLES) $(LOCALITY_PROBE) $(C_DEMO) $(CPP_DEMO)
122131

123-
benchmarks: $(BENCH) $(BODFT_BENCH) $(ATAN2_BENCH)
132+
benchmarks: $(BENCH) $(BODFT_BENCH) $(DIF_DIT_BENCH) $(ATAN2_BENCH)
124133

125134
asm-check: $(ASM_OUTPUTS)
126135
@if [ -z "$(ASM_OUTPUTS)" ]; then echo "No x86 assembly variants supported by $(CXX)."; fi
127136

128-
$(AVX2_ASM): $(SRC) include/bfft/bfft.h src/detail/bruun_kernel.hpp | $(BUILD_DIR)
137+
$(AVX2_ASM): $(SRC) include/bfft/bfft.h src/detail/bruun_kernel.hpp src/detail/experimental_radix4_rfft_kernel.hpp src/detail/MAG_REPRESENT_KERNEL.hpp | $(BUILD_DIR)
129138
$(CXX) $(LIB_CPPFLAGS) $(CXXFLAGS) $(AVX2_FLAGS) -S -fverbose-asm $< -o $@
130139

131-
$(BODFT_AVX2_ASM): $(BODFT_SRC) include/bfft/bodft.h include/bfft/bfft.h src/detail/bodft_kernel.hpp src/detail/bruun_kernel.hpp | $(BUILD_DIR)
140+
$(BODFT_AVX2_ASM): $(BODFT_SRC) include/bfft/bodft.h include/bfft/bfft.h src/detail/bodft_kernel.hpp src/detail/bruun_kernel.hpp src/detail/MAG_REPRESENT_KERNEL.hpp | $(BUILD_DIR)
132141
$(CXX) $(LIB_CPPFLAGS) $(CXXFLAGS) $(AVX2_FLAGS) -S -fverbose-asm $< -o $@
133142

134-
$(SSE2_ASM): $(SRC) include/bfft/bfft.h src/detail/bruun_kernel.hpp | $(BUILD_DIR)
143+
$(SSE2_ASM): $(SRC) include/bfft/bfft.h src/detail/bruun_kernel.hpp src/detail/experimental_radix4_rfft_kernel.hpp src/detail/MAG_REPRESENT_KERNEL.hpp | $(BUILD_DIR)
135144
$(CXX) $(LIB_CPPFLAGS) $(CXXFLAGS) $(SSE2_FLAGS) -S -fverbose-asm $< -o $@
136145

137146
$(BENCH): examples/benchmark.cpp include/bfft/bfft.hpp $(STATIC_LIB) | $(BUILD_DIR)
138147
$(CXX) $(CPPFLAGS) $(INCLUDES) $(CXXFLAGS) $(AUTO_SIMD_FLAGS) $< $(STATIC_LIB) $(LDLIBS) $(DL_LIBS) -o $@
139148

140-
$(BODFT_BENCH): examples/bodft_benchmark.cpp src/detail/bodft_kernel.hpp src/detail/bruun_kernel.hpp | $(BUILD_DIR)
149+
$(BODFT_BENCH): examples/bodft_benchmark.cpp src/detail/bodft_kernel.hpp src/detail/bruun_kernel.hpp src/detail/MAG_REPRESENT_KERNEL.hpp | $(BUILD_DIR)
141150
$(CXX) $(CPPFLAGS) $(INCLUDES) $(CXXFLAGS) $(AUTO_SIMD_FLAGS) $< $(LDLIBS) -o $@
142151

143-
$(ATAN2_BENCH): examples/atan2_benchmark.cpp src/detail/bruun_kernel.hpp | $(BUILD_DIR)
152+
$(DIF_DIT_BENCH): examples/dif_vs_dit_benchmark.cpp src/detail/experimental_radix4_rfft_kernel.hpp src/detail/bruun_kernel.hpp src/detail/MAG_REPRESENT_KERNEL.hpp include/bfft/bfft.hpp $(STATIC_LIB) | $(BUILD_DIR)
153+
$(CXX) $(CPPFLAGS) $(INCLUDES) $(CXXFLAGS) $(AUTO_SIMD_FLAGS) $< $(STATIC_LIB) $(LDLIBS) -o $@
154+
155+
$(ATAN2_BENCH): examples/atan2_benchmark.cpp src/detail/bruun_kernel.hpp src/detail/MAG_REPRESENT_KERNEL.hpp | $(BUILD_DIR)
144156
$(CXX) $(CPPFLAGS) $(INCLUDES) $(CXXFLAGS) $(AUTO_SIMD_FLAGS) $< $(LDLIBS) -o $@
145157

146158
$(APPLE_BENCH): examples/apple_benchmark.cpp include/bfft/bfft.hpp $(STATIC_LIB) | $(BUILD_DIR)
@@ -234,4 +246,3 @@ print-flags:
234246
@echo "AUTO_SIMD_FLAGS=$(AUTO_SIMD_FLAGS)"
235247
@echo "LIB_CXXFLAGS=$(LIB_CXXFLAGS)"
236248
@echo "LIB_CXXFLAGS origin is makefile-expanded"
237-

build-dit-both/tests/api_c

139 KB
Binary file not shown.

build-dit-both/tests/correctness

159 KB
Binary file not shown.

build-dit-fwd/tests/api_c

122 KB
Binary file not shown.

build-dit-fwd/tests/correctness

159 KB
Binary file not shown.

0 commit comments

Comments
 (0)