halide下编译RISCV架构算子

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);
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值