掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
Delphiで人工ニューラルネットワーク(Artificial Neural Network)のクラスを作りましたが遅いです (ID:150820)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
裏目小僧さま よくわかっていないのですが、Delphiの64Bit制約のため以下のように2つの関数にしてみました。 使用しますと以下の■※の個所でACCESS_VIOLATIONエラーになります。 私にはもはや全く分からずです。すいません。 procedure CoffSum(pD,pS:PSingle;MulData:TMulSingle); asm LEA RCX, MulData[0] //VBROADCASTSS ymm5, [RCX] //AVX 256bitレジスタに32bit値を埋める db $c4,$e2,$7d,$18,$29 MOV RAX, pS // ソースアドレスをRAXに MOV RDX, pD //加算してゆく先 //VMOVUPS YMM0, [RDX] //AVX db $c5,$fc,$10,$02 //VMOVUPS YMM1, [RDX+32] db $c5,$fc,$10,$4a,$20 //VMOVUPS YMM2, [RDX+64] db $c5,$fc,$10,$52,$40 //VMOVUPS YMM3, [RDX+96] db $c5,$fc,$10,$5a,$60 //VFMADD231PS YMM0, YMM5, [RAX] //FMA YMM0+=YMM5*[RAX] db $c4,$e2,$55,$b8,$00 //VFMADD231PS YMM1, YMM5, [RAX+32] db $c4,$e2,$55,$b8,$48,$20 //VFMADD231PS YMM2, YMM5, [RAX+64] db $c4,$e2,$55,$b8,$50,$40 //VFMADD231PS YMM3, YMM5, [RAX+96] db $c4,$e2,$55,$b8,$58,$60 //VMOVUPS [RDX], ymm0 db $c5,$fc,$11,$02 ─────────────■※ここでエラーになります //VMOVUPS [RDX+32], ymm1 db $c5,$fc,$11,$4a,$20 //VMOVUPS [RDX+64], ymm2 db $c5,$fc,$11,$52,$40 //VMOVUPS [RDX+96], ymm3 db $c5,$fc,$11,$5a,$60 end; // for i:=0 to Count-1 do arD[i]:=arD[i] + coff*arS[i]; procedure AVXcoffSum(var arD, arS: single; coff: single; Count: integer); var //single32bitを 1ループで32個処理する MulData: TMulSingle; pD, pS: PSingle; begin pD := @arD; pS := @arS; MulData[0] := coff;//値渡しなのでローカル変数にcopy while Count >= 32 do begin CoffSum(pD,pS,MulData); Inc(pD, 32); Inc(pS, 32); Dec(Count, 32); end; while Count > 0 do begin pD^ := pD^ + MulData[0] * pS^; Inc(pD); Inc(pS); Dec(Count, 1); end; end;
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.