intel ISA-L library 程序库的使用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了intel ISA-L library 程序库的使用相关的知识,希望对你有一定的参考价值。
参考技术A intel®-storage-acceleration-library Intel存储加速库,包括两个大类:加密和非加密的。非加密的 crc,izip,erase-code,加密的包括sha512,sha256,md5,sha1等。核心技术就是使用intel sse/avx/avx2/avx256的扩展指令,并行运算多个流的方法。单线程比openssl要快2~8倍。
现在ISA-L已经开源:
https://github.com/01org/isa-l
https://github.com/01org/isa-l_crypto
并行运算的接口有些像write/writev:
ssize_t write(int fd, const void *buf, size_t count);
ssize_t writev(int fd, const struct iovec *iov, int iovcnt);
struct iovec
void *iov_base; /* Starting address */
size_t iov_len; /* Number of bytes to transfer */
;
实际接口:
SHA512_HASH_CTX_MGR *mgr = NULL;
SHA512_HASH_CTX ctxpool[NUM_JOBS], *ctx = NULL;
posix_memalign((void *)&mgr, 16, sizeof(SHA512_HASH_CTX_MGR));
sha512_ctx_mgr_init(mgr);
// Init contexts before first use
for (i = 0; i < MSGS; i++)
hash_ctx_init(&ctxpool[i]);
ctxpool[i].user_data = (void *)((uint64_t) i);
for (i = 0; i < MSGS; i++)
sha512_ctx_mgr_submit(mgr, &ctxpool[i], msgs[i], strlen((char *)msgs[i]), HASH_ENTIRE);
while (1)
ctx = sha512_ctx_mgr_flush(mgr);
if (ctx)
t = (unsigned long)(ctx->user_data);
因为有write到writev的类似的接口,所以单buffer接口到多buffer接口的转化是必须的。
单线程环境:只有多buffer接口,不能转化成单buffer接口
1)缓冲多个buffer。
2)submit buffers。
3)等待多个buffer结果。
程序设计成多buffer + lazy load的形式。
多线程:单buffer接口设计
1)fifo 缓冲: 多个写buffer线程 《----》fifo 《----》多个算sha256线程。
2)promise/future 返回
接口形式: std::future<sha256_digest> cal_sha256(voiud *buf, size_t len);
使用std::atomic 生成sequence number,内部使用map管理 promise指针。
map <uint64, std::unique_ptr<std::promise<sha256_digest>>>
16位汇编 多文件 intel汇编 编译器masm5.0 调用子程序库即静态库的自定义函数 WINDOWS
;以下是16位汇编 创建静态库,并调用静态库中的函数
;多文件汇编格式
;编译方法(此处用的是masm 5.0,如果是其他的编译器,有可能不能编译)
;第一种,编译方法
;1、masm main.asm 生成.obj文件
;2、masm lib.asm 生成.obj文件
;3、link main.obj lib.obj 生成.exe文件
;第二种,编译方法
;1、masm main.asm 生成.obj文件
;2、masm 16lib.asm 生成.obj文件
;3、lib 16lib.lib 16lib.obj 由.obj文件生成.lib文件,即静态库文件,可以做为函数库使用
;4、link main.obj 16lib.lib 由.obj .lib两个文件生成.exe文件
;=======================================
;(main.asm)
.model small
.stack 100h
.386
.data
Msg db "in my world! you know?",0
.code
extrn int21h_40h:far ;引用外部函数,注意:masm5.0用的是extrn ,少一个e字符
main PROC
mov ax,@data
mov ds,ax
push di
mov di,offset Msg
call int21h_40h
pop di
mov ax,4c00h
int 21h main
ENDP
END main
;==================================
;(16lib.asm)
.model small
.stack .data
.code
public int21h_40h ;定义外部函数
;********MS-DOS 中断 int 21h功能调用***********************
;--------int 21h 功能号 40h事例-------------
;说明:在标准输出上显示字符串
;输入参数:di = 字符串地址
;输出参数:无
int21h_40h proc far
xor cx,cx
mov dx,di ;在循环前保存参数,由于后面循环会改变di
;此处也是功能 40h 的参数
L1:
;计算字符串长度
cmp byte ptr[di],0
je L2
inc cx
inc di
jmp L1
L2:
;显示字符串到标准输出设备上
mov ah,40h
mov bx,1
int 21h
ret
int21h_40h endp
end
以上是关于intel ISA-L library 程序库的使用的主要内容,如果未能解决你的问题,请参考以下文章
无法定位序数242于动态链接库,Anaconda3Libraryinmkl_intel_thread
16位汇编 多文件 intel汇编 编译器masm5.0 调用子程序库即静态库的自定义函数 WINDOWS