SSE4-Strstr 项目使用教程

SSE4-Strstr 项目使用教程

sse4-strstrSIMD (SWAR/SSE/SSE4/AVX2/AVX512F/ARM Neon) of Karp-Rabin algorithm's modification项目地址:https://gitcode.com/gh_mirrors/ss/sse4-strstr

1. 项目的目录结构及介绍

SSE4-Strstr 项目的目录结构如下:

sse4-strstr/
├── original/
│   └── sse4_strstr.c
├── src/
│   ├── aarch64-strstr-v2.cpp
│   ├── avx2-naive-strstr.cpp
│   ├── avx2-naive-strstr64.cpp
│   ├── avx2-naive-unrolled-strstr.cpp
│   ├── avx2-strstr-v2-clang-specific.cpp
│   ├── avx2-strstr-v2.cpp
│   ├── avx2-strstr.cpp
│   ├── avx512bw-strstr-v2.cpp
│   └── sse4_strstr.cpp
├── utils/
├── .gitignore
├── LICENSE
├── Makefile
└── README.rst

目录介绍

  • original/: 包含原始的 SSE4 字符串搜索实现文件 sse4_strstr.c
  • src/: 包含多种优化和不同架构的实现文件,如 AVX2、AVX512 和 ARM Neon 等。
  • utils/: 包含项目辅助工具文件。
  • .gitignore: Git 忽略文件配置。
  • LICENSE: 项目许可证文件。
  • Makefile: 项目编译配置文件。
  • README.rst: 项目说明文档。

2. 项目的启动文件介绍

项目的启动文件主要是 src/sse4_strstr.cpp,该文件包含了 SSE4 字符串搜索的核心实现。以下是该文件的主要内容:

#include <stdint.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

char* sse4_strstr_max36(char* s1, int n1, char* s2, int n2);
char* sse4_strstr(char* s1, int n1, char* s2, int n2) {
    switch (n1) {
        case 0: return NULL;
        case 1: return strchr(s2, s1[1]);
        case 2: return strstr(s2, s1);
        case 3: return sse4_strstr_len3(s1, n1, s2, n2);
        case 4: return sse4_strstr_len4(s1, n1, s2, n2);
        case 5: case 6: case 7: case 8: case 9: case 10: case 11: case 12: case 13: case 14: case 15: case 16: case 17: case 18: case 19: case 20:
            return sse4_strstr_max20(s1, n1, s2, n2);
        case 21: case 22: case 23: case 24: case 25: case 26: case 27: case 28: case 29: case 30: case 31: case 32: case 33: case 34: case 35: case 36:
            return sse4_strstr_max36(s1, n1, s2, n2);
        default:
            return sse4_strstr_any(s1, n1, s2, n2);
    }
}

char* sse4_strstr_any(char* s1, int n1, char* s2, int n2) {
    // n1 > 4, n2 > 4
    char* result = NULL;
    // 具体实现代码
    return result;
}

3. 项目的配置文件介绍

项目的配置文件主要是 Makefile,该文件用于配置项目的编译选项和依赖关系。以下是 Makefile 的主要内容:

# 编译器
CC = gcc
CXX = g++

# 编译选项
CFLAGS = -O3 -Wall -Wextra -march=native
CXXFLAGS = -O3 -Wall -Wextra -march=native

# 目标文件
TARGETS = sse4_strstr

# 源文件
SRCS = src/sse4_strstr.cpp

# 头文件路径
INCLUDES = -Iinclude

# 默认目标
all: $(TARGETS)

# 编译规则
$(TARGETS): $(SRCS)
    $(CXX) $(CXXFLAGS) $(INCLUDES) -o $@ $<

# 清理规则
clean:
    rm -f $(TARGETS)

通过 Makefile,可以方便地进行项目的编译和清理工作。

sse4-strstrSIMD (SWAR/SSE/SSE4/AVX2/AVX512F/ARM Neon) of Karp-Rabin algorithm's modification项目地址:https://gitcode.com/gh_mirrors/ss/sse4-strstr

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

花琼晏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值