gpt4 book ai didi

c - Go中的地址对齐

转载 作者:IT王子 更新时间:2023-10-29 00:47:52 31 4
gpt4 key购买 nike

所以我正在使用 c2go 将 C 代码与 Go 链接起来。 C 代码要求从 Go 调用的函数的某些参数是 256 位对齐的(函数参数都是指向 Go 变量的指针)。 Go 有没有办法实现这一点(即在 Go 中为变量指定 256 对齐方式)?

在 Go 中,“unsafe.Alignof(f)”显示为 8 字节对齐(对于“var f [8]float32”),即 Go 保证 f 仅对齐 8 字节。我需要它以某种方式对齐 32 字节。

对于好奇的人:C 代码使用 SIMD 指令(具体为 AVX)。我使用的是“vmovaps”指令,它需要操作数的 256 位对齐。我可以使用不需要对齐的“vmovups”,但我怀疑这会降低性能。

最佳答案

唯一合理的实现方式是在 go 中对函数进行原型(prototype)设计,然后将 (go) 程序集编写为 BYTEWORD 指令,就像在 golang 库本身中所做的那样,如 glang-1.9.1 文档中所述:

Unsupported opcodes

The assemblers are designed to support the compiler so not all hardware instructions are defined for all architectures: if the compiler doesn't generate it, it might not be there. If you need to use a missing instruction, there are two ways to proceed. One is to update the assembler to support that instruction, which is straightforward but only worthwhile if it's likely the instruction will be used again. Instead, for simple one-off cases, it's possible to use the BYTE and WORD directives to lay down explicit data into the instruction stream within a TEXT.

例如,

blake2b implementation at line 115为 AVX2 做这个

关于c - Go中的地址对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47373650/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com