C#/.NET の System 名前空間のサポート
Burst は System 名前空間の一部をサポートしており、これらの名前空間を Burst コンパイラーで Burst と互換性のあるバリアントに変換します。
System.Math
Burst は、以下のサポートされていないメソッドを除き、System.Math で宣言されるすべてのメソッドをサポートしています。
double IEEERemainder(double x, double y)Round(double value, int digits)
System.IntPtr
Burst は、静的フィールド IntPtr.Zero と IntPtr.Size を含め、System.IntPtr/System.UIntPtr のすべてのメソッドをサポートしています。
System.Threading.Interlocked
Burst は、System.Threading.Interlocked に用意されているすべてのメソッド (例: Interlocked.Increment) のアトミックメモリ intrinsic をサポートしています。
InterLocked メソッドのソースの場所が自然なアライメントになるようにしてください。例えば、ポインターのアライメントはポインターが参照する型の倍数です。
[StructLayout(LayoutKind.Explicit)]
struct Foo
{
[FieldOffset(0)] public long a;
[FieldOffset(5)] public long b;
public long AtomicReadAndAdd()
{
return Interlocked.Read(ref a) + Interlocked.Read(ref b);
}
}
構造体 Foo へのポインターのアライメントが 8 (long 値の自然なアライメント) である場合、データは自然にアライメントされたアドレスにあるため、a の Interlocked.Read は成功します。しかし、b は成功せず、b のロード時には結果として未定義の動作が発生します。
System.Threading.Thread
Burst は、System.Threading.Thread の MemoryBarrier メソッドをサポートしています。
System.Threading.Volatile
Burst は、System.Threading.Volatile で提供される Read と Write の非ジェネリックバリアントをサポートしています。