k1x-tcm/main.c
2024-12-16 10:04:11 +08:00

76 lines
1.9 KiB
C

#define _GNU_SOURCE
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
#include <sched.h>
#include "aimm.h"
#define TCM_BUF_SIZE (1024*128*4)
#define DRAM_BUF_SIZE (1024*1024*12)
int main(void)
{
aimm_init();
cpu_set_t mask;
CPU_ZERO(&mask);
// 绑定到四个AICPU核心
CPU_SET(0, &mask);
CPU_SET(1, &mask);
CPU_SET(2, &mask);
CPU_SET(3, &mask);
// 获取当前进程ID
pid_t pid = getpid();
// 设置CPU亲和性
if (sched_setaffinity(pid, sizeof(cpu_set_t), &mask) == -1) {
perror("sched_setaffinity");
return 1;
}
char *tcm = aimm_tcm_malloc(TCM_BUF_SIZE);
char *dram = malloc(DRAM_BUF_SIZE);//aimm_dram_malloc(DRAM_BUF_SIZE);
if (!tcm || !dram) {
printf("aimm malloc failed(tcm:%lx)(dram:%lx)\n", (size_t)tcm, (size_t)dram);
return -1;
}
printf("aimm malloc succfully(tcm:%lx)(dram:%lx)\n", (size_t)tcm, (size_t)dram);
memset(dram, 0xa5, DRAM_BUF_SIZE);
int loop = ((DRAM_BUF_SIZE + TCM_BUF_SIZE -1) / TCM_BUF_SIZE);
int cpy_size = TCM_BUF_SIZE;
int remain = DRAM_BUF_SIZE;
int offset = 0;
printf("aimm cpy dram ---> tcm: total(%lx) copy size(%lx) loop(%lx)\n", DRAM_BUF_SIZE, TCM_BUF_SIZE, loop);
for (int i =0; i < loop; i++) {
//aimm_memcpy(tcm, dram + offset, cpy_size);
memcpy(tcm, dram + offset, cpy_size);
//printf("memcpy tcm:%p, dram:%p, cpy_sz:%d\n", tcm, dram+offset, cpy_size);
if (memcmp(tcm, dram + offset, cpy_size) != 0) {
printf("aimm memcpy fail\n");
break;
}
memcpy(dram + offset, tcm, cpy_size);
if (memcmp(tcm, dram + offset, cpy_size) != 0) {
printf("aimm memcpy fail 1111\n");
break;
}
remain -= cpy_size;
if (remain <= 0) {
printf("aimm memcpy succfully\n");
break;
}
offset += cpy_size;
cpy_size = (remain > cpy_size) ? cpy_size : remain;
}
aimm_tcm_free(tcm);
//aimm_dram_free(dram);
free(dram);
return 0;
}