Halide对RISCV架构的支持
当前Halide版本能够支持的RISCV架构对应的os有linux与noos。
对于linux来说,需要设定HL_TARGET为riscv-bits-linux-features
其中bits为32或者64,features为Halide支持的features,如果为空,则默认为double-float ABI。
比如我们要编译32位linux版本,则将HL_TARGET设置为riscv-32-linux。
如果编译64位无os版本,则将HL_TARGET设置为riscv-64-noos。
注意如果对应的RISCV硬件是无操作系统的,那么不能设置HL_TARGET为riscv-xx-linux,因为os为linux时,其底层将会调用phtread等Linux的系统库。
Halide编译RISCV noos
当前使用32位的RISCV的halide算子存在的问题
当前使用halide编译noos的版本时,目前只支持ELF header中Flags为0x0与0x4,double-float ABI。
而一般riscv64-unknown-elf编译链支持ELF header中ELF32与0X3,RSV single-float ABI与 0x4,double-float ABI。
因此RISCV noos目前在32位的RISCV架构上无法使用。
外部集成64位的RISCV noos的额外工作
当外部实现集成risc-v noos版本的halide算子时,需要额为实现halide源码中src/runtime/runtime_internal.h中一些接口,以下是要实现的接口示例:
#include <stddef.h>
#include <malloc.h>
#include <stdio.h>
extern "C"{
void *halide_malloc(void *user_context, size_t x){
return malloc(x);
}
void halide_free(void *user_context, void *ptr){
free(ptr);
}
void halide_print(void *user_context, const char *msg){
printf("%s \n",msg);
}
void halide_error(void *user_context, const char *msg){
printf("%s \n",msg);
}
}